Oracle一個事務中的Insert和Update執行順序


    今天碰到了一個奇怪的問題,是關於Oracle一個事務中的Insert和Update語句的執行順序的問題。

    首先詳細說明下整個過程:

    有三張表:A,B,C,Java代碼中有一段代碼是先在表A中插入一條數據,然后再更新表B的兩個字段,更新的兩個字段是特定值。並且插入和更新在一個事務中。

    有個需求需要在表A添加一個Insert的行級觸發器,在觸發器里,插入表A一行記錄后去表B查看更新的兩個字段是否滿足特定條件,

    如果表B的兩個字段同時等於特定值,則把表A和表B的數據整合下放到表C。觸發器的初衷就是這樣。

    可問題來了,測試觸發器的時候,發現表B的兩個字段總不能滿足條件。查詢下表B,發現表B的兩個字段已經更新,並且兩個都是特定值。新建測試窗口,插入表A一條測試記錄,能在表C插入整合后的數據。

    初步推斷可能是在事務中,Insert語句先執行了,先觸發了觸發器,然后才進行表B的兩個字段的更新。

    所以就修改了Java代碼事務中Insert語句和Update語句執行順序,把Update語句放到Insert語句之前,結果還是一樣,不能在表C插入整合后的數據。

    后來在表B上面創建了一個Update觸發器,禁用表A的Insert觸發器,測試表B的Update觸發器是發現當更新的兩個字段滿足特定條件后,去表A能查詢到新插入的數據,能把整合后的數據插入到表C。

    得出最終不成熟的結論:Oracle一個事務中,Insert語句比Update先執行。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM