0
私は、同じレコードをデータベースに挿入しようとするのを避けるつもりです。 このステートメントはレコードを挿入しません。 selectで参照されているレコードが存在しないため、挿入する必要があります。私が間違っているすべてのアイデア。Oracle、Merge文が機能しない
MERGE INTO XX0101.CAMPAIGN b
USING (SELECT * FROM XX0101.CAMPAIGN WHERE CAMPAIGN_ID=7 AND X_ID='0123' AND Y_ID='4567') a
ON (a.CAMPAIGN_ID = b.CAMPAIGN_ID)
WHEN NOT MATCHED THEN
INSERT (CAMPAIGN_ID, X_ID, Y_ID, ROW_LAST_UPDATE_TS, ROW_LAST_UPDATE_ID)
VALUES (7, '0123', '4567', SYSDATE, 'ABC');
Uh ..テーブルからレコードを照会し、同じテーブル(それはもちろんそれが見つかる)で検索するようにOracleに依頼しています。一致してからINSERT ...なぜそれを挿入すると思いますか? – Ditto
私はMERGEについて理解していますが、選択はテーブル上で最初に実行され、レコードが存在しない場合は挿入されます。私は間違っているかもしれませんが、私はこの機能を見て、その機能を誤解している可能性があります。 – jimmy
あなたは正しい "並べ替え"です。最初に、Oracleは 'USING'節のすべての行を取得します。次に、その結果セット "a"を初期テーブル "b"に結合します。結合に 'ON'節を使用します。それが一致するかどうか、あなたがチェックしているものです。あなたの結果セットは空です( 'CAMPAIGN_ID = 7 'は存在しないので)、MERGEには何もありません。;)あなたは主キーか一意制約を持っていると思いますか?もしそうなら、 'INSERT'だけでなく、' DUP_VAL_ON_INDEX'を介して存在することをOracleに伝えてみませんか? – Ditto