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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • pycharm推荐配色和字体_pycharm代码颜色

    pycharm推荐配色和字体_pycharm代码颜色pycharm的默认主题和字体什么的真是不敢恭维,尤其是在用惯了vscode的onedarkpro主题后,再看pycharm真是觉得有点。。。在网上找了许久,找到一款类似onedarkpro的主题,同时还下载了彩色括号的插件,换上类似vscode的字体,pycharm顿时顺眼多了。度云自取:https://pan.baidu.com/s/1Ia6oryWUXV3TKT0wjzbAc…

    2022年8月27日
    0
  • NAP 801.1X 身份验证

    NAP 801.1X 身份验证

    2021年8月12日
    112
  • C# 发送Http请求 – WebClient类

    WebClient位于System.Net命名空间下,通过这个类可以方便的创建Http请求并获取返回内容。一、用法1- DownloadData二、用法2- OpenRea

    2021年12月27日
    58
  • 十分钟学会摩尔斯密码

    我写这篇文章有四个原因:一,我的英文名字是samuel,大学的时候上外教课英文名字必须要有,最早的时候查过好像是圣经里的学者和预言家,我读三国志灵帝时期有个太史令叫单飏(shàn-yáng)的祖上,也准确预言到了黄龙再世的时间和地点,作为曹丕代汉的佐证之一。所以想都没想这个名字最适合我。二,我学的是通信工程专业,通信行业的鼻祖有一个叫samuel.Morse的发明了摩尔斯电码,具有划时代意义,…

    2022年4月14日
    50
  • JSP的七大动作和三大指令

    JSP的七大动作和三大指令JSP的七大动作和三大指令

    2022年4月22日
    32
  • substance painter anchor point快速教程

    substance painter anchor point快速教程这个功能方便在substancepainter里通过normal和height实时影响污迹图来做细节但是步骤有些略麻烦,下面作为笔记也作为一个小教程首先需要实时绘制的图层必须在污迹图的下面可以在图层上直接绘制右击加上anchorpoint然后需要被影响的图层或是mask里面的generation,必须开启microDetails如果你需要绘制的高度图影响细…

    2022年10月8日
    0

发表回复

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

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