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;
编译错误是什么?我现在添加了编译错误,但我认为存储过程完全错误。