Oracle merge into関数(インクリメンタル更新、フル更新)
説明
1、データインポート機能、全量更新/増分更新の問題があり、oracelを使用したmerge into関数を簡単に記録する.
2、全量更新(オーバーライドモード):データベースにこのデータがある場合、更新操作を行う.存在しない場合は、新規操作を行います
3、増分更新(スキップモード):データベースにこのデータが存在する場合、何もしない、存在しない場合、新規操作を行う.
4、merge intoは千万級以上のデータを更新し、速度が遅い.
merge into使用
Oracleサンプル・スクリプト
1、データインポート機能、全量更新/増分更新の問題があり、oracelを使用したmerge into関数を簡単に記録する.
2、全量更新(オーバーライドモード):データベースにこのデータがある場合、更新操作を行う.存在しない場合は、新規操作を行います
3、増分更新(スキップモード):データベースにこのデータが存在する場合、何もしない、存在しない場合、新規操作を行う.
4、merge intoは千万級以上のデータを更新し、速度が遅い.
merge into使用
merge into [target-table] A
using [source-table sql] B
on ([conditional expression] and [...]...)
when matched then -- on
[update sql] --
when not matched then -- on
[insert sql] --
/**
:
B A ON , B A ( ),
, B A ( ).
:B , , A .
**/
Oracleサンプル・スクリプト
/************** ( )*****************/
merge into im_supply_function v
using (select 'kn0fh34s4nr56hs3ndf5hs' supply_service_code,
'sdf345gs2fd23h4fg56ysd' function_code,
' ' function_name,
'www.baidu.com' target,
'2019-03-01 14:03:35' create_time,
' ' create_user,
' ' remarks
from dual) d
on (v.function_code = d.function_code) -- ,
when matched then
update set
v.supply_service_code = d.supply_service_code,
v.function_name = d.function_name,
v.target = d.target,
v.create_time = to_date(d.create_time, 'yyyy-mm-dd hh24:mi:ss'),
v.create_user = d.create_user,
v.remarks = d.remarks
when not matched then
insert (
v.supply_service_code,
v.function_code,
v.function_name,
v.target,
v.create_time,
v.create_user,
v.remarks)
values (
d.supply_service_code,
d.function_code,
d.function_name,
d.target,
to_date(d.create_time, 'yyyy-mm-dd hh24:mi:ss'),
d.create_user,
d.remarks
) ;
/************** ( )*****************/
merge into im_supply_function v
using (select 'kn0fh34s4nr56hs3ndf5hs' supply_service_code,
'sdf345gs2fd23h4fg56ysd' function_code,
' ' function_name,
'www.baidu.com' target,
'2019-03-01 14:03:35' create_time,
' ' create_user,
' ' remarks
from dual) d
on (v.function_code = d.function_code) -- ,
when not matched then
insert (
v.supply_service_code,
v.function_code,
v.function_name,
v.target,
v.create_time,
v.create_user,
v.remarks)
values (
d.supply_service_code,
d.function_code,
d.function_name,
d.target,
to_date(d.create_time, 'yyyy-mm-dd hh24:mi:ss'),
d.create_user,
d.remarks
) ;