Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Przekazanie tablicy ciągów do procedury i użycie jej w klauzuli WHERE z IN

Twoja tablica musi być typem obiektu SQL, utworzonym bezpośrednio w SQL, a nie typem PLSQL zadeklarowanym w pakiecie:

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. Jak wyeksportować wyniki zapytania Oracle do pliku JSON przy użyciu SQLcl

  2. Aktualizacja SQL, usuwanie i wstawianie w tym samym czasie

  3. Błąd SQL:ORA-12899:wartość za duża dla kolumny

  4. Zapytanie Oracle sql do grupowania kolejnych rekordów według daty

  5. WSJDBCConnection nie zawija obiektów typu oracle.jdbc.OracleConnection