Oracle中 如何對一張表的資料同時修改跟插入

2021-06-04 06:33:11 字數 3103 閱讀 2700

實測資料:

sql code

--使用merge來判斷是插入還修改

create

table

t124

( id

number(4

), f1

varchar2(20

), f2

varchar2(20

));insert

into

t124

values(1

, 'a'

, 'aa'

);insert

into

t124

values(2

, 'b'

, 'bb'

);insert

into

t124

values(3

, 'c'

, 'cc'

);

實測結果:

create

table

tbl123(    id1

number(4

),    id2

varchar2(20

),    id3

varchar2(20

)  );

insert

into

tbl123

values(1

, 'a'

,'123'

);insert

into

tbl123

values(2

, 'b'

,'1234');

insert

into

tbl123

values(3

, 'c'

,'123123');

commit

;  declare

ssql

varchar2

(3000

);  icount

number

;  v_id1

number

;  v_id2

varchar2(20

);  v_id3

varchar2(20

);begin

icount :=0

;  v_id1 :=1

;  v_id3 :='

wee'

;  ssql :='

begin select count(*) into :1 from tbl123 where id1 = :2; end;

'; 

execute

immediate ssql using out icount,

inv_id1;     

ificount

>

0then

ssql :='

begin select distinct id2 into :1 from tbl123 where id1 = :2 and rownum = 1; end;

';    

execute

immediate ssql using out v_id2,

inv_id1;     ssql :='

begin update tbl123 set id3 = :1 where id1 = :2 and id2 = :3; end;

';    

execute

immediate ssql using

inv_id3,

inv_id1,

inv_id2;     dbms_output.put_line(

'update

'); 

else

ssql :='

begin insert into tbl123(id1,id2,id3) values (:1,:2,:3); end;

';   

execute

immediate ssql using

inv_id1,

inv_id2,

inv_id3;    dbms_output.put_line(

'insert

'); 

endif

;  commit

;exception 

when

others

then

dbms_output.put_line(

'error');

end;

select

*from

tbl123;

merge

into

dept_2 d  using dept de

on(d.id

=de.id)

when

matched

then

update

setd.name

=de.name

when

notmatched

then

insert

(id,name)

values

(de.id,de.name);

--解釋

--*1). merge into dept_2 d  using dept de 

--從源表 dept (別名 de) 往 dept_2 表(別名d)中插入或更新資料

--*2). on(d.id=de.id) :源表(dept)與目標表(dept_2)的連線條件是 (dept_2.id=dept.id)

--*3). when matched then update set d.name=de.name

--當目標表找到與源表匹配的記錄行(匹配條件:dept_2.id=dept.id ),

--則更新目標表(dept_2) 的 name字段值為 源表 (dept) 的name字段值

--*4). when not matched then insert (id,name) values (de.id,de.name)

--如果沒有找到匹配記錄(即:源表記錄的id字段值,在目標表中不存在),

--則將源表中這樣的記錄插入目標表

--簡單理解為一句話:有:則更新;無:則插入!

MySQL中update一張表到另一張表

以下的文章主要介紹的是mysql 資料庫中如何將乙個實際應用表的相關資料插入到另外乙個表的實際操作方法,此方案看起來很簡單但是並非如此,雖然這個實現起來非常簡單,但是還是會困擾許多新手,因此專門發一篇文章備查。開發中,我們經常需要將乙個表的資料插入到另外乙個表,有時還需要指定匯入字段,雖然這個實現起...

從一張表中複製資料到另一張表中

分為兩種情況,一種是目標表不存在,另一種是目標表已存在,語法是不同的。分別以sqlserver和oracle為例,兩者略有不同。sqlserver中,如果目標表不存在 select into新錶名from舊表名 sqlserver中,如果目標表已存在 insertinto新錶名select from...

Oracle一張表的多個字段更新到另一張表中去

假設表a中有多個字段 province city 需要從b表獲取 兩張表的mobile一樣 總結了幾種寫法。一 update a set a.province select province from b where b.mobile a.mobile update a set a.city sel...