使用UPDATE和COMMIT进行合并

时间:2015-05-27 18:04:40

标签: merge db2 commit

当我们需要在DB2中提示它进行提交或回滚时,我有一个shell脚本来运行SQL文件。我面临的问题是使用MERGE语句。如果SQL脚本具有带有update语句的MERGE,则在我们提交之前,更改不会反映在表中。但是,如果我有一个简单的UPDATE语句,即使没有提交它,我也可以使用"with ur"选项查看数据中的更改。如果MERGE带有更新的脚本在COMMIT之后只有MERGE,我们就无法回滚已经提交的更改。在执行COMMIT语句后,有人可以告诉MERGE是否必须查看更改吗?

1 个答案:

答案 0 :(得分:1)

当涉及从其他连接中隔离未提交的更改时,SQL中的MERGE语句与INSERTUPDATEDELETE没有区别。执行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' "