1. 程式人生 > >Oracle 的異常和回滾

Oracle 的異常和回滾

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;