我有一个采用表类型输入参数的过程。现在我必须在 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 语句中使用表类型参数?
最佳答案
根据您发布的内容,您将集合声明为架构对象,而不是本地类型。这意味着您在使用它时不会有任何问题。这是一个例子:
-- 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
关于sql - 在 PLSQL 过程中的 IN 子句中使用表类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13902505/