Jenis koleksi yang Anda gunakan adalah varray, sehingga diindeks; Anda dapat melakukan:
FOR i IN 1..v_contacts_fname.COUNT
LOOP
dbms_output.put_line(v_contacts_fname(i) ||', ' || v_contacts_lname(i));
END LOOP;
Mengadaptasi kode contoh Anda:
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;
/
sekarang mendapat
Entity_id: 550005 - Sub_id: 100051
dan, anderson
bob, bebop
PL/SQL procedure successfully completed.
Anda dapat melakukan pemeriksaan yang sangat mendasar di awal untuk memverifikasi bahwa count
dari kedua array adalah sama - jika tidak maka mungkin ada pengecualian.
Jika Anda ingin meneruskan argumen koleksi tunggal maka argumen itu harus berupa kumpulan catatan atau tipe objek, dideklarasikan baik pada tingkat skema atau mungkin dalam sebuah paket, tergantung pada bagaimana Anda ingin menggunakan konten (dan, sampai batas tertentu , versi Oracle yang Anda gunakan). Sepertinya Anda tidak ingin melakukan itu.