2010-06-01 6 views
2

Последующие меры this questionопределения SQL MERGE заявление Oracle привести

Эта (аналогично версии от старой ссылке) работает в 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;? Если нет, есть ли альтернатива?

ответ

2

Утверждение MERGE не дает результатов и не поддерживает предложение RETURNING.

Однако, что вы можете сделать, это отметьте отраженные записи. Что-то вроде:

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

Это, конечно, требует, чтобы у вас есть дополнительный столбец для захвата состояния слияния - что не всегда желательно (особенно если вам нужно только эта информация в преходящей форме, скажем, для проверки результаты слияния).

К сожалению, насколько мне известно, это лучшее, что вы можете сделать.

Смежные вопросы