跟进 这个问题

但是,此(来自旧链接的类似版本)在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', .... )

当然,这要求您还有一个额外的列来捕获合并状态 - 并非总是希望的(尤其是当您只需要以瞬态方式需要此信息时,可以说验证合并的结果)。

不幸的是,据我所知,这是您能做的最好的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top