sql >> Database teknologi >  >> RDS >> Oracle

Sådan arbejder du med PL/SQL-arrays eller samlinger som parametre, så JOIN dem sammen ved indeks

Den samlingstype, du bruger, er en varray, så den er indekseret; du kan gøre:

FOR i IN 1..v_contacts_fname.COUNT
LOOP

  dbms_output.put_line(v_contacts_fname(i) ||', ' || v_contacts_lname(i));

END LOOP;

Tilpasning af din eksempelkode:

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;
/

nu får

Entity_id: 550005 - Sub_id: 100051
dan, anderson
bob, bebop


PL/SQL procedure successfully completed.

Du kan lave en meget grundlæggende kontrol i starten for at bekræfte, at count fra begge arrays er det samme - hvis ikke, så smid måske en undtagelse.

Hvis du vil sende et enkelt samlingsargument, skal det argument være en samling af post- eller objekttyper, deklareret enten på skemaniveau eller måske i en pakke, afhængigt af hvordan du vil bruge indholdet (og til en vis grad). , den version af Oracle, du bruger). Det lyder dog som om du ikke vil gøre det.




  1. Gruppering af binær variabel efter ID og Min/Max-datoer

  2. Python, konverter 4-byte tegn for at undgå MySQL-fejl Forkert strengværdi:

  3. python MySQLDB forespørgsel timeout

  4. Simpel MySQL-underforespørgselsydeevne