Loại bộ sưu tập bạn đang sử dụng là một varray, vì vậy nó được lập chỉ mục; bạn có thể làm:
FOR i IN 1..v_contacts_fname.COUNT
LOOP
dbms_output.put_line(v_contacts_fname(i) ||', ' || v_contacts_lname(i));
END LOOP;
Điều chỉnh mã mẫu của bạn:
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;
/
bây giờ nhận được
Entity_id: 550005 - Sub_id: 100051
dan, anderson
bob, bebop
PL/SQL procedure successfully completed.
Bạn có thể thực hiện một kiểm tra rất cơ bản ngay từ đầu để xác minh rằng count
từ cả hai mảng đều giống nhau - nếu không thì có thể ném một ngoại lệ.
Nếu bạn muốn truyền một đối số tập hợp duy nhất thì đối số đó sẽ cần phải là một tập hợp các loại bản ghi hoặc đối tượng, được khai báo ở cấp lược đồ hoặc có thể trong một gói, tùy thuộc vào cách bạn muốn sử dụng nội dung (và, ở một mức độ nào đó , phiên bản Oracle bạn đang sử dụng). Có vẻ như bạn không muốn làm điều đó.