1

ab c の 3 つの列を持つテーブル A があります。列 c と別のテーブル B の結合に基づいて、列 a と b に値を挿入したい

次のクエリを使用しています

MERGE INTO A
USING
(SELECT * FROM B) **B**
ON (B.c=A.c)
WHEN MATCHED THEN
INSERT(a,b) VALUES(local_varialble,'STRING');

次のエラーが表示されます

PL/SQL : ORA-00905 : MISSING KEYWORD

助けてください !!このクエリは常にトリッキーに見えます

編集: ON 条件で != を使用し、WHEN NOT MATCHED でフォローアップすると完全にコンパイルされることがわかりました..しかし、正しい結果が得られるかどうかはわかりません

4

3 に答える 3

0

テストされていませんが、SQLをこれに変更してください

MERGE INTO A
USING
(SELECT * FROM B) B
ON (B.c=A.c)
WHEN MATCHED THEN
INSERT(a,b) VALUES(lorcal_varialble,'STRING');

追加した

(SELECT * FROM B) B

あなたのSQLに

選択を使用して参照している場合は、私が行ったようにエイリアスを作成する必要があります

于 2013-11-05T17:59:01.397 に答える
0

ここで何を達成しようとしていますか?テーブルとAの行間に接続がある場合にテーブルにデータを挿入したいが、列の列の値を使用しない。ABB

Merge は、あなたが書いたようには機能しません。句にUPDATEorDELETEステートメントがWHEN MATCHED THEN必要なため、そこに入れることはできませんINSERT。一方、 clasue ではしかWHEN NOT MATCHED THEN持てません。 INSERT

詳細はMERGEこちら: Oracle ドキュメント - MERGE ステートメント

=を からに変更すると、 の部分で を実行することになり、レコード間に一致がある場合に が!=必要になるため、機能しません。INSERTWHEN NOT MATCHED THENMERGEINSERT

要約すると、何を達成しようとしているのでしょうか。その特定の状況では使用しないでくださいMERGE。代わりに、INSERTどの行をどこから挿入するかを明確に定義した単純な条件を使用してください。

于 2013-11-05T19:03:44.947 に答える
0

最初に「merge_update_clause」を定義する必要があると思います(マージのドキュメントを参照)

このような:

MERGE INTO A
USING (SELECT * FROM B) b
   ON (B.c = A.c)
 WHEN MATCHED THEN UPDATE SET ....
     DELETE WHERE ...
   WHEN NOT MATCHED THEN INSERT ...
于 2013-11-05T16:08:16.010 に答える