确定Oracle SQL MERGE语句结果

时间:2010-06-01 16:49:35

标签: .net oracle merge ora-00933

跟进this question

这个(来自旧链接的类似版本)在SQL Server 2008中有效,但是Oracle给我带来了麻烦:

MERGE INTO wdm_test 
USING ( select '10000000000000000000000000000000' Guid from DUAL ) val
ON ( wdm_test.Guid = val.Guid )
WHEN MATCHED THEN UPDATE SET test_column = null
WHEN NOT MATCHED THEN
 INSERT (Guid, test_column)
 VALUES ('10000000000000000000000000000000', null)
OUTPUT $action;

SQL Error: ORA-00933: SQL command not properly ended

Oracle不支持OUTPUT $action;吗?如果没有,还有其他选择吗?

1 个答案:

答案 0 :(得分:2)

MERGE语句不会发出结果,也不支持RETURNING子句。

但是,您可以做的是标记受影响的记录。类似的东西:

when matched update set .... merge_status = 'U'
when not matched insert ( ...., merge_status, ... ) values ( ...., 'I', .... )

当然,这需要您有一个额外的列来捕获合并状态 - 这并不总是令人满意的(特别是当您只需要以瞬态方式获取此信息时,例如验证合并的结果)。

不幸的是,据我所知,这是你能做的最好的事情。