Oracle MERGE INTO的使用方法

Oracle MERGE INTO的使用方法

大家好,又见面了,我是全栈君,祝每个程序员都可以多学几门语言。

           非常多时候我们会出现例如以下情境,假设一条数据在表中已经存在,对其做update,假设不存在,将新的数据插入.假设不使用Oracle提供的merge语法的话,可能先要上数据库select查询一下看是否存在,然后决定怎么操作,这种话须要写很多其它的代码,同一时候性能也不好,要来回数据库两次.使用merge的话则能够一条SQL语句完毕.

1)主要功能 
提供有条件地更新和插入数据到数据库表中 
假设该行存在,运行一个UPDATE操作,假设是一个新行,运行INSERT操作 
    — 避免了分开更新 
    — 提高性能并易于使用 
    — 在数据仓库应用中十分实用 

2)MERGE语句的语法例如以下: 

MERGE [hint] INTO [schema .] table [t_alias] USING [schema .] 

{ table | view | subquery } [t_alias] ON ( condition ) 

WHEN MATCHED THEN merge_update_clause 

WHEN NOT MATCHED THEN merge_insert_clause; 

3)演示样例

MERGE INTO TABLE TARGET
USING (SELECT '111111111' STORE_NO,
              '2014-01' TARGET_YM,
              '1' TARGET_D01,
              '2' TARGET_D02,
              '2' TARGET_D03,
              '2' TARGET_D04,
              '2' TARGET_D05,
              '2' TARGET_D06,
              '2' TARGET_D07,
              '2' TARGET_D08,
              '2' TARGET_D09,
              '2' TARGET_D10,
              '2' TARGET_D11,
              '2' TARGET_D12,
              '2' TARGET_D13,
              '2' TARGET_D14,
              '2' TARGET_D15,
              '2' TARGET_D16,
              '2' TARGET_D17,
              '2' TARGET_D18,
              '2' TARGET_D19,
              '2' TARGET_D20,
              '2' TARGET_D21,
              '2' TARGET_D22,
              '2' TARGET_D23,
              '2' TARGET_D24,
              '2' TARGET_D25,
              '2' TARGET_D26,
              '2' TARGET_D27,
              '2' TARGET_D28,
              '2' TARGET_D29,
              '2' TARGET_D30,
              '2' TARGET_D31,
              1 USER_ID
         FROM DUAL) TEMP
ON (TARGET.STORE_NO = TEMP.STORE_NO AND TARGET.TARGET_YM = TEMP.TARGET_YM)
WHEN MATCHED THEN
  UPDATE
     SET TARGET.TARGET_D01  = TEMP.TARGET_D01,
         TARGET.TARGET_D02  = TEMP.TARGET_D02,
         TARGET.TARGET_D03  = TEMP.TARGET_D03,
         TARGET.TARGET_D04  = TEMP.TARGET_D04,
         TARGET.TARGET_D05  = TEMP.TARGET_D05,
         TARGET.TARGET_D06  = TEMP.TARGET_D06,
         TARGET.TARGET_D07  = TEMP.TARGET_D07,
         TARGET.TARGET_D08  = TEMP.TARGET_D08,
         TARGET.TARGET_D09  = TEMP.TARGET_D09,
         TARGET.TARGET_D10  = TEMP.TARGET_D10,
         TARGET.TARGET_D11  = TEMP.TARGET_D11,
         TARGET.TARGET_D12  = TEMP.TARGET_D12,
         TARGET.TARGET_D13  = TEMP.TARGET_D13,
         TARGET.TARGET_D14  = TEMP.TARGET_D14,
         TARGET.TARGET_D15  = TEMP.TARGET_D15,
         TARGET.TARGET_D16  = TEMP.TARGET_D16,
         TARGET.TARGET_D17  = TEMP.TARGET_D17,
         TARGET.TARGET_D18  = TEMP.TARGET_D18,
         TARGET.TARGET_D19  = TEMP.TARGET_D19,
         TARGET.TARGET_D20  = TEMP.TARGET_D20,
         TARGET.TARGET_D21  = TEMP.TARGET_D21,
         TARGET.TARGET_D22  = TEMP.TARGET_D22,
         TARGET.TARGET_D23  = TEMP.TARGET_D23,
         TARGET.TARGET_D24  = TEMP.TARGET_D24,
         TARGET.TARGET_D25  = TEMP.TARGET_D25,
         TARGET.TARGET_D26  = TEMP.TARGET_D26,
         TARGET.TARGET_D27  = TEMP.TARGET_D27,
         TARGET.TARGET_D28  = TEMP.TARGET_D28,
         TARGET.TARGET_D29  = TEMP.TARGET_D29,
         TARGET.TARGET_D30  = TEMP.TARGET_D30,
         TARGET.TARGET_D31  = TEMP.TARGET_D31,
         TARGET.OPT_COUNTER = TARGET.OPT_COUNTER + 1,
         TARGET.UPDATE_BY   = TEMP.USER_ID,
         TARGET.UPDATE_DATE = SYSDATE
