我们为了控制事务的大小,一般都是采用
IF (MOD (v_count, 1000) = 0)
THEN
COMMIT;
END IF;
这样的方式。其中v_count是一个计数器。
[@more@]但是,我这次碰到一个问题,这个cursor里面的事务每次执行时还是太大。
这个过程是这样写的:
PROCEDURE sp_move_order_to_history
AS
error_info VARCHAR2 (512);
v_count NUMBER;
s_start DATE;
BEGIN
FOR x IN (SELECT ROWID rid, order_id
FROM all_order
WHERE gmt_modified < ADD_MONTHS (SYSDATE, -3))
LOOP
BEGIN
v_count := v_count + 1;
.............
........
IF (MOD (v_count, 1000) = 0)
THEN
COMMIT;
END IF;
end;
end loop;
............
每次执行下来,好像这个commit没有生效。
仔细检查后,发现开发人员没有对v_count进行初始化。
v_count的定义改成 v_count NUMBER :=0;
这样就好了。
这个细小的地方还是需要大家注意的。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/100091/viewspace-927852/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/100091/viewspace-927852/