Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Cara menggunakan tabel angka dalam Pernyataan SELECT INTO

SQL tidak dapat menggunakan tipe yang dideklarasikan dalam lingkup PL/SQL lokal. Anda perlu mendefinisikannya dalam SQL (*) :

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

Type created.

SQL> 

Kemudian gunakan operator TABLE() untuk mengonversi koleksi pertama menjadi sub-kueri yang dapat Anda rujuk dengan operator 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> 

Sintaks MEMBER OF juga berfungsi. Ini lebih sedikit mengetik tetapi mungkin tidak bekerja sebaik operator TABLE() jika CW_FELDDATEN memiliki banyak baris.

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> 

(*) Dalam 12c kita dapat menggunakan tipe yang dideklarasikan dalam spesifikasi paket di 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. Buat fungsi pl/sql &temukan tahun kabisat

  2. Mengapa di SQL NULL tidak bisa cocok dengan NULL?

  3. ORA-00911:karakter tidak valid

  4. Pengantar Penanganan Pengecualian PL/SQL Di Database Oracle

  5. Buat tampilan yang dapat diedit di Oracle