實測資料:
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...