sql >> Databasteknik >  >> RDS >> Oracle

Hur man använder taltabell i SELECT INTO-statment

SQL kan inte använda typer som deklarerats i lokalt PL/SQL-omfång. Du måste definiera det i SQL (*) :

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

Type created.

SQL> 

Använd sedan operatorn TABLE() för att konvertera den första samlingen till en underfråga som du kan referera till med IN-operatorn:

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> 

MEMBER OF-syntaxen fungerar också. Det är mindre att skriva men kanske inte fungerar lika bra som TABLE()-operatorn om CW_FELDDATEN har många rader.

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> 

(*) I 12c kan vi använda typer som deklareras i en paketspecifikation i SQL.



  1. En guide till automatiserade molndatabaser

  2. Vilken SQL-fråga tar längre tid? (MYSQL)

  3. Postgresql-funktionen returnerar sammansatt - hur kommer jag åt sammansatta värden som separata kolumner?

  4. Räknefråga krävs