2015-05-27 86 views
0

我有一個shell腳本來運行一個SQL文件,當我們需要在DB2中提示它提交或回滾。我面臨的問題是MERGE聲明。如果SQL腳本具有包含更新語句的MERGE,則在我們提交之前,更改不會反映在表中。但是,如果我有一條簡單的UPDATE聲明,即使沒有提交,我也可以使用"with ur"選項查看數據中的更改。如果具有MERGE更新的腳本在MERGE後面有一個COMMIT,我們無法回滾這些更改,因爲它們已經被提交。在執行MERGE語句以查看更改後,是否有人可以告知COMMIT是否爲必需的?合併與更新和提交

回答

1

SQL中的MERGE語句與INSERT,UPDATEDELETE沒有區別,因爲它將未提交的更改與其他連接隔離。執行DML的連接在提交之前總是可以看到自己的更改。要查看由另一個連接(「髒讀」)所做的未提交更改,請通過將WITH UR限定符添加到SELECT語句的末尾來指定未提交的讀隔離。

至於自動提交,它可以在DB2 CLP通過指定工作單位爲每語句-c-選項被禁用:

db2 -c- " UPDATE employee SET salary = 200000 WHERE empno= '000010' " 
db2 -c- " SELECT salary FROM employee WHERE empno = '000010' " 
db2 -c- " ROLLBACK " 
db2 -c- " SELECT salary FROM employee WHERE empno = '000010' "