sql >> Databasteknik >  >> RDS >> Oracle

Skicka en array av strängar till en procedur och använda den i WHERE-satsen med IN

Din array måste vara en SQL-objekttyp, skapad direkt i SQL, inte en PLSQL-typ som deklareras i ett 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. ställ in identitet på kolumnen

  2. Är det någon skillnad mellan dessa två frågor?

  3. Använda mySql via proxy-kast Orsakas av:java.sql.SQLException:Anropsbara uttalanden stöds inte. efter återanslutningen

  4. Stöd för MariaDB 10.4 i uppgraderad dbForge Studio för MySQL, v.8.1