2014-10-01 92 views
0
聲明光標

我發現這個 「DECLARE CURSOR」 聲明上WWW:DB2 - 在存儲過程

CREATE OR REPLACE PROCEDURE "APART21C"."FIND_VALID_ARZTNRN" 
(OUT NoOfRows BIGINT) 
RESULT SETS 1 
LANGUAGE SQL 
SPECIFIC SQL140905135133600 
BEGIN 

    DECLARE myARZTNR CHAR(7); 
    DECLARE END_TABLE INT DEFAULT 0 
    ; 
    DELETE FROM APART21C.TMP_LANR07_CHECK 
    ; 
    DECLARE C1 CURSOR FOR 
    SELECT DISTINCT Arztnr 
    FROM APART21C.DMP_LEV_TMP 
    ; 
    DECLARE CONTINUE HANDLER FOR NOT FOUND 
    SET END_TABLE = 1 
    ; 
    OPEN C1 
    ; 
    FETCH C1 INTO myARZTNR 
    ; 
    WHILE END_TABLE = 0 DO 

     INSERT INTO APART21C.TMP_LANR07_CHECK 
     SELECT * FROM TABLE(APART21C.CHECK_ARZTNR_BY_CHECKSUM(myARZTNR)) AS ARZTNRCHECK; 
     SET NoOfRows = NoOfRows + 1; 

     FETCH C1 INTO myARZTNR; 

    END WHILE 
    ; 
    CLOSE C1 
    ; 
END 

ERRORMESSAGE是

"DB2 SQL Error: SQLCODE=-104, SQLSTATE=42601, SQLERRMC=<cursor declaration>;;<SQL statement>" 

需要你的幫助,請

我作爲db2的初學者,我在MS SQL Server方面有更多的經驗。 語句 「SELECT * FROM TABLE(...」 調用一個函數返回至極的表。 R.

+0

複合SQL中的所有'DECLARE'語句都必須顯示_before_任何可執行語句,例如'DELETE'。在您的DB2版本的手冊中搜索「複合SQL」。 – mustaccio 2014-10-01 11:47:53

+0

你的問題是什麼? – user2338816 2014-10-01 12:05:44

+0

** @ user2338816 **:問題是_WHY顯示這個錯誤?_(這很容易:) :) – RobertJ 2014-10-01 13:20:00

回答

0

問題與下面的代碼

DECLARE C1 CURSOR FOR SELECT DISTINCT Arztnr FROM APART21C.DMP_LEV_TMP

我已經改變如下,並將其執行WITH HOLD

DECLARE C1 CURSOR FOR SELECT FROM Arztnr DMP_LEV_TMP;