MERGE開發中遇到的問題
在使用merge開發中遇到的問題。
有一個需求,需要從基礎表中取資料放到目標表,如果目標表中已經有基礎表的資料了,就修改目標表中的資料,
如果沒有基礎表中的資料就把基礎表的資料插入到目標表中。因此用到merge完成這樣一個操作
首先 建立基本環境
prompt PL/SQL Developer import file
prompt Created on 2017年9月19日 by SAMSUNG
set feedback off
set define off
prompt Creating CL_BAS...
create table CL_BAS
(
line_id VARCHAR2(20) not null,
index_item_code VARCHAR2(4) not null,
worst_mansge_limit_nval NUMBER not null,
best_manage_limit_nval NUMBER not null,
reg_dttm DATE not null,
register_id VARCHAR2(20) not null,
update_dttm DATE not null,
updater_id VARCHAR2(20) not null
)
;
comment on table CL_BAS
is '???????';
comment on column CL_BAS.line_id
is '?????';
comment on column CL_BAS.index_item_code
is '??????';
comment on column CL_BAS.worst_mansge_limit_nval
is '???????';
comment on column CL_BAS.best_manage_limit_nval
is '???????';
comment on column CL_BAS.reg_dttm
is '????';
comment on column CL_BAS.register_id
is '??????';
comment on column CL_BAS.update_dttm
is '????';
comment on column CL_BAS.updater_id
is '??????';
alter table CL_BAS
add constraint CL_BAS_PK primary key (LINE_ID, INDEX_ITEM_CODE);
prompt Creating LINE_BAS...
create table LINE_BAS
(
line_id VARCHAR2(20) not null,
line_type_code VARCHAR2(2) not null,
line_name VARCHAR2(100) not null,
line_desc VARCHAR2(500),
ltdly_unit_start_days NUMBER not null,
ltdly_unit_days NUMBER not null,
ltdly_unit_end_days NUMBER not null,
reg_dttm DATE not null,
register_id VARCHAR2(20) not null,
update_dttm DATE not null,
updater_id VARCHAR2(20) not null
)
;
comment on table LINE_BAS
is '????';
comment on column LINE_BAS.line_id
is '?????';
comment on column LINE_BAS.line_type_code
is '??????';
comment on column LINE_BAS.line_name
is '????';
comment on column LINE_BAS.line_desc
is '????';
comment on column LINE_BAS.ltdly_unit_start_days
is '??????????';
comment on column LINE_BAS.ltdly_unit_days
is '????????';
comment on column LINE_BAS.ltdly_unit_end_days
is '?????????';
comment on column LINE_BAS.reg_dttm
is '????';
comment on column LINE_BAS.register_id
is '??????';
comment on column LINE_BAS.update_dttm
is '????';
comment on column LINE_BAS.updater_id
is '??????';
alter table LINE_BAS
add constraint LINE_BAS_PK primary key (LINE_ID);
prompt Disabling triggers for CL_BAS...
alter table CL_BAS disable all triggers;
prompt Disabling triggers for LINE_BAS...
alter table LINE_BAS disable all triggers;
prompt Deleting LINE_BAS...
delete from LINE_BAS;
commit;
prompt Deleting CL_BAS...
delete from CL_BAS;
commit;
prompt Loading CL_BAS...
insert into CL_BAS (line_id, index_item_code, worst_mansge_limit_nval, best_manage_limit_nval, reg_dttm, register_id, update_dttm, updater_id)
values ('DFDF', '01', 1, 1, to_date('19-09-2017 12:50:57', 'dd-mm-yyyy hh24:mi:ss'), '1', to_date('19-09-2017 12:50:57', 'dd-mm-yyyy hh24:mi:ss'), '1');
commit;
prompt 1 records loaded
prompt Loading LINE_BAS...
insert into LINE_BAS (line_id, line_type_code, line_name, line_desc, ltdly_unit_start_days, ltdly_unit_days, ltdly_unit_end_days, reg_dttm, register_id, update_dttm, updater_id)
values ('DFDF', '02', 'dfdf', 'dfdf', 11, 1, 1, to_date('18-09-2017 14:33:24', 'dd-mm-yyyy hh24:mi:ss'), 'admin', to_date('18-09-2017 14:33:24', 'dd-mm-yyyy hh24:mi:ss'), 'admin');
insert into LINE_BAS (line_id, line_type_code, line_name, line_desc, ltdly_unit_start_days, ltdly_unit_days, ltdly_unit_end_days, reg_dttm, register_id, update_dttm, updater_id)
values ('FDFD', '01', 'dfdf', 'dfdf', 1, 1, 1, to_date('18-09-2017 14:33:24', 'dd-mm-yyyy hh24:mi:ss'), 'admin', to_date('18-09-2017 14:33:24', 'dd-mm-yyyy hh24:mi:ss'), 'admin');
insert into LINE_BAS (line_id, line_type_code, line_name, line_desc, ltdly_unit_start_days, ltdly_unit_days, ltdly_unit_end_days, reg_dttm, register_id, update_dttm, updater_id)
values ('FDFDF', '02', 'fdf', 'dfdf', 1, 1, 1, to_date('18-09-2017 14:33:42', 'dd-mm-yyyy hh24:mi:ss'), 'admin', to_date('18-09-2017 14:33:42', 'dd-mm-yyyy hh24:mi:ss'), 'admin');
insert into LINE_BAS (line_id, line_type_code, line_name, line_desc, ltdly_unit_start_days, ltdly_unit_days, ltdly_unit_end_days, reg_dttm, register_id, update_dttm, updater_id)
values ('FFFF', '04', 'ff', 'ff', 1, 1, 1, to_date('18-09-2017 16:26:23', 'dd-mm-yyyy hh24:mi:ss'), 'lu0.zhang', to_date('18-09-2017 16:26:23', 'dd-mm-yyyy hh24:mi:ss'), 'lu0.zhang');
commit;
prompt 4 records loaded
prompt Enabling triggers for CL_BAS...
alter table CL_BAS enable all triggers;
prompt Enabling triggers for LINE_BAS...
alter table LINE_BAS enable all triggers;
set feedback on
set define on
prompt Done.
執行merge時報錯 違反主鍵約束
MERGE INTO CL_BAS T1
USING LINE_BAS T2 ON (T1.LINE_ID = T2.LINE_ID
AND T2.LINE_ID = 'DFDF')
WHEN MATCHED THEN
UPDATE SET T1.WORST_MANSGE_LIMIT_NVAL = 1
WHEN NOT MATCHED THEN
INSERT
(LINE_ID,
INDEX_ITEM_CODE,
WORST_MANSGE_LIMIT_NVAL,
BEST_MANAGE_LIMIT_NVAL,
REG_DTTM,
REGISTER_ID,
UPDATE_DTTM,
UPDATER_ID)
VALUES
('101',
'102',
1,
1,
SYSDATE,
11,
SYSDATE,
11);
說明MERGE是批量新增資料,特別在插入常量資料時,並不是只插入一條資料,而是根據USING選擇出的所有資料向 目標表中
插入資料,因此插入的資料如果都是常量,必然導致重複插入的資料
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/750077/viewspace-2145181/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- React開發中遇到的問題總結React
- uniapp開發中遇到的plus.runtime.appid問題APP
- Flutter開發過程中遇到的問題記錄Flutter
- 皮膚開發過程中遇到的3個問題
- 微信小程式開發中遇到的幾個小問題微信小程式
- 前端開發中遇到的一些問題----持續更新前端
- 開發以太坊遇到的幾個問題
- 模仿今日頭條app開發遇到的問題APP
- 直播系統開發遇到的三大問題
- laravel使用中遇到的問題Laravel
- Hodoop配置中遇到的問題OdooOOP
- 工作中遇到的問題
- javaweb中自己遇到的問題JavaWeb
- 記錄在使用Django開發過程中遇到的問題No.2Django
- Android開發過程中遇到的問題以及解決辦法 how toAndroid
- Uncaught SyntaxError: Unexpected token : 開發遇到的跨域問題Error跨域
- 移動端網頁版開發遇到的問題網頁
- loadrunner學習中遇到的問題
- @UpdateProvider註解中遇到的問題IDE
- weex學習中遇到的問題
- kafka 運維中遇到的問題Kafka運維
- laravel開發中遇到的問題與bug修復的一些總結Laravel
- 【專案中遇到的zookeeper的問題】
- AS Notes|記錄日常開發遇到的 AS 問題(不斷更新。。。
- 實際專案中遇到的問題
- 安裝 Laravel Mix 中遇到的問題Laravel
- Vue使用中遇到的程式碼問題Vue
- 爬蟲過程中遇到的問題爬蟲
- 關於工作中遇到的問題
- Speed框架許可權管理開發當中遇到的問題和處理方式框架
- react開發移動端H5遇到的問題(1)ReactH5
- H5與APP混合開發遇到的問題總結H5APP
- linux遇到的問題Linux
- Vagrant 遇到的問題
- Homestead 遇到的問題
- sudo 遇到的問題
- JackJson遇到的問題JSON
- mysql 遇到的問題MySql
- WangEditor遇到的問題