我正在尝试在DB2命令行处理器
中执行以下类型的复合语句BEGIN ATOMIC
UPDATE schema.tablename set column1 = xyz where condition = somecondition;
UPDATE schema.tablename2 set column2 = abc where condition = somecondition
END
但我收到以下错误
BEGIN ATOMIC
UPDATE schema.tablename set column1 = xyz where condition = somecondition
DB21034E The command was processed as an SQL statement because it was not a
valid Command Line Processor command. During SQL processing it returned:
SQL0104N An unexpected token "END-OF-STATEMENT" was found following "where condition = somecondition".
Expected tokens may include: "<delim_semicolon>". LINE
NUMBER=2. SQLSTATE=42601
UPDATE schema.tablename2 set column2 = abc where condition = somecondition END
DB21034E The command was processed as an SQL statement because it was not a
valid Command Line Processor command. During SQL processing it returned:
SQL0104N An unexpected token "END" was found following "where condition = somecondition".
Expected tokens may include: "END-OF-STATEMENT". SQLSTATE=42601
SQL0104N An unexpected token "END" was found following "where condition = somecondition". Expected tokens may include: "END-OF-STATEMENT ".
我不确定db2 sql命令行处理器是否支持此功能。 要求是以原子方式执行三个查询,而不是在存储过程中执行。 如果还有其他选择,请指导。
答案 0 :(得分:1)
您需要定义非默认语句终止符,否则命令行处理器无法区分复合语句中的分号和复合语句后的分号。
因此,您可以将其作为db2 -td@
调用,将语句终止符设置为“@”,您的语句将如下所示:
BEGIN ATOMIC
UPDATE schema.tablename set column1 = xyz where condition = somecondition;
UPDATE schema.tablename2 set column2 = abc where condition = somecondition;
END@