Oracle 的異常和回滾
阿新 • • 發佈:2019-02-17
commit (提交),rollback(回滾)
DECLARE dept_no NUMBER (2) := 70; BEGIN --開始事務 INSERT INTO dept VALUES (dept_no, '市場部', '北京'); --插入部門記錄 INSERT INTO dept VALUES (dept_no, '後勤部', '上海'); --插入相同編號的部門記錄 INSERT INTO emp --插入員工記錄 VALUES (7997, '威爾', '銷售人員', NULL, TRUNC (SYSDATE), 5000,300, dept_no); --提交事務 COMMIT; EXCEPTION WHEN DUP_VAL_ON_INDEX THEN --捕足異常 DBMS_OUTPUT.PUT_LINE(SQLERRM); --顯示異常訊息 ROLLBACK; --回滾異常 END;
rollback會預設回滾所有事務,savepoint可以儲存點,rollback可以回滾到前一個點,減少資料重複操作。
DECLARE dept_no NUMBER (2) :=90; BEGIN --開始事務 SAVEPOINT A; INSERT INTO dept VALUES (dept_no, '市場部', '北京'); --插入部門記錄 SAVEPOINT B; INSERT INTO emp --插入員工記錄 VALUES (7997, '威爾', '銷售人員', NULL, TRUNC (SYSDATE), 5000,300, dept_no); SAVEPOINT C; INSERT INTO dept VALUES (dept_no, '後勤部', '上海'); --插入相同編號的部門記錄 --提交事務 COMMIT; EXCEPTION WHEN DUP_VAL_ON_INDEX THEN --捕足異常 DBMS_OUTPUT.PUT_LINE(SQLERRM); --顯示異常訊息 ROLLBACK TO B; --回滾異常 END;