oracle函式 merger用法

2021-09-01 19:43:00 字數 1868 閱讀 2274

merge用來從乙個表中選擇一些資料更新或者插入到另乙個表中。而最終是用更新還是用插入的方式取決於該語句中的條件

sql> select * from v$version;

banner

oracle database 10g enterprise edition release 10.2.0.1.0 - prod

pl/sql release 10.2.0.1.0 - production

core10.2.0.1.0production

tns for 32-bit windows: version 10.2.0.1.0 - production

nlsrtl version 10.2.0.1.0 - production

sql> create table merge_test1(a number,b varchar2(20)) ;

sql>  create table merge_test2(a number,b varchar2(20)) ;

sql> insert into merge_test1 values(1,'a');

sql> insert into merge_test1 values(2,'b');

sql>  insert into merge_test2 values(3,'d');

sql> insert into merge_test2 values(2,'e');

sql> select * from merge_test1; 

a b1 a

2 b3 c

sql>  select * from merge_test2;

a b3 d

2 esql> merge into merge_test2 m

using merge_test1 n

on (m.a = n.a)

when matched then

update set m.b = n.b

when not matched then

insert (m.a,m.b) values (n.a,n.b);

sql>  select * from merge_test2;

a b3 c

2 b1 a

注意merger後表merge_test2的記錄情況,從結果顯示順序可以得知,merger是的以目標表為驅動的,即:每次拿merge_test2中的一條記錄與源表merge_test1相匹配,如果找到就做更新,當目標表中資料比較完畢,則再查詢源表,如果源表還存在尚未被匹配的記錄,則一併按序插入到目標表中。 

總結:一、merge 的用法大致上有三種: 

1、只更新不插入

merge into merge_test2 m 

using merge_test1 n 

on (m.a = n.a) 

when matched then 

update set m.b = n.b; 

2、只插入不更新

merge into merge_test2 m 

using merge_test1 n 

on (m.a =n.a)  

when not matched then 

insert (m.a,m.b) values(n.a,n.b); 

3、既插入也更新

merge into merge_test2 m 

using merge_test1 n 

on(m.a = n.a) 

when  matched then 

update set m.b=n.b 

when not matched then 

insert (m.a,m.b) values(n.a,n.b) 

二、注意事項

用oracle 函式 拼全名

select max sys connect by path c.channel name,取最長的一條 from sinocms channel c start with c.id 1000010141 connect by prior parent id id 結果 新增欄目命喝彩 it資訊期刊...

Oracle用的常用函式

1.字元函式 1.lower argo 將大寫字元轉換為小寫字元 2.upper arg1 將小寫字元轉化為大寫 3.initcap arg1 單詞首字母大寫 4.dsubstr arg0,arg1 將arg0中的字串從第arg1擷取到最後 擷取後的字元包括第arg1字元 5.substr a,b,...

to char函式oracle怎麼用

檢視字元占用位元組 select userenv language dump 我 length 我 字元數 lengthb 我 位元組數 vsize 我 from dual to char函式使用 9 代表乙個數字 0 強迫0顯示 顯示美元符號 l 強制顯示乙個當地的貨幣符號 顯示乙個小數點 顯示乙...