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选择出的所有数据向 目标表中
插入数据,因此插入的数据如果都是常量,必然导致重复插入的数据

时间: 2024-09-20 06:05:20

MERGE开发中遇到的问题的相关文章

安卓应用开发-安卓开发中红米手机拍照发出去后为啥旋转了90度

问题描述 安卓开发中红米手机拍照发出去后为啥旋转了90度 10C 开发过程中,做了一个类似微信朋友圈的东西,拍照上传图片的时候,在红米手机上遇到了这个问题,本来是正着拍摄,发出去后在朋友圈显示的是旋转了90度的,如图所示,键盘旋转了90度 解决方案 跟手机有关,手机拍照默认横屏 解决方案二: 我也是红米,做移动开发时拍照是正常的

struts2.0-struts2在实际开发中的使用的多吗?

问题描述 struts2在实际开发中的使用的多吗? struts2在实际开发中的使用的多吗? struts2在实际开发中的使用的多吗? struts2在实际开发中的使用的多吗? 解决方案 老项目多,新项目用SpringMVC了 解决方案二: SpringMVC用得越来越多了.

jpanel-java开发中我设置了一个JPanel里面装了图片作为背景 但是为什么没有显示出来背景图片

问题描述 java开发中我设置了一个JPanel里面装了图片作为背景 但是为什么没有显示出来背景图片 此段代码中什么地方出错了?为什么我的ip,h还有rs,drgl这三个地方的背景图片 无法显示或者切换? p4=new JPanel(new BorderLayout()); p2=new JPanel(new CardLayout()); //处理p2,p3,p4 p2_lab1=new JLabel(new ImageIcon("image/21.jpg")); p2_lab2=ne

开发中常见的中文乱码原因

在开发中,我们常常遇到中文乱码的问题,比如: &浏览器中看到的 Jsp/Servlet 页面中的汉字成了 '?'      &浏览器中看到的 Servlet 页面中的汉字都成了乱码   &Jsp/Servlet 页面无法显示 GBK 汉字. &Jsp/Servlet 不能接收 form 提交的汉字. &JSP/Servlet 数据库读写无法获得正确的内容. 隐藏在这些问题后面的是各种错误的字符转换和处理.解决类似的字符encoding问题,需要了解 Jsp/Serv

请问在jsp开发中使用的mysql server数据库服务器

问题描述 请问在jsp开发中使用的mysql server数据库服务器 请问在jsp开发中使用的mysql server数据库服务器,在Visual C++ 6.0中也可以使用么?如果可以,请问如何使用? 解决方案 到底你说的是mysql还是sql server?不过这两者都可以在VC中访问,具体你google下 解决方案二: 可以吧,但是6.0都是多少年前的版本了,连sql server会出现各种未知的问题,具体google,楼上正解 解决方案三: 应该是可以的,直接都连接同一个数据库不就可以

iOS开发中常用的数学函数

iOS开发中常用的数学函数   /*---- 常用数学公式 ----*/ //指数运算 3^2 3^3 NSLog(@"结果 %.f", pow(3,2)); //result 9 NSLog(@"结果 %.f", pow(3,3)); //result 27 //开平方运算 NSLog(@"结果 %.f", sqrt(16)); //result 4 NSLog(@"结果 %.f", sqrt(81)); //result

android 应用程序开发中,清除缓存的功能怎么做啊?

问题描述 android 应用程序开发中,清除缓存的功能怎么做啊? android 应用程序开发中,清除缓存的功能怎么做啊?清除此应用程序的缓存,怎么做? 解决方案 getCacheDir()能够得到当前项目的缓存地址 在项目中经常会使用到WebView 控件,当加载html 页面时,会在/data/data/应用package 目录下生成database与cache 两个文件夹.请求的url 记录是保存在WebViewCache.db,而url 的内容是保存在WebViewCache 文件夹下

安卓开发中某一个界面还没等你操作呢 自己就没了 哪里出问题了?

问题描述 安卓开发中某一个界面还没等你操作呢 自己就没了 哪里出问题了? 问题如上 好困惑! 解决方案 自己就没了,是返回上一级页面么?还是什么?有可能是AndroidManifest.xml文件里activity配置的问题.. 解决方案二: 出现fatal crash了把,抓下log看看. 解决方案三: 贴出代码,贴出log,才好分析,这样描述太抽象 解决方案四: 看一下log日志,看看错误信息. 解决方案五: 这个问题问的有点抽象能不能再具体些

WEB设计技巧:Web开发中经常使用的网站和Web App

文章描述:Web用户体验师Jake Rocheleau撰写了一篇文章分享他在Web开发中经常使用的网站和Web App,其中包含各类字体库.代码库.插件库.配色方案和测试工具.他同时指出,Web开发环境将慢慢转向云端. Web用户体验师Jake Rocheleau撰写了一篇文章分享他在Web开发中经常使用的网站和Web App,其中包含各类字体库.代码库.插件库.配色方案和测试工具.他同时指出,Web开发环境将慢慢转向云端. CodeVisually是一个开源项目.在它的分类目录下有各种插件.