Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Cách sử dụng bảng số trong trạng thái CHỌN VÀO trạng thái

SQL không thể sử dụng các kiểu được khai báo trong phạm vi PL / SQL cục bộ. Bạn cần xác định nó trong SQL (*) :

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

Type created.

SQL> 

Sau đó, sử dụng toán tử TABLE () để chuyển đổi tập hợp đầu tiên thành truy vấn phụ mà bạn có thể tham chiếu với toán tử 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> 

Cú pháp MEMBER OF cũng hoạt động. Thao tác nhập ít hơn nhưng có thể không hoạt động tốt như toán tử TABLE () nếu CW_FELDDATEN có nhiều hàng.

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> 

(*) Trong 12c, chúng ta có thể sử dụng các kiểu được khai báo trong một thông số gói trong 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. Lỗi:ORA-06553:PLS-306:sai số hoặc loại đối số trong lệnh gọi thủ tục

  2. vấn đề với hàm to_date với sysdate

  3. Một chuyến đi qua GIMR

  4. Truy vấn Oracle để lấy ID giao dịch đầu tiên dựa trên giao dịch gửi đi đã sử dụng

  5. Oracle SQL Developer Sự cố khi khởi chạy Trang Chào mừng