使用しているコレクションタイプはVARRAYであるため、インデックスが付けられます。あなたができること:
FOR i IN 1..v_contacts_fname.COUNT
LOOP
dbms_output.put_line(v_contacts_fname(i) ||', ' || v_contacts_lname(i));
END LOOP;
サンプルコードの適応:
DECLARE
PROCEDURE create_account(p_entity_id NUMBER
, p_sub_id NUMBER
, v_contacts_fname sys.odcivarchar2list
, v_contacts_lname sys.odcivarchar2list
)
IS
BEGIN
dbms_output.put_line('Entity_id: ' || p_entity_id || ' - Sub_id: ' || p_sub_id);
FOR i IN 1..v_contacts_fname.COUNT
LOOP
dbms_output.put_line(v_contacts_fname(i) ||', ' || v_contacts_lname(i));
END LOOP;
END create_account;
BEGIN
create_account(p_entity_id => 550005
, p_sub_id => 100051
, v_contacts_fname => sys.odcivarchar2list('dan','bob')
, v_contacts_lname => sys.odcivarchar2list('anderson','bebop')
) ;
END;
/
今すぐ
Entity_id: 550005 - Sub_id: 100051
dan, anderson
bob, bebop
PL/SQL procedure successfully completed.
最初に非常に基本的なチェックを行って、count
を確認できます。 両方の配列からの値は同じです。そうでない場合は、おそらく例外をスローします。
単一のコレクション引数を渡したい場合、その引数は、コンテンツの使用方法(およびある程度まで)に応じて、スキーマレベルまたはおそらくパッケージで宣言されたレコードまたはオブジェクトタイプのコレクションである必要があります。 、使用しているOracleのバージョン)。でも、そんなことはしたくないようです。