Oracle では、テーブル内のデータを更新するために「マージイン」が使用されます。あるテーブルから別のテーブルにデータを挿入できます。挿入されたテーブルにデータが既に存在する場合、データは更新されます。データが存在しない場合は、挿入されたテーブルに新しいデータが追加されます。
このチュートリアルの動作環境: Windows 10 システム、Oracle 11g バージョン、Dell G3 コンピューター。
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 ! ]
次に、直接テストしてみましょう:
まずテーブル 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、データ テーブルが構築されました。以下に示す:
新しいデータを追加する必要がある場合、通常は次のように行います
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);
次のように実行します:
テーブル内のデータを見てみましょう:
データは正常に追加されました。
では、更新をテストするにはどうすればよいでしょうか?とても簡単です。テスト用に 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);
次のように実行します:
見てみましょうテーブル内のデータ:
データは正常に更新されました。
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、その他の値を追加して操作します。
検証するコードを書いてみましょう:
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の使用法は何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。