Oracle merge into用法及例子 |
發(fā)布時(shí)間: 2012/8/13 16:15:26 |
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)建測(cè)試數(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; 查詢結(jié)果如下: 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 查詢結(jié)果如下: 1 jkl 23 --注意,這里的的NAME字段中的值是jkl 使用MERGE,實(shí)現(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表(對(duì)比原來表中的數(shù)據(jù),更新了ID=1 ROW中字段NAME,同時(shí)多出兩條新數(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); 本文出自:億恩科技【1tcdy.com】 服務(wù)器租用/服務(wù)器托管中國(guó)五強(qiáng)!虛擬主機(jī)域名注冊(cè)頂級(jí)提供商!15年品質(zhì)保障!--億恩科技[ENKJ.COM] |