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

Melewati larik string ke prosedur dan menggunakannya dalam klausa WHERE dengan IN

Array Anda harus berupa tipe objek SQL, dibuat langsung dalam SQL, bukan tipe PLSQL yang dideklarasikan dalam sebuah paket:

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. Penerjemah Hibernate 5 HQL untuk Oracle Spatial

  2. Kesalahan saat memanggil Java dari PL/SQL

  3. Bagaimana menggambarkan masalah kinerja dalam database relasional?

  4. Bagaimana Anda Memasukkan Blob Besar Ke Oracle 10G Menggunakan System.Data.OracleClient?

  5. ORA-04068:status paket yang ada telah dibuang ORA-04065:tidak dieksekusi, diubah, atau dibatalkan prosedur tersimpan