文章詳情頁
Oracle數據完整性嵌套事務調用的研究
瀏覽:3日期:2023-11-13 09:28:53
為了保護數據的完整性我們用了很多的方法,比如數據表的主鍵約束、外鍵約束、觸發器等等,我們今天討論的就是在處理數據直接的事務的時候,保存數據的完整性。 比如,我在一個存儲過程中Proc_SaveBill保存一張單據,調用一個函數Func_GenerateCode來生成一個單據的編號,假如我的這個函數是從一個存有最大編號的表中取出的并且把編號加一,大家可能會想象的可能產生的問題,就是假如我在Proc_SaveBill中的保存之前通過Func_GenerateCode得到一個編號,假如后面的保存不成功,怎么辦是不是就丟了一個編號,因為我調用一次Func_GenerateCode就會增加一個編號的,那么為了使我們的數據完整不至于丟單,就的使用事務的會滾,現在又有問題了,存儲過程會會滾到函數中嘛!答案是,假如函數中有事務或有commit語句,那么是會滾不了的,否則可以會滾,因為事務是會滾到上一個committ或rollback之后的所有事物。所以我在這里說明是為了提醒大家考慮事務的嵌套回滾的一些方法。但是在存儲過程調用存儲過程中,假如被調用的存儲過程執行沒有錯誤,那么很遺憾是會滾不了的。 為了解決這個問題Oracle中用自治事務來處理上述出現的問題,在存儲過程的isas后面聲明PRAGMA AUTONOMOUS_TRANSACTION; --自治事務防止嵌套提交,使事務在自己的事務區內提交或回滾不會影響其他的事務。 今天在這里就說這些,當然這些是比較基礎的,給初學者提個醒!
排行榜
