2010-06-01 41 views
2

跟进到this question确定一个Oracle SQL MERGE语句结果

这(从旧链接类似的版本),在SQL Server的作品2008年,然而,甲骨文给我找麻烦:

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;?如果没有,是否有其他选择?

回答

2

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

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

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

这当然需要你有一个附加列捕捉合并状态 - 这并不总是可取的(特别是当你只需要一个短暂地这一信息,说验证合并的结果)。

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