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)
上一篇 2021年11月29日 下午4:00
下一篇 2021年11月29日 下午5:00


相关推荐

  • linux chmod 755 ,750,777

    linux chmod 755 ,750,777一直没用过chmod777(755,750)的命令,也不知道具体是什么作用,尤其不知道755,750,777分别代表什么意思,只记得有一次咨询一个同门时告诉我不要设置成777模式,后来就没有接触了。因为今天又用到了,所以整理归纳以一下。chmod是Linux下设置文件夹权限的命令,后面一般跟三个数据,代表不用用户群体在这个文件夹上的权限设置:一般是三个数字:chmod750dir_wzg第一个数字表示文件所有者的权限第二个数字表示文件所有者同属一个用户组的其他用户在该文件上的权限

    2022年7月16日
    42
  • 三极管—初识(图文并茂)

    三极管—初识(图文并茂)写在前面 本文章旨在总结备份 方便以后查询 由于是个人总结 如有不对 欢迎指正 另外 内容大部分来自网络 书籍 和各类手册 如若侵权请告知 马上删帖致歉 三极管 不管是在模电还是数电中都是常见的电子器件 利用它的特性 在模电中通常作放大作用 而在数电中则作开关或者逻辑转换 下面主要讲晶体管的开关应用 至于放大作用 太深奥 说起来太长了下文只谈应用 不谈理论 原理什么的

    2026年3月26日
    1
  • 零基础学Java(2)数据类型与变量

    零基础学Java(2)数据类型与变量前言Java是一种强类型语言。这就意味着必须为每一个变量声明一种类型。在Java中,一共8种基本类型,其中有4种整型、2种浮点型、1种字符串类型char(用于表示Unicode编码的代码单元)和1种

    2022年7月31日
    10
  • 自制超声波驱狗器(第三版)

    自制超声波驱狗器(第三版)继上次制作的超声波驱狗器,对电路的一些问题做了改进,并开源设计文件。

    2022年7月2日
    44
  • 卸载软件包命令_查看rpm包是否安装

    卸载软件包命令_查看rpm包是否安装可以先用rpm-q’xxx’或者rpm-qf’xxx/bin/xxxx.xx’来查询一下所属的rpm包的名字。然后用rpm-e’xxxxxx’来删之。’xxx/bin/xxxx.xx’是一个包中任意的文件’xxxxxx’是查询得到的rpm包的名称    rpm-e的时候后面的文件名不用加版本号 安全地卸载RPM卸载软件包,并不是简单地将原来安

    2026年2月16日
    5
  • python语言介绍

    python语言介绍Python是一种动态的、面向对象的脚本语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越来越多被用于独立的、大型项目的开发。发展历程自从20世纪90年代初Python语言诞生至今,它已被逐渐广泛应用于系统管理任务的处理和Web编程。Python的创始人为GuidovanRossum。1989年圣诞节…

    2022年5月8日
    37

发表回复

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

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