Определение результата оператора Oracle SQL MERGE - PullRequest
2 голосов
/ 01 июня 2010

Следите за этим вопросом

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

1 Ответ

2 голосов
/ 01 июня 2010

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

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

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

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

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

...