2015-05-27 122 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' "