質問

フォローアップ この質問

この(古いリンクの類似バージョン)が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

オラクルはサポートしていませんか OUTPUT $action;?そうでない場合、代替手段はありますか?

役に立ちましたか?

解決

マージステートメントは結果を発しておらず、 RETURNING 句。

しかし、あなたができることはそうです 影響を受ける記録にフラグを立てます. 。何かのようなもの:

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

これには、もちろん、マージステータスをキャプチャするための追加の列があることが必要です。これは常に望ましいとは限りません(特に、この情報が一時的に必要な場合、たとえばマージの結果を確認するために)。

残念ながら、私の知る限り、これはあなたができる最善のことです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top