Oracle
 sql >> база данни >  >> RDS >> Oracle

Предаване на масив от низове към процедура и използването му в клаузата WHERE с IN

Вашият масив трябва да бъде тип SQL обект, създаден директно в SQL, а не тип PLSQL, деклариран в пакет:

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. Как да проверите дали колона съществува, преди да я добавите към съществуваща таблица в PL/SQL?

  2. предайте целочислен масив на процедурата на Oracle от c#

  3. Как да разбера дали база данни на Oracle е настроена за автоматично завършване?

  4. Oracle за извличане на максимален запис

  5. Преобразуване на XSD дата xs:dateTime в дата на Oracle