Вопрос

Продолжить этот вопрос

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

Это было полезно?

Решение

Заявление об сборе не испускает результаты и не поддерживает RETURNING пункт.

Однако вы могли бы сделать Отметьте затронутые записи. Анкет Что-то типа:

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top