1. 程式人生 > >plsql 儲存過程 事務

plsql 儲存過程 事務

1、事務用於確保資料的一致性,由一組相關的DML語句組成,該組DML語句所執行的操作要麼全部確認,要麼全部取消。
2、當執行事務操作(DML)時,Oracle會在被作用的表上加鎖,以防止其他使用者改變表結構,同時也會在被作用的行上加行鎖,以防止其他事務在相應行上執行DML操作。
3、當執行事務提交或事務回滾時,Oracle會確認事務變化或回滾事務、結束事務、刪除儲存點、釋放鎖。
4、提交事務(COMMIT)確認事務變化,結束當前事務、刪除儲存點,釋放鎖,使得當前事務中所有未決的資料永久改變。
5、儲存點(SAVEPOINT)在當前事務中,標記事務的儲存點。
6、回滾事務(ROLLBACK)回滾整個事務,刪除該事務所定義的所有儲存點,釋放鎖,丟棄所有未決的資料改變。
7、回滾事務到指定的儲存點(ROLLBACK TO SAVEPOINT)回滾當前事務到指定的儲存點,丟棄該儲存點建立後的任何改變,釋放鎖。
8、當執行DDL、DCL語句,或退出SQL*PLUS時,會自動提交事務;
9、事務期間應避免與使用者互動;
10、查詢資料期間,儘量不要啟動事務;
11、儘可能讓事務持續地越短越好;
12、在事務中儘可能存取最少的資料量
        

案例:

when others then

others處本應該寫異常名稱,如果不想把異常分得那麼細,可以籠統一點用others來捕獲,即所有異常均用others來捕獲。
RAISE_APPLICATION_ERROR 是將應用程式專有的錯誤從伺服器端轉達到客戶端應用程式(其他機器上的SQLPLUS或者其他前臺開發語言)
複製程式碼 createorreplaceprocedure stu_proc ( v_id innumber, v_name invarchar2, v_age innumber, v_msg out varchar2 ) asbegininsertinto student(id, sname, age)
values (v_id, v_name, v_age); commit; v_msg:='新增成功'; exception when others thenrollback; v_msg:='失敗成功'; RAISE_APPLICATION_ERROR(-20010, 'ERROR:違反唯一索引約束!'); end;