【发布时间】:2015-03-19 16:52:49
【问题描述】:
CREATE OR REPLACE PROCEDURE WRK.PURGE_ACH_BATCH_TAB_1()
LANGUAGE SQL
BEGIN
-- Declare cursor
DECLARE v_CNT_BLOCK INTEGER;
DECLARE Ac_no BIGINT;
DECLARE SQLSTATE CHAR(5) DEFAULT '00000';
DECLARE mycur cursor for
SELECT t.TNX_Ac_no
FROM WRK.BATCH_TAB1 c
INNER JOIN WRK.BATCH_TAB t
ON c.BATCH_ID = t.BATCH_ID
AND c.PROCESS_ID = t.process_ID
WHERE c.BATCH_START_TS < (CURRENT DATE -7 days);
set v_CNT_BLOCK = 0;
open mycur;
FETCH FROM mycur INTO Ac_no;
WHILE(SQLSTATE = '00000') DO
DELETE FROM WRK.BATCH_TAB1 b WHERE b.TNX_Ac_no = Ac_no;
SET v_CNT_BLOCK=v_CNT_BLOCK+1;
if v_CNT_BLOCK >= 5 then
set v_CNT_BLOCK = 0;
commit;
end if;
FETCH FROM mycur INTO Ac_no;
END WHILE;
CLOSE mycur;
commit;
END
@
我在 db2 表中有 19 条记录来满足分配给游标的条件,执行此命令后我得到了成功命令,但没有一个值从 db 中删除。请帮助我在哪里遗漏了什么。
【问题讨论】:
-
为什么这个标签是Oracle?这似乎与 Oracle 无关。
-
注意游标,声明时没有
WITH HOLD子句,第一次提交后会关闭。
标签: sql stored-procedures db2