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

标签 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 语句中使用表类型参数?

最佳答案

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

-- 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/

相关文章:

sql - Oracle OCI C 代码中的错误 OCI_INVALID_HANDLE

java - 支持多个数据库oracle和mysql的hibernate HQL查询

sql - 如何使用 to_date 函数转换复杂的 sysdate + 其他内容?

sql - PLSQL Insert into with 子查询和返回子句

oracle - SELECT INTO 和多个变量进行更新

Oracle 电子邮件发送日期有时不正确

MySQL 左外连接和合并结果

mysql - 更新交集表,替代删除->插入

sql - 如何获得变长列的最后三位数字?

sql - 如何在 sql 查询中添加带有 unnest 的 where 子句?