当我们需要在DB2中提示它进行提交或回滚时,我有一个shell脚本来运行SQL文件。我面临的问题是使用MERGE
语句。如果SQL脚本具有带有update语句的MERGE
,则在我们提交之前,更改不会反映在表中。但是,如果我有一个简单的UPDATE
语句,即使没有提交它,我也可以使用"with ur"
选项查看数据中的更改。如果MERGE
带有更新的脚本在COMMIT
之后只有MERGE
,我们就无法回滚已经提交的更改。在执行COMMIT
语句后,有人可以告诉MERGE
是否必须查看更改吗?
答案 0 :(得分:1)
当涉及从其他连接中隔离未提交的更改时,SQL中的MERGE
语句与INSERT
,UPDATE
或DELETE
没有区别。执行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' "