原子复合语句在Db2中的工作方式不同

原子复合语句在Db2中的工作方式不同,db2,db2-luw,Db2,Db2 Luw,当发出下面的语句时,它将使用原子打印修改后的行,但不能不使用原子打印。然而,我在文档中没有找到解释这种行为的东西 --#SET TERMINATOR @ drop table mytable@ CREATE TABLE mytable ( col1 INTEGER ) @ SELECT * FROM new TABLE (INSERT INTO mytable (col1) VALUES (1)) @ SELECT * FROM mytable @ BEGIN ATOMIC SELE

当发出下面的语句时,它将使用原子打印修改后的行,但不能不使用原子打印。然而,我在文档中没有找到解释这种行为的东西

--#SET TERMINATOR @
 
drop table mytable@
 
CREATE TABLE mytable (
col1 INTEGER
) @

SELECT * FROM new TABLE (INSERT INTO mytable (col1) VALUES (1)) @
SELECT * FROM mytable @

BEGIN ATOMIC
SELECT col1 FROM new TABLE (INSERT INTO mytable (col1) VALUES (2));
END @
SELECT * FROM mytable @

BEGIN
 SELECT col1 FROM new TABLE (INSERT INTO mytable (col1) VALUES (3));
END @
我得到了这个输出:


BEGIN-ATOMIC
不会根据您的示例打印任何内容。输出行由后续的select语句打印。
BEGIN-ATOMIC
语句只打印成功完成时的信息,而不是
BEGIN-NOT-ATOMIC
(最后一条语句)的预期失败。@MarkBarinstein询问为什么SQL0104N在一种情况下发生,而在另一种情况下不发生(假设SELECT语句在两种情况下都没有用处)?@mao最初的声明是:“它使用原子打印修改后的行”。但它不会打印任何复合(原子或非原子)语句中的任何行。对我来说,这里唯一奇怪的行为是,它实际上没有在内联(原子)复合语句中的select语句上返回SQL0104N。看起来,这是db2的一些未记录的“特性”(不仅仅是CLP)。这对于从数据更改操作中进行选择可能非常有用。对/dev/null的某种输出。@MarkBarinstein。在这种情况下,原子与非原子之间的不一致是一个问题,因为期望两种情况的结果相同似乎是很自然的。但其行为似乎是,原子案例以某种方式处理异常并抑制异常,而非原子案例不处理异常并正确抛出异常。也许可以向IBM支持人员咨询