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