如何将数组传递给 SQL 存储过程
How to pass Array to SQL Stored Procedure
我正在尝试将数组传递给 DB2 存储过程,但遇到了问题。
以下是一些代码片段:
create type intArrayType as integer array[];
CREATE OR REPLACE PROCEDURE
array_trial (IN integer_array INTARRAYTYPE)
BEGIN
SELECT UNNEST(integer_array) FROM sysibm.sysdummy1;
END
它可以编译,但是当我尝试调用时:
CALL array_trial(ARRAY[1,2,3]);
我收到 -104 错误。
当我尝试从 RPGLE 调用时,我无法编译,因为它不喜欢数组
有什么想法吗?
UNNEST 在 from 子句中使用,因为它创建了一个 temporary table...
CREATE OR REPLACE PROCEDURE
array_trial (IN integer_array INTARRAYTYPE)
BEGIN
declare c1 cursor with return to client for
SELECT * FROM UNNEST(integer_array) as rs;
open c1;
END;
遗憾的是,ARRAY 构造函数目前相当有限。 documentation 明确表示 只能在 SET 变量或赋值语句的右侧指定。 所以尝试直接使用它是行不通的。
CALL array_trial(ARRAY[1,2,3]);
它returns以下消息:
SQL State: 428H2
Vendor Code: -20441
Message: [SQ20441] Array type not valid where specified.
Cause . . . . . : An array type was used but is not allowed in the
specified context. Array types can only be used: -- As an argument of an
SQL or JAVA procedure. -- For an SQL variable declared in an SQL procedure.
-- In a CAST specification in an SQL procedure.
Recovery . . . : Remove the reference to the array type. Try the request again.
您可以构建一个驱动程序存储过程:
create or replace procedure mysp
begin
declare myarray intArrayType;
set myarray = ARRAY[1,2,3];
call array_trial(myarray);
end;
并称之为
call mysp;
据我目前所能找到的,可以从另一个 SQL 过程或 Java 中直接调用带有数组参数的 SP...但不能从 RPGLE 中调用。
我正在尝试将数组传递给 DB2 存储过程,但遇到了问题。
以下是一些代码片段:
create type intArrayType as integer array[];
CREATE OR REPLACE PROCEDURE
array_trial (IN integer_array INTARRAYTYPE)
BEGIN
SELECT UNNEST(integer_array) FROM sysibm.sysdummy1;
END
它可以编译,但是当我尝试调用时:
CALL array_trial(ARRAY[1,2,3]);
我收到 -104 错误。
当我尝试从 RPGLE 调用时,我无法编译,因为它不喜欢数组
有什么想法吗?
UNNEST 在 from 子句中使用,因为它创建了一个 temporary table...
CREATE OR REPLACE PROCEDURE
array_trial (IN integer_array INTARRAYTYPE)
BEGIN
declare c1 cursor with return to client for
SELECT * FROM UNNEST(integer_array) as rs;
open c1;
END;
遗憾的是,ARRAY 构造函数目前相当有限。 documentation 明确表示 只能在 SET 变量或赋值语句的右侧指定。 所以尝试直接使用它是行不通的。
CALL array_trial(ARRAY[1,2,3]);
它returns以下消息:
SQL State: 428H2
Vendor Code: -20441
Message: [SQ20441] Array type not valid where specified.
Cause . . . . . : An array type was used but is not allowed in the
specified context. Array types can only be used: -- As an argument of an
SQL or JAVA procedure. -- For an SQL variable declared in an SQL procedure.
-- In a CAST specification in an SQL procedure.
Recovery . . . : Remove the reference to the array type. Try the request again.
您可以构建一个驱动程序存储过程:
create or replace procedure mysp
begin
declare myarray intArrayType;
set myarray = ARRAY[1,2,3];
call array_trial(myarray);
end;
并称之为
call mysp;
据我目前所能找到的,可以从另一个 SQL 过程或 Java 中直接调用带有数组参数的 SP...但不能从 RPGLE 中调用。