将 IN() 用于数组的 PL/SQL where 子句

Posted

技术标签:

【中文标题】将 IN() 用于数组的 PL/SQL where 子句【英文标题】:PL/SQL where clause using IN() for an array 【发布时间】:2017-02-06 11:51:32 【问题描述】:

简单表格:

CREATE TABLE Users (
  PersonID int,
  Name varchar(255),
  Salary int
);

我必须编写一个将在过程中使用的游标。游标应该返回名称字段属于数组的记录。

CREATE OR REPLACE TYPE namesArray AS TABLE OF int;
/

CURSOR luckyPeople(names IN namesArray) IS
select PersonID from Users
where Name IN(namesArray); //how this can be solved?

如何在 select 子句中使用数组?

谢谢

【问题讨论】:

【参考方案1】:

您的问题之一是您将 namesArray 类型定义为 Int,但您正在查询名称列,即 varchar。另一个问题是您应该更改 where 子句和游标参数部分。

如果你想检查名称列,你应该试试下面的代码:

CREATE OR REPLACE TYPE namesArray AS TABLE OF varchar(255);

/

CURSOR luckyPeople(names namesArray) IS
select PersonID from Users
where Name IN(select Name from table(namesArray));

【讨论】:

int vs varchar 是复制粘贴错误。提供的解决方案有效。谢谢【参考方案2】:

确实

CREATE OR REPLACE TYPE namesArray AS TABLE OF varchar(255);

CURSOR luckyPeople(names IN namesArray) IS
select PersonID from Users, table(names) tnames
where Name = tnames.column_value;

【讨论】:

以上是关于将 IN() 用于数组的 PL/SQL where 子句的主要内容,如果未能解决你的问题,请参考以下文章

PL/SQL - 在 Where In 子句中使用“列表”变量

PL/SQL:将字符串的“数组”作为参数传递给 sql

如何转换逗号分隔的 varchar 以用于 pl/sql 中的“IN”子句?

使用两个过程用 OUT 和 IN 参数进行简单计算,PL/SQL Oracle

变量作为 Oracle PL/SQL 中 where 子句中的列名

oracle 形式:pl/sql 中 where 子句中的 max 子句