在PLSQL过程中的IN子句中使用表类型

时间:2012-12-16 14:59:40

标签: sql oracle plsql

我有一个采用表类型输入参数的过程。现在我必须在SELECT查询的IN子句中使用此参数。

CREATE TYPE ids IS TABLE OF NUMBER;

CREATE PROCEDURE (emp_ids IN ids) IS

CURSOR IS (SELECT * FROM EMPLOYEES WHERE EMP_ID IN (SELECT * FROM TABLE(emp_ids)); .....

但是我发现这段代码不起作用,因为本地集合类型不能在SQL语句中使用。

是否有任何替代方法可以在SELECT语句中使用表类型参数?

1 个答案:

答案 0 :(得分:2)

根据您发布的内容,您将集合声明为架构对象,而不是本地类型。这意味着您不应该有任何使用它的问题。这是一个例子:

-- collection type as schema object
SQL> create or replace type ids is table of number;
  2  /

Type created

SQL> create or replace procedure proc1 (emp_ids IN ids)
  2  IS
  3     cursor c is (
  4       select first_name
  5         from employees
  6        where employee_id in (select column_value
  7                                from table(emp_ids)
  8                              )
  9     );
 10  begin
 11    for i in c
 12    loop
 13       dbms_output.put_line(i.first_name);
 14    end loop;
 15  end;
 16  /

Procedure created

SQL> exec proc1(ids(101, 103, 200));

Neena
Alexander
Jennifer

PL/SQL procedure successfully completed