2012-07-05 75 views
1

這裏我試圖在DB2中運行一個動態查詢,它返回變量中的行數。DB2動態查詢執行返回行計數

任何人都可以幫助我如何將動態查詢的結果存儲到一個變量,以便我可以進一步使用它?下面是代碼段: -

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; 

獲得以下錯誤: - ERROR [42703] [IBM] [DB2/AIX64] SQL0206N 「CNT」 不是在其被使用的上下文中有效。 SQLSTATE = 42703

回答

0

我想你需要先發出PREPARE with an OUTPUT子句,然後再發出EXECUTE with an INTO聲明。

我似乎無法在IBM文檔中找到示例。

+0

乾杯得到了解決方案...... Thnx Preet .. –

+0

優秀@Pravin - 請編輯我的答案或添加您自己的解決方案,以備將來參考 - 謝謝。 –