sql >> Database >  >> RDS >> Oracle

Hoe te werken met PL/SQL-arrays of verzamelingen als parameters en ze vervolgens samen te voegen via index

Het verzamelingstype dat u gebruikt is een varray, dus het is geïndexeerd; je kunt doen:

FOR i IN 1..v_contacts_fname.COUNT
LOOP

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

END LOOP;

Uw voorbeeldcode aanpassen:

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

krijgt nu

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


PL/SQL procedure successfully completed.

U kunt aan het begin een zeer eenvoudige controle uitvoeren om te controleren of de count van beide arrays is hetzelfde - zo niet, gooi dan misschien een uitzondering.

Als u een enkel verzamelingsargument wilt doorgeven, moet dat argument een verzameling record- of objecttypen zijn, gedeclareerd op schemaniveau of misschien in een pakket, afhankelijk van hoe u de inhoud wilt gebruiken (en, tot op zekere hoogte , de versie van Oracle die u gebruikt). Het klinkt echter alsof je dat niet wilt doen.




  1. Microsoft SQL Server Management Studio verkrijgen en installeren

  2. Waarom zal een enkele SQL-verwijderinstructie een impasse veroorzaken?

  3. Spammers detecteren met MySQL

  4. Gescheiden tekenreeks converteren naar meerdere waarden in mysql