WHEN NOT MATCHED THEN
  INSERT
  VALUES
    (SEQ.NEXTVAL,
     TEMP.STORE_NO,
     TEMP.TARGET_YM,
     TEMP.TARGET_D01,
     TEMP.TARGET_D02,
     TEMP.TARGET_D03,
     TEMP.TARGET_D04,
     TEMP.TARGET_D05,
     TEMP.TARGET_D06,
     TEMP.TARGET_D07,
     TEMP.TARGET_D08,
     TEMP.TARGET_D09,
     TEMP.TARGET_D10,
     TEMP.TARGET_D11,
     TEMP.TARGET_D12,
     TEMP.TARGET_D13,
     TEMP.TARGET_D14,
     TEMP.TARGET_D15,
     TEMP.TARGET_D16,
     TEMP.TARGET_D17,
     TEMP.TARGET_D18,
     TEMP.TARGET_D19,
     TEMP.TARGET_D20,
     TEMP.TARGET_D21,
     TEMP.TARGET_D22,
     TEMP.TARGET_D23,
     TEMP.TARGET_D24,
     TEMP.TARGET_D25,
     TEMP.TARGET_D26,
     TEMP.TARGET_D27,
     TEMP.TARGET_D28,
     TEMP.TARGET_D29,
     TEMP.TARGET_D30,
     TEMP.TARGET_D31,
     NULL,
     DEFAULT,
     DEFAULT,
     NULL,
     TEMP.USER_ID,
     DEFAULT,
     NULL,
     NULL);

小帮助:

看到数据库表这么多字段是不是好烦,拷贝、写都麻烦还easy出错,能够例如以下操作:

1、先查询出表的全部字段

SELECT COLUMN_ID,
       COLUMN_NAME,
       DATA_TYPE,
       DATA_LENGTH,
       DATA_PRECISION,
       DATA_SCALE,
       NULLABLE,
       DATA_DEFAULT
  FROM USER_TAB_COLUMNS
 WHERE TABLE_NAME = 'TABLE'
 ORDER BY COLUMN_ID

2、将该表列名复制到Excel,使用函数CONCATENATE

Oracle MERGE INTO的使用方法

Oracle MERGE INTO的使用方法

Oracle MERGE INTO的使用方法

举一反三啦,非常多时候都能够用到的,整理自网络

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/118892.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • JMeter下载安装以及使用教程

    JMeter下载安装以及使用教程JMeter下载1、下载地址:https://jmeter.apache.org/download_jmeter.cgi2、下载后无需安装,解压后即可使用。解压后目录如下:3、打开JMeter中bin目录下面的jmeter.bat双击即可打开JMeter了,打开的时候会有两个窗口,Jmeter的命令窗口和Jmeter的图形操作界面,不要关闭命令窗口,打开界面如下:4、打开jmeter软件,发现显示的为英文,更改为中文步骤如下:点击菜单栏【Options】按钮然后依次单击【Cho

    2022年10月31日
  • 查看win11激活状态[通俗易懂]

    查看win11激活状态[通俗易懂](一)命令行查看:slmgr.vbs-dlv如上图所示,windows11已激活。(二)右键计算机属性查看(1)单击系统:(2)单击激活:可以看到已经处于激活状态。

    2022年5月7日
  • 基于Deep Learning 的视频识别技术「建议收藏」

    基于Deep Learning 的视频识别技术「建议收藏」深度学习在最近十来年特别火,几乎是带动AI浪潮的最大贡献者。互联网视频在最近几年也特别火,短视频、视频直播等各种新型UGC模式牢牢抓住了用户的消费心里,成为互联网吸金的又一利器。当这两个火碰在一起,会产生什么样的化学反应呢?不说具体的技术,先上一张福利图,该图展示了机器对一个视频的认知效果。其总红色的字表示objects,蓝色的字表示scen…

    2022年5月27日
  • 開發中的DEV,QAS,UAT,PRD是什麼意思

    開發中的DEV,QAS,UAT,PRD是什麼意思IDES:InternetDemonstrationandEvaluationSystem交互式演示与评估系统DEV:DevelopmentSystem,开发系统QAS:QualityAssuranceSystem,质量保证系统UAT:UserAcceptanceTest用户验收测试PRD:ProductionSystem,生产系统…

    2022年6月28日
  • java maven 安装

    java maven 安装

    2021年6月13日
  • 测试用例八大要素及额外十小要素

    测试用例八大要素及额外十小要素测试用例八大要素1.测试用例编号由字母、字符、数字组合而成的字符串,有唯一性,易识别性。eg:1)系统测试:产品编号-ST-系统测试项名-系统测试子项名-编号2)集成测试:产品编号-IT-集成测试项名-集成测试子项名-编号3)单元测试:产品编号-UT-单元测试项名-单元测试子项名-编号这样看到编号就可以知道是做的什么测试,测试的对象是什么,也方便维护。 2.测…

    2022年6月28日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号