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

Truyền một mảng chuỗi vào một thủ tục và sử dụng nó trong mệnh đề WHERE với IN

Mảng của bạn cần phải là kiểu đối tượng SQL, được tạo trực tiếp trong SQL, không phải kiểu PLSQL được khai báo trong gói:

SQL> CREATE OR REPLACE TYPE t_strarray IS TABLE OF VARCHAR2(30);
  2  /
Type created.

SQL> CREATE TABLE mytable (field1 VARCHAR2(30));
Table created.

SQL> INSERT INTO mytable VALUES ('A');
1 row created.

SQL> INSERT INTO mytable VALUES ('D');
1 row created.

SQL> CREATE OR REPLACE PROCEDURE getstuff(p_list IN t_strarray,
  2                                       io_cursor OUT SYS_REFCURSOR) IS
  3  BEGIN
  4     OPEN io_cursor FOR
  5        SELECT *
  6          FROM mytable
  7         WHERE mytable.field1 IN (SELECT COLUMN_VALUE FROM TABLE(p_list));
  8  END;
  9  /
Procedure created.

SQL> VARIABLE cc REFCURSOR;
SQL> EXEC getstuff (t_strarray('A', 'B', 'C'), :cc);    
PL/SQL procedure successfully completed.

SQL> print cc

FIELD1
------------------------------
A



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Loại bỏ lỗi ORA-00942 trong tập lệnh tạo ddl

  2. Giải pháp Gaps and Islands trong Oracle - sử dụng đệ quy

  3. ORA-01111 trong MRP trong cơ sở dữ liệu Chế độ chờ vật lý

  4. SQL chuyển từ giải mã sang viết hoa

  5. Oracle SQL- Gắn cờ các bản ghi dựa trên ngày tháng so với lịch sử của bản ghi