程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> Oracle一個事務中的Insert和Update執行順序,oracleinsert

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

編輯:Oracle教程

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


    今天碰到了一個奇怪的問題,是關於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先執行。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved