2

我有一个采用表类型输入参数的过程。现在我必须在 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 语句中使用表类型参数?

4

1 回答 1

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
于 2012-12-16T15:19:06.973 回答