2010-06-01 45 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', ....) 

這當然需要你有一個附加列捕捉合併狀態 - 這並不總是可取的(特別是當你只需要一個短暫地這一信息,說驗證合併的結果)。

不幸的是,據我所知,這是你能做的最好的。