oraclesql中的数组

oraclesql中的数组,sql,oracle,arrays,plsql,Sql,Oracle,Arrays,Plsql,下面是我希望能够在PL-SQL(Oracle)中实现的简化伪代码版本: SELECT应该返回mylist(1)、mylist(2)等的匹配记录。它应该类似于对所有值进行ORing,但我们当然不知道预先得到了多少值 我怎样才能做到这一点?我知道PL/SQL有一些集合数据类型,但我似乎无法让它们在SQL语句中正常工作 谢谢你的建议。一些建议: 1.)有一个CAST-SQL关键字,您可以使用它来完成这项工作。。。它使您的收藏被视为一张桌子 2.)流水线功能。基本上,函数返回看起来像表的数据 此链接总结

下面是我希望能够在PL-SQL(Oracle)中实现的简化伪代码版本:

SELECT应该返回mylist(1)、mylist(2)等的匹配记录。它应该类似于对所有值进行ORing,但我们当然不知道预先得到了多少值

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


谢谢你的建议。

一些建议:

1.)有一个CAST-SQL关键字,您可以使用它来完成这项工作。。。它使您的收藏被视为一张桌子

2.)流水线功能。基本上,函数返回看起来像表的数据

此链接总结了这些选项,并提供了一些代码清单来解释它们


使用
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是我最初采用的方法,但有一些缺点(例如类型检查、性能),所以我一直在寻找“更好”的解决方案。
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>