最後に削除文があります。基本的には、マージした行が返された場合、またはマッチした場合にのみ削除します。単一のmerge into
ステートメントで行うことは可能ですか?異なる表からの削除にOracleがマージする
MERGE INTO ${TABLE_NAME} T
USING (
SELECT
ERRORCODE, PROCESSINGFILENAME,
RECORDNUMBER from ERROR_UPLOAD_T
) TMP
ON (T.RECORDNUMBER = TMP.RECORDNUMBER and
T.PROCESSINGFILENAME= TMP.PROCESSINGFILENAME and
T.PROCESSINGFILENAME='${new_err_xml}')
WHEN MATCHED THEN
UPDATE SET
T.STATUS = 'ERROR',
T.ERRORSOURCE = 'BRM',
T.ERRORCODE = TMP.ERRORCODE
DELETE from ERROR_UPLOAD_T WHERE
PROCESSINGFILENAME like '${new_err_xml}';
これができない場合は、これを行うにはより良い方法を教えてください。この特定の文は、sqlplusを使用するシェル・スクリプトで呼び出されます。
編集:私はこの方法を試して、それは働くように見えます。
は、私は方法を以下にクエリを変更して、結果を達成するために管理
MERGE INTO ${TABLE_NAME} T
USING (
SELECT
ERRORCODE, PROCESSINGFILENAME,
RECORDNUMBER from ERROR_UPLOAD_T
) TMP
ON (T.RECORDNUMBER = TMP.RECORDNUMBER and
T.PROCESSINGFILENAME= TMP.PROCESSINGFILENAME and
T.PROCESSINGFILENAME='${new_err_xml}')
WHEN MATCHED THEN
UPDATE SET
T.STATUS = 'ERROR',
T.ERRORSOURCE = 'BRM',
T.ERRORCODE = TMP.ERRORCODE;
if (sql%rowcount > 0) then
DELETE from ERROR_UPLOAD_T WHERE
PROCESSINGFILENAME like '${new_err_xml}';
end if;
COMMIT;
END;
/
あなた自身の質問に答えることができれば、実際にそれを回答ではなく編集として投稿することをお勧めします。 –
そして、いいえ、( 'using'句から)ソーステーブルをマージステートメントの一部として削除することはできません。 –
@ Mr.Llama自分の投稿に答えることはできません。しかし、私の疑問は依然として同じです。「私たちは単一マージ状態で達成できますか?私は以下に私の答えを掲載した。 – user2570205