Oracle SQL中的数组

Tho*_*ten 2 sql arrays oracle plsql

这是我希望在PL-SQL(Oracle)中能够做的简化的伪代码版本:

DECLARE
  mylist as ARRAY
BEGIN
  mylist (1) := '1'
  mylist (2) := '3'
  ...
  SELECT *
  FROM aTable
  WHERE aKey IN mylist;
END;
Run Code Online (Sandbox Code Playgroud)

SELECT应返回mylist(1),mylist(2)等的匹配记录.它应该与ORing所有值类似,但当然我们事先并不知道我们得到了多少值.

我怎样才能做到这一点?我知道PL/SQL有一些集合数据类型,但我似乎无法让它们在SQL语句中正常工作.

谢谢你的任何想法.

APC*_*APC 9

这很容易用这个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>
Run Code Online (Sandbox Code Playgroud)