【问题标题】:DB2 Dynamic query execution which returns row count返回行数的 DB2 动态查询执行
【发布时间】:2012-07-05 11:57:07
【问题描述】:

这里我试图在 DB2 中运行一个动态查询,它返回一个变量中的行数。

谁能帮我解决如何将动态查询的结果存储到变量中以便我可以进一步使用它?下面是代码sn-p:--

CREATE PROCEDURE SP_REC_COUNT ( )
  LANGUAGE SQL
  NOT DETERMINISTIC
  EXTERNAL ACTION
  MODIFIES SQL DATA
  CALLED ON NULL INPUT
  INHERIT SPECIAL REGISTERS
BEGIN
DECLARE SQL_STR VARCHAR(5000);
DECLARE V_TabSchema VARCHAR(50);
DECLARE V_TabName VARCHAR(100);
DECLARE CNT INTEGER DEFAULT 0;
DECLARE CountCur CURSOR FOR select TabSchema,TabName from SysCat.Tables where TabSchema='NGCORE' or TabSchema='NGCOREAU';
    OPEN CountCur;
        CountCur_Loop1:LOOP
        FETCH CountCur INTO  V_TabSchema,V_TabName;
        IF SQLCODE = 0
        THEN
          SET  SQL_STR ='select count(*) into CNT  from '|| V_TabSchema||'.'||V_TabName;
            PREPARE SQ FROM SQL_STR;
            execute  SQ;
            SET  SQL_STR ='INSERT INTO NGCORE_TMP.PHYISICAL_BACKOUT_REC_CNT(SCHEMA_NM,TABLE_NM,BEFORE_CNT)VALUES('''||V_TabSchema||''','''||V_TabName||''','||CNT||')';         
            PREPARE SQL FROM SQL_STR;
            EXECUTE SQL;
        ELSE
            CLOSE CountCur;
            LEAVE CountCur_Loop1;
        END If;
        END LOOP CountCur_Loop1;

END;

出现以下错误:- 错误 [42703] [IBM][DB2/AIX64] SQL0206N “CNT”在使用它的上下文中无效。 SQLSTATE=42703

【问题讨论】:

    标签: db2 prepared-statement dynamicquery execute-immediate


    【解决方案1】:

    我认为您需要先发出PREPARE with an OUTPUT 子句,然后发出EXECUTE with an INTO 语句。

    我似乎在 IBM 文档中找不到示例。

    【讨论】:

    • 优秀的@Pravin - 请编辑我的答案或添加您自己的答案以供将来参考 - 谢谢。
    猜你喜欢
    • 2016-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-01
    • 2011-08-03
    • 1970-01-01
    • 2016-08-06
    • 2023-03-22
    相关资源
    最近更新 更多