确定Oracle SQL合并语句结果
题
跟进 这个问题
但是,此(来自旧链接的类似版本)在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
甲骨文不支持 OUTPUT $action;
?如果没有,还有其他选择吗?
解决方案
合并语句不会发出结果,也不支持 RETURNING
条款。
但是,您能做的是 标记受影响的记录. 。就像是:
when matched update set .... merge_status = 'U'
when not matched insert ( ...., merge_status, ... ) values ( ...., 'I', .... )
当然,这要求您还有一个额外的列来捕获合并状态 - 并非总是希望的(尤其是当您只需要以瞬态方式需要此信息时,可以说验证合并的结果)。
不幸的是,据我所知,这是您能做的最好的。
不隶属于 StackOverflow