ORACLE-SQL:使用数组作为select参数的存储过程

ORACLE-SQL:使用数组作为select参数的存储过程,sql,oracle,stored-procedures,plsql,Sql,Oracle,Stored Procedures,Plsql,我必须在存储过程中使用数组。 所以我创建了一个类型变量: CREATE OR REPLACE TYPE integer_array is table of number; 然后我尝试编写存储过程,但无法编译它: create or replace PROCEDURE SP_TEST( i_id_profiles in integer_array, o_clients OUT SYS_REFCURSOR ) AS BEGIN open o_clients for

我必须在存储过程中使用数组。 所以我创建了一个类型变量:

CREATE OR REPLACE TYPE integer_array is table of number;
然后我尝试编写存储过程,但无法编译它:

create or replace
PROCEDURE SP_TEST(
      i_id_profiles in integer_array, 
      o_clients OUT SYS_REFCURSOR
   )
AS
BEGIN
open o_clients for 
    FOR i IN 1..i_id_profiles.count LOOP
      select a.id_client from b_client a, i_client_profile b where a.id_client = b.id_client 
      and b.id_profile = i_id_profiles(i);
    END LOOP;
END SP_TEST;
你能帮我吗?我想获取我的选择的系统参考光标

谢谢

错误:

PLS-00103:在期望一个 以下内容:(+case mod new not null select with
继续平均计数当前存在最大最小值之前 对所有合并时间戳执行sql STDEV和方差 间隔日期管 PLS-00103:在期望下列情况之一时遇到符号“文件结束” 以下内容:end not pragma final instantiable order overriding 静态成员构造函数映射


如果为查询(静态或动态)打开ref游标,则不能为循环构造或任何类型的循环构造打开ref游标。这在语义上是不正确的。 此外,在这种情况下,根本不需要任何类型的循环。当您创建了
整数数组作为sql类型(模式对象)时,您可以使用
table
操作符从该类型的实例中进行选择(将其表示为表)。因此,您的过程可能如下所示:

create or replace PROCEDURE SP_TEST(
      i_id_profiles in integer_array, 
      o_clients OUT SYS_REFCURSOR
   )
AS
BEGIN
  open o_clients for 
      select a.id_client 
         from b_client a 
         join i_client_profile b 
           on (a.id_client = b.id_client)
         join table(i_id_profiles)  s
           on b.id_profile = s.column_value;
END SP_TEST;  

编译错误是什么?我现在添加了编译错误,但我认为存储过程完全错误。