Oracle分批提交DML
1.採用分批操作並不能提高執行速度,執行效率不如單條DML語句。
2.分批插入可以減少對undo空間的佔用,但頻繁的提交,可能會導致前面提交的undo空間被其他事務佔用而可能導致ORA-0155錯誤。
3.若分批操作中間半截失敗掉,會將你資料庫置於一種未知的狀態。(DELETE操作不會出現這種情況)
*/
--分批 update
DROP TABLE T2;
CREATE TABLE T2 AS SELECT OBJECT_NAME FROM DBA_OBJECTS;
SELECT * FROM T2;
SELECT COUNT(*) FROM T2;
--is table of 建立一個xx型別的陣列
DECLARE
TYPE RIDARRAY IS TABLE OF ROWID;
TYPE VCARRAY IS TABLE OF T2.OBJECT_NAME%TYPE;
L_RIDS RIDARRAY;
L_NAMES VCARRAY;
CURSOR C IS SELECT ROWID, OBJECT_NAME FROM T2;
BEGIN
OPEN C;
LOOP
FETCH C BULK COLLECT INTO L_RIDS, L_NAMES LIMIT 10;
FORALL I IN 1 .. L_RIDS.COUNT
UPDATE T2
SET OBJECT_NAME = LOWER(L_NAMES(I))
WHERE ROWID = L_RIDS(I);
COMMIT;
EXIT WHEN C%NOTFOUND;
END LOOP;
CLOSE C;
END;
--分批delete
DROP TABLE T3;
CREATE TABLE T3 AS SELECT * FROM DBA_OBJECTS;
DECLARE
CURSOR MYCURSOR IS SELECT ROWID FROM T3 ORDER BY ROWID; --------按ROWID排序的CURSOR,刪除條件是XXX=XXXX,根據實際情
TYPE ROWID_TABLE_TYPE IS TABLE OF ROWID INDEX BY PLS_INTEGER;
V_ROWID ROWID_TABLE_TYPE;
BEGIN
OPEN MYCURSOR;
LOOP
FETCH MYCURSOR BULK COLLECT INTO V_ROWID LIMIT 5000; --------每次處理5000行,也就是每5000行一提交
EXIT WHEN V_ROWID.COUNT=0;
FORALL I IN V_ROWID.FIRST..V_ROWID.LAST
DELETE FROM T3 WHERE ROWID=V_ROWID(I);
COMMIT;
END LOOP;
CLOSE MYCURSOR;
END;
/
分批insert方法相同不再演示。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25462274/viewspace-2122193/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SQLLDR直接載入能否分批提交?SQL
- oracle delete 分批刪除Oracledelete
- oracle大資料量分批刪除Oracle大資料
- DML, DDL操作的自動提交問題
- Oracle Parallel DMLOracleParallel
- 轉載--oracle DML鎖Oracle
- 探究MySQL的DML提交事務的意義和DQL是否有必要提交事務MySql
- Oracle DML NOLOGGINGOracle
- ORACLE DML鎖定機制Oracle
- oracle dml與索引index(一)Oracle索引Index
- 如何快速、及時、準確的閃回DML提交後的資料
- 原創:oracle DML介紹與使用Oracle
- Oracle並行操作——並行DML操作Oracle並行
- oracle support nologging ddl dmlOracle
- Oracle DDL,DML,DCL,TCL 基礎概念Oracle
- 分割槽表分批遷移
- easyExcel分批匯入檔案Excel
- Oracle 檢視可以DML操作的條件Oracle
- oracle goldengate 配置DML&DDL實驗OracleGo
- PostgreSQL vs. Oracle DML 獨立壓測SQLOracle
- Oracle DBLINK 抽數以及DDL、DML操作Oracle
- Oracle 10g DML Table Monitoring ChangesOracle 10g
- 清理Oracle中無用索引改善DML效能Oracle索引
- 清除Oracle中無用索引 改善DML效能Oracle索引
- Oracle連線檢視DML操作的限制Oracle
- 清除Oracle中無用索引,改善DML效能Oracle索引
- POI 分批讀取Excel資料Excel
- oracle---oracle的單向ogg搭建流程(DML+DDL)Oracle
- oracle全文索引之commit與DML操作Oracle索引MIT
- Oracle10g DML錯誤日誌表Oracle
- oracle 表(table)上最後一次 DML時間、行(row)上最後DML時間Oracle
- DML Locks Automatically Acquired for DML Statements (349)UI
- oracle 儲存過程批次提交Oracle儲存過程
- Oracle提交和回滾處理Oracle
- Oracle ddl隱式提交注意點Oracle
- PHP 遍歷元素並分批處理PHP
- hutool分批次讀取excel資料Excel
- mongodb dmlMongoDB