如何将数组传递给 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 中调用。