• 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

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

  • 相关阅读:
    【HDOJ】1058 Humble Numbers
    activity去标题栏操作&保留高版本主题
    谷歌安卓官方开发者网站 https://developer.android.google.cn
    TortoiseGIT
    Git的优势
    eoe开发社区
    安卓巴士 http://www.apkbus.com/
    Git简介
    SVN标准目录结构
    关于人生的
  • 原文地址:https://www.cnblogs.com/yxwkf/p/3862454.html
Copyright © 2020-2023  润新知