Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Jak pracować z tablicami lub kolekcjami PL/SQL jako parametrami, a następnie JOIN je razem według indeksu?

Używany typ kolekcji to varray, więc jest indeksowany; możesz zrobić:

FOR i IN 1..v_contacts_fname.COUNT
LOOP

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

END LOOP;

Dostosowywanie przykładowego kodu:

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

teraz dostaje

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


PL/SQL procedure successfully completed.

Na początku możesz wykonać bardzo podstawowe sprawdzenie, aby sprawdzić, czy count z obu tablic jest taki sam - jeśli nie, to być może zrzuć wyjątek.

Jeśli chcesz przekazać pojedynczy argument kolekcji, wtedy ten argument musiałby być kolekcją typów rekordów lub obiektów, zadeklarowaną na poziomie schematu lub być może w pakiecie, w zależności od tego, jak chcesz użyć zawartości (i do pewnego stopnia , używana wersja Oracle). Wygląda na to, że nie chcesz tego robić.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Transponuj jeden wiersz na wiele wierszy Oracle

  2. Pobieranie informacji o typie danych dla kolumn w Oracle OCCI ResultSet

  3. Oracle 11g — uruchamianie kursorów PL/SQL

  4. Różnica między notacją Oracle plus (+) a notacją ansi JOIN?

  5. Wyciek pamięci dzięki OracleCommand