DB2 V9的z/OSDB2使用光標
CREATE PROCEDURE SERDB.I21MMSNOUPD()
RESULT SETS 1
LANGUAGE SQL
FENCED
COLLID SER
WLM ENVIRONMENT DDSNSPENV
RUN OPTIONS 'NOTEST(NONE,*,*,*)'
P1: BEGIN
--Declare variables
DECLARE CONSUMER INTEGER;
DECLARE NEW_MMS_NO INTEGER;
DECLARE END_TABLE INT DEFAULT 0;
DECLARE C1 CURSOR FOR
SELECT I20_CONSUMER_ID,
NEW_MMS_NO
FROM SERDB.I20_TEMP
-- WHERE I20_CONSUMER_ID = 164921;
ORDER BY I20_CONSUMER_ID;
DECLARE CONTINUE HANDLER FOR NOT FOUND
SET END_TABLE = 1;
OPEN C1;
FETCH C1 INTO CONSUMER,
NEW_MMS_NO;
WHILE END_TABLE = 0 DO
UPDATE SERDB.I20_CONSUMER_T
SET I20_MMS_NO = NEW_MMS_NO
WHERE I20_CONSUMER_ID = CONSUMER;
END WHILE;
CLOSE C1;
END P1
上述的存儲過程存儲過程建立與COND代碼0,但未能執行即使當特定consumer_id。有沒有人看到錯誤?
個別的sql語句完全按照它們應該運行的。
我已經遵循了IBM的SQL過程中游標的示例。
謝謝
你知道這可能(可能)做得更好_overout光標,對不對?也就是說,假設更新行的大小不是太大(對於事務),這可以在單個「UPDATE」語句中完成。除非結果集是分頁的(比如向用戶顯示時),或者更新/刪除/需要「分批」(如果鎖定的行數是太大了)。 –