2

この質問のフォローアップ

これ(古いリンクの同様のバージョン)は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;か? そうでない場合、代替手段はありますか?

4

1 に答える 1

2

MERGE ステートメントは結果を出力せず、RETURNING節をサポートしません。

ただし、影響を受けるレコードにフラグを立てることはできます。何かのようなもの:

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

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

残念ながら、私の知る限り、これが最善の方法です。

于 2010-06-01T17:07:03.037 に答える