MERGE with UPDATE and COMMIT



当我们需要在DB2中提示提交或回滚时,我有一个shell脚本来运行SQL文件。我面临的问题是一个MERGE声明。如果SQL脚本有一个带有update语句的MERGE,那么在我们提交之前,更改不会反映在表中。但是,如果我有一个简单的UPDATE语句,即使没有提交它,我也可以使用"with ur"选项看到数据中的变化。如果脚本的MERGE和update在MERGE之后有一个COMMIT,我们不能回滚更改,因为它们已经提交了。有人能告诉COMMIT是强制执行MERGE语句后看到的变化吗?

SQL中的MERGE语句与INSERTUPDATEDELETE在从其他连接隔离未提交的更改方面没有什么不同。执行DML的连接总是可以在提交之前看到自己的更改。要查看由另一个连接所做的未提交的更改("脏读"),通过在SELECT语句的末尾添加WITH UR限定符来指定未提交的读隔离。

对于自动提交,可以在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' "

最新更新