ホームページ > データベース > Oracle > Oracleでのmerge intoの使用法は何ですか

Oracleでのmerge intoの使用法は何ですか

WBOY
リリース: 2022-03-02 13:47:24
オリジナル
22808 人が閲覧しました

Oracle では、テーブル内のデータを更新するために「マージイン」が使用されます。あるテーブルから別のテーブルにデータを挿入できます。挿入されたテーブルにデータが既に存在する場合、データは更新されます。データが存在しない場合は、挿入されたテーブルに新しいデータが追加されます。

Oracleでのmerge intoの使用法は何ですか

このチュートリアルの動作環境: Windows 10 システム、Oracle 11g バージョン、Dell G3 コンピューター。

Oracle での merge into の使用法は何ですか

Oracle9g では MERGE コマンドが導入されました。1 つの SQL ステートメントで、テーブルに対する挿入と更新の操作を同時に実行できます。MERGE コマンドは、 1 つ以上のテーブルから更新または 1 つ以上のテーブルに挿入するデータ ソース内の行を選択します。Oracle 10g では、MERGE に次の改良点があります:

1、UPDATE または INSERT 句はオプションです

2 、UPDATE および INSERT 句は WHERE 句で追加できます

3. ON 条件で定数フィルター述語を使用して、ソース テーブルとターゲット テーブルを接続せずにターゲット テーブルにすべての行を挿入します

4. UPDATE 句の後に DELETE 句を続けると、不要な行を削除できます

5. ソース テーブルは、その後に using キーワードが続くテーブルであり、ターゲット テーブルはマージされるテーブルです

6. merge into でのすべての更新、挿入、削除はターゲット テーブルで実行されます。操作テーブルへのマージが定式化されているため、更新、挿入、削除ではテーブル名

7 を表示する必要はありません。つまり、マージ インの機能は、テーブル B とテーブルの使用の問題を解決することです。新しいテーブル A のデータ。テーブル A にデータが存在しない場合は、テーブル B のデータをテーブル A に挿入するか、テーブルにデータを挿入します。テーブルに既にデータがある場合は更新されます。それ以外の場合は、新しいデータが作成されます。追加した。
構文:

MERGE INTO [your table-name] [rename your table here]  
  USING ( [write your query here] )[rename your query-sql and using just like a table]  
  ON ([conditional expression here] AND [...]...)  
  WHEN MATHED THEN [here you can execute some update sql or something else ]  
  WHEN NOT MATHED THEN [execute something else here ! ]
ログイン後にコピー

次に、直接テストしてみましょう:

要件 1: データをテーブルに挿入します。データがテーブルに既に存在する場合は更新し、存在しない場合は更新します。追加

まずテーブル TEST_ONE

create table TEST_ONE(
  ID   NUMBER not null
    primary key,
  NAME VARCHAR2(255),
  IP   VARCHAR2(255),
  MEMO VARCHAR2(255))commit;
ログイン後にコピー

いくつかのデータをテスト データとして追加します

INSERT INTO TEST_ONE (ID, NAME, IP, MEMO) VALUES (1, '2', '3', '周文军');
INSERT INTO TEST_ONE (ID, NAME, IP, MEMO) VALUES (2, '66', '366', '2656');
INSERT INTO TEST_ONE (ID, NAME, IP, MEMO) VALUES (3, '5656', '626', '2626');
INSERT INTO TEST_ONE (ID, NAME, IP, MEMO) VALUES (4, '5656', '2626', '626');
ログイン後にコピー

OK、データ テーブルが構築されました。以下に示す:
Oracleでのmerge intoの使用法は何ですか
新しいデータを追加する必要がある場合、通常は次のように行います

INSERT INTO TEST_ONE (ID, NAME, IP, MEMO) VALUES (5, 'mrhu', '127.0.0.1.0', '王先生的IP');
ログイン後にコピー

しかし、最初に判断するために ID を使用したいと考えています。が追加されず、データが更新されます。どうすれば実現できますか?

次に、merge into コマンドが表示されます。コードを入力するだけです:

merge into TEST_ONE mtb using (select '5' as id, 'mrhu' as name,'127.0.0.1.0' as ip,'王先生的IP' as memo from dual)mmb on (mtb.id = mmb.id)when matched THENupdate set mtb.name = mmb.name,mtb.ip = mmb.ip,mtb.memo=mmb.memo
when not matched theninsert (mtb.id, mtb.name,mtb.ip,mtb.memo) VALUES(mmb.id,mmb.name,mmb.ip,mmb.memo);
ログイン後にコピー

次のように実行します:
Oracleでのmerge intoの使用法は何ですか
テーブル内のデータを見てみましょう:
Oracleでのmerge intoの使用法は何ですか
データは正常に追加されました。

では、更新をテストするにはどうすればよいでしょうか?とても簡単です。テスト用に memo='Mr. Wang's IP' を memo='This beautiful girl's IP' に変更します。

merge into TEST_ONE mtb using (select '5' as id, 'mrhu' as name,'127.0.0.1.0' as ip,'本大美女的IP' as memo from dual)mmb on (mtb.id = mmb.id)when matched THENupdate set mtb.name = mmb.name,mtb.ip = mmb.ip,mtb.memo=mmb.memo
when not matched theninsert (mtb.id, mtb.name,mtb.ip,mtb.memo) VALUES(mmb.id,mmb.name,mmb.ip,mmb.memo);
ログイン後にコピー

次のように実行します:
Oracleでのmerge intoの使用法は何ですか
見てみましょうテーブル内のデータ:
Oracleでのmerge intoの使用法は何ですか
データは正常に更新されました。

要件2: テーブルAのデータをテーブルBに追加し、主キーで判断する必要があります。データが含まれている場合は更新し、含まれていない場合は新しいデータを追加します。別のテーブル TEST_TWO を作成します。テーブル B として、TEST_ONE をテーブル A

create table tes(
  ID   NUMBER not null
    primary key,
  CODE VARCHAR2(255),
  MEMO VARCHAR2(255));commit;
ログイン後にコピー

として使用します。テーブル TEST_TWO が作成されました。最初にデータを追加しましょう。

INSERT INTO ROOT.TEST_TWO (ID, CODE, MEMO) VALUES (5, 'mrhu', '隔壁老王的IP');
ログイン後にコピー

TEST_TWO のデータを見てみましょう:


TEST_ONE のデータを新しく作成したテーブルにインポートしましょう。分析により、TEST_TWO テーブルには次のような特徴があることがわかりました。 ID 5 のデータです。TEST_ONE にも ID 5 のデータがあります。期待される実行効果は、TEST_TWOID 5 のデータのメモ フィールドの値が、 TEST_ONE、その他の値を追加して操作します。 Oracleでのmerge intoの使用法は何ですか
検証するコードを書いてみましょう:

merge into TEST_TWO mtb using (select id,name,ip,memo from TEST_ONE) mmb on (mtb.id = mmb.id)when matched THENUPDATE set mtb.code = mmb.name,mtb.memo = mmb.memo
when not matched THENinsert (mtb.id,mtb.code,mtb.memo) values (mmb.id,mmb.name,mmb.memo);
ログイン後にコピー

効果を見てみましょう:


実行結果は予想される結果と一致しています。 merge into を使用しますか?学習しましたか?気に入ったら、フォローしてサポートしてください。 Oracleでのmerge intoの使用法は何ですか
推奨チュートリアル: 「

Oracle ビデオ チュートリアル

以上がOracleでのmerge intoの使用法は何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート