表函数UNNEST在DB2 10.1中不起作用

时间:2015-08-20 10:48:20

标签: stored-procedures db2

我在DB2 10.1 LUW尝试重新部署存储过程时遇到了困难。

CREATE TYPE "TBSGL"."ACCT" AS ROW(
ACCT_NO VARCHAR(10), 
ACCT_DESC VARCHAR(40))

CREATE TYPE "TBSGL"."ACCT_ARR" AS "TBSGL"."ACCT" ARRAY [2147483647]

CREATE OR REPLACE PROCEDURE TBSGL.TEST_ARRAY_DB2STYLE (IN P_ARRAY TBSGL.ACCT_ARR)
P1:BEGIN
FOR r AS (SELECT * FROM UNNEST(P_ARRAY) AS t(ACCT_NO, ACCT_DESC)) DO
    INSERT INTO TBSGL.CHART_ACCT VALUES (r.ACCT_NO,r.ACCT_DESC);
    --CALL DBMS_OUTPUT.PUT_LINE('Account Number '||r.ACCT_NO);
END FOR;
END P1 @ 

当我第一次部署它时,同样的程序正在运行,在成功修改之后,我再也无法部署了我已经获得

  

"没有授权的例程" UNNEST"类型"功能"找到了兼容的参数"

可以在DB2 10.5 LUW中始终如一地部署同一组程序。我已经通过db2文档搜索了关于不需要的表函数,这在10.1之前的版本中已经可用。我试图弄清楚我的手术有什么不对,我一直在绞尽脑汁。

顺便说一句,作为解决方法,我尝试手动循环遍历数组

WHILE i <= CARDINALITY(P_ARRAY) DO
        SET V_FIELD = P_ARRAY[i];
                INSERT INTO TBSGL.CHART_ACCT (ACCT_NO, ACCT_DESC)
                VALUES (V_FIELD.ACCT_NO, V_FIELD.ACCT_DESC);
    --CALL DBMS_OUTPUT.PUT_LINE('Account Number '||v_acct.ACCT_NO);
        SET i = i+1;
    END WHILE;
END P1

我得到了

  

没有授权的例行程序&#34; CARDINALITY&#34;类型&#34;功能&#34;找到了兼容的参数.. SQLCODE = -440,SQLSTATE = 42884,DRIVER = 4.17.30

0 个答案:

没有答案