Oracle
 sql >> база данни >  >> RDS >> Oracle

Как да използвате таблица с числа в оператора SELECT INTO

SQL не може да използва типове, декларирани в локалния PL/SQL обхват. Трябва да го дефинирате в SQL (*) :

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

Type created.

SQL> 

След това използвайте оператора TABLE(), за да преобразувате първата колекция в подзаявка, която можете да посочите с оператора IN:

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 също работи. Пише по-малко, но може да не работи толкова добре, колкото операторът TABLE(), ако CW_FELDDATEN има много редове.

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> 

(*) В 12c можем да използваме типове, декларирани в спецификация на пакет в SQL.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. разлика в sysdate

  2. формат интервал с to_char

  3. Oracle 12.2 Sharding

  4. Улавяне на стойности, които задействат DUP_VAL_ON_INDEX

  5. Свързване към база данни на Oracle с помощта на SQLAlchemy