看完这章你会学习到以下内容:
- 用MOD求余方法,对即将插入的数据进行划分提交.
- COMMIT的用法.
基本程序块:
For 变量 in 游标 Loop
IF MOD(SQL%ROWCOUNT,100000) = 0 THEN
COMMIT;
END IF;
COMMIT; -- 剩余100000行的数据再提交
End Loop;
某个实例,用于记录游标遍历第几行
-- 数据插入一次提交(数据量太大占用内存时间太长太大)
BEGIN
DELETE FROM EMP_SYN; -- 清空数据支持重跑
INSERT INTO EMP_SYN
SELECT * FROM EMP;
COMMIT;
END;
-- 分批提交数据
DECLARE
CURSOR C_EMP IS
SELECT * FROM EMP;
BEGIN
DELETE FROM EMP_SYN; -- 清空数据(数据量少)支持重跑
FOR T_EMP IN C_EMP LOOP
INSERT INTO EMP_SYN
SELECT *
FROM emp;
IF mod(C_EMP%ROWCOUNT,10000)=0 THEN -- 每插入1万行提交一次
COMMIT;
END IF;
COMMIT; --- 剩余不够1万行的数据都INSERT
END LOOP;
END;
ROWCOUNT使用:
SQL%ROWCOUNT 用于记录修改的条数,必须放在一个增删改等修改类语句后面执行,SQL%ROWCOUNT 之前执行的最近条语句修改数为准。
BEGIN
DELETE FROM emp;
DBMS_OUTPUT.PUT_LINE(SQL%ROWCOUNT); -- 记录删除数据的条数
INSERT INTO emp(empno) VALUES (7777);
DBMS_OUTPUT.PUT_LINE(SQL%ROWCOUNT); -- 记录插入数据的条数
UPDATE emp SET comm=1000 WHERE empno=7369;
DBMS_OUTPUT.PUT_LINE(SQL%ROWCOUNT); -- 记录更新数据的条数
END;
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。