这是我希望能够在 PL-SQL (Oracle) 中执行的操作的简化伪代码版本:
DECLARE
mylist as ARRAY
BEGIN
mylist (1) := '1'
mylist (2) := '3'
...
SELECT *
FROM aTable
WHERE aKey IN mylist;
END;
SELECT 应该返回 mylist(1)、mylist(2) 等的匹配记录。它应该类似于对所有值进行 ORing,但当然我们事先不知道我们得到了多少个值。
我怎样才能做到这一点?我知道 PL/SQL 有一些集合数据类型,但我似乎无法让它们在 SQL 语句中正常工作。
感谢您的任何想法。
最佳答案
使用 TABLE()
函数很容易做到这一点。一个问题是数组变量必须使用在 SQL 中声明的类型。这是因为 SELECT
使用 SQL 引擎,所以 PL/SQL 声明超出范围。
SQL> create or replace type numbers_nt as table of number
2 /
Type created.
SQL>
SQL> declare
2 l_array numbers_nt;
3 begin
4 l_array := numbers_nt (7521,7566,7654);
5 for r in ( select ename
6 from emp
7 where empno in ( select *
8 from table (l_array)
9 )
10 )
11 loop
12 dbms_output.put_line ( 'employee name = '||r.ename);
13 end loop;
14 end;
15 /
employee name = PADFIELD
employee name = ROBERTSON
employee name = BILLINGTON
PL/SQL procedure successfully completed.
SQL>
关于sql - Oracle SQL 中的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1401801/