将 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 子句的主要内容,如果未能解决你的问题,请参考以下文章