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的使用方法

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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Java设计模式之适配器模式和外观模式

    Java设计模式之适配器模式和外观模式

  • IDEA导入jar包[通俗易懂]

    IDEA导入jar包[通俗易懂]一、导入1、java项目在没有导入该jar包之前,如图:2、点击File->ProjectStructure(快捷键Ctrl+Alt+Shift+s),点击ProjectStructure界面左侧的“Modules”如图:3、在“Dependencies”标签界面下,点击右边绿色的“+”号,选择第一个选项“JARsord…

  • mysql查看版本sql_linux查看mysql版本

    mysql查看版本sql_linux查看mysql版本查询mysql版本(select查mysql版本)2020-07-2411:32:47共10个回答1、通过mysql的-V参数查询版本信息mysql-V2、登录mysql时可以查询版本信息mysql-u用户名-p用户密码3、数据库状态查询版本信息status;4、通过mysql数据库函数查询版本信息selectversion();5、通过version环境变量查询版本信息执行selectvers…

  • 概念模型设计「建议收藏」

    4.1.3     概念模型设计概念模型不依赖于具体的计算机系统,他是纯粹反映信息需求的概念结构。建模是在需求分析结果的基础上展开,常常要对数据进行抽象处理。常用的数据抽象方法是‘聚集’和‘概括’。ER方法是设计概念模型时常用的方法。用设计好的ER图再附以相应的说明书可作为阶段成果

  • linux抓包和分析工具_linux tcpdump 抓包

    linux抓包和分析工具_linux tcpdump 抓包实践中,通常在Linux里用tcpdump命令抓包,然后在Windows里用wireshark软件分析包。较通用的tcpdump命令:tcpdump-ieth0-s0-wpackage.cap注[对eth0进行完整数据包抓取,数据包输入保存到当前目录package.cap中,因为没有-c参数限制,须按Ctrl+C停止抓包]—————–

    2022年10月14日
  • 织梦dedeCMS留言薄

    织梦dedeCMS留言薄

发表回复

您的电子邮箱地址不会被公开。

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