将 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 子句中使用“列表”变量
如何转换逗号分隔的 varchar 以用于 pl/sql 中的“IN”子句?
使用两个过程用 OUT 和 IN 参数进行简单计算,PL/SQL Oracle