sql >> Database >  >> RDS >> Oracle

Hoe de tabel met getallen te gebruiken in SELECT INTO Statement

SQL kan geen typen gebruiken die zijn gedeclareerd in de lokale PL/SQL-scope. Je moet het definiëren in SQL (*) :

SQL> create TYPE array_of_numbers IS TABLE OF NUMBER ;
  2  /

Type created.

SQL> 

Gebruik vervolgens de operator TABLE() om de eerste verzameling om te zetten in een subquery waarnaar u kunt verwijzen met de IN-operator:

SQL> set serveroutput on
SQL> declare
  2      v_list_parentID array_of_numbers;
  3      v_list_pNummer array_of_numbers;
  4  begin
  5      select dbuid bulk collect into v_list_parentID
  6          from v_catalog
  7          where parentid = 1;
  8      dbms_output.put_line('v_list_parentID count = ' || v_list_parentID.count());
  9
 10      select primitivumnummer bulk collect into v_list_pNummer
 11          from cw_felddaten
 12          where katalog in (select * from table( v_list_parentID));
 13
 14      dbms_output.put_line('v_list_pNummer count = ' || v_list_pNummer.count());
 15  end;
 16  /
v_list_parentID count = 4
v_list_pNummer count = 24

PL/SQL procedure successfully completed.

SQL> 

De MEMBER OF-syntaxis werkt ook. Het is minder typen, maar presteert mogelijk niet zo goed als de TABLE()-operator als CW_FELDDATEN veel rijen heeft.

SQL> declare
  2      v_list_parentID array_of_numbers;
  3      v_list_pNummer array_of_numbers;
  4  begin
  5      select dbuid bulk collect into v_list_parentID
  6          from v_catalog
  7          where parent_id = 1;
  8      dbms_output.put_line('v_list_parentID count = ' || v_list_parentID.count());
  9
 10      select primitivumnummer bulk collect into v_list_pnummer
 11          from cw_felddaten
 12          where katalog member of v_list_parentID;
 13
 14      dbms_output.put_line('v_list_pNummer count = ' || v_list_pNummer.count());
 15  end;
 16  /
v_list_parentID count = 4
v_list_pNummer count = 24

PL/SQL procedure successfully completed.

SQL> 

(*) In 12c kunnen we typen gebruiken die zijn gedeclareerd in een pakketspecificatie in SQL.



  1. Mysql:query om tabelgegevens samen te voegen op basis van de meest nabije tijdstempel

  2. Selecteer cursussen die volledig voldoen aan een bepaalde lijst met vereisten

  3. MariaDB UCASE() uitgelegd

  4. XmlHTTPRequest:XML-parseerfout:geen element gevonden