乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      MERGE INTO用法

       昵稱10443322 2012-08-16
      動機:
         想在Oracle中用一條SQL語句直接進行Insert/Update的操作。
        說明:
         在進行SQL語句編寫時,我們經(jīng)常會遇到大量的同時進行Insert/Update的語句 ,也就是說當存在記錄時,就更新(Update),不存在數(shù)據(jù)時,就插入(Insert)。
        merge into 是特有的功能,相當于在 MSSQL中的
        if exists(...)
         update table
        else
         Insert into table.
        merge into 語法不僅沒有if exists語法啰嗦,而且比if exists 還要高效很多。我經(jīng)常用來在oracle之間同步數(shù)據(jù)庫表。
        語法如下:
        MERGE INTO table_name alias1
        USING (table|view|sub_query) alias2
        ON (join condition)
        WHEN MATCHED THEN
        UPDATE table_name
        SET col1 = col_val1,
        col2 = col2_val
        WHEN NOT MATCHED THEN
        INSERT (column_list) VALUES (column_values);
        
        如果不懂Merge語句的原理,Merge語句是一條比較危險的語句,特別是在您只想更新一條記錄的時候,因為不經(jīng)意間,你可能就把整表的數(shù)據(jù)都Update了一遍.....汗!!!
        ORACLE 9I中加入了MERGE
          語法:
          MERGE [hint] INTO [schema .] table [t_alias]
          USING [schema .] { table | view | subquery } [t_alias]
          ON ( condition )
          WHEN MATCHED THEN merge_update_clause
          WHEN NOT MATCHED THEN merge_insert_clause;
          創(chuàng)建測試數(shù)據(jù)表:
          create table tj_test(id number,name varchar2(20),age number);
          向表中插入數(shù)據(jù):
          insert into tj_test values (1,'jan',23);
          insert into tj_test values (2,'kk',22);
          insert into tj_test values (3,'joe',27);
          select * from tj_test;
          查詢結果如下:
          1 jan 23
          2 kk 22
          3 joe 27
          創(chuàng)建另一新表
          create table tj_test1 as select * from tj_test where 1=0
          插入一條數(shù)據(jù)
          insert into tj_test1 values (1,'jlk',23);
          select * from tj_test1
          查詢結果如下:
          1 jkl 23 --注意,這里的的NAME字段中的值是jkl
          使用MERGE,實現(xiàn)有則更新,無則插入,sql語句如下:
          merge into tj_test1 tt1
          using tj_test tt
          on (tt1.id=tt.id)
          when matched then
          update set
          tt1.name=tt.name,
          tt1.age=tt.age
          when not matched then
          insert values(
          tt.id,
          tt.name,
          tt.age)
          查詢tj_test1表(對比原來表中的數(shù)據(jù),更新了ID=1 ROW中字段NAME,同時多出兩條新數(shù)據(jù))
          select * from tj_test1
          改變行數(shù)據(jù)如下:
          1 jan 23 --這里的原有jkl值被更新
          3 joe 27 --原來表中沒有的插入
          2 kk 22 --原來表中沒有的插入
          如果存在就更新,不存在就插入
          9i已經(jīng)支持了,是Merge,但是只支持select子查詢,
          如果是單條數(shù)據(jù)記錄,可以寫作select …… from dual的子查詢。
          語法為:
          MERGE INTO table
          USING data_source
          ON (condition)
          WHEN MATCHED THEN update_clause
          WHEN NOT MATCHED THEN insert_clause;
          如:
          MERGE INTO course c
          USING (SELECT course_name, period,
          course_hours
          FROM course_updates) cu
          ON (c.course_name = cu.course_name
          AND c.period = cu.period)
          WHEN MATCHED THEN
          UPDATE
          SET c.course_hours = cu.course_hours
          WHEN NOT MATCHED THEN
          INSERT (c.course_name, c.period,
          c.course_hours)
          VALUES (cu.course_name, cu.period,
          cu.course_hours);
        本人今天看到了,覺得不錯,呵呵,如有存在問題,希望能給以指導!

        本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多