非常多时候我们会出现例如以下情境,假设一条数据在表中已经存在,对其做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的使用方法的更多相关文章

  1. Oracle Merge into 详细介绍

    Oracle Merge into 详细介绍 /*Merge into 详细介绍MERGE语句是Oracle9i新增的语法,用来合并UPDATE和INSERT语句.通过MERGE语句,根据一张表或子查 ...

  2. ORACLE MERGE INTO UPDATE DELETE 用法

    ORACLE MERGE INTO UPDATE DELETE 用法 使用该MERGE语句从一个或多个源中选择行以进行更新或插入表或视图.您可以指定条件以确定是更新还是插入目标表或视图. 此语句是组合 ...

  3. oracle调用JAVA类的方法

    导入jar包 在oracle中导入需要的jar包,我们把编辑好的java类打成jar包,直接在oarcle里面写简单的调用就可以了,  1.操作系统需要拥有支持loadjava命令的jdk.  2.加 ...

  4. 【转】有关Oracle随机字符串的生成方法及具体应用

    Oracle生成随机字符串的方法是通过dbms_random.string实现的. 1.dbms_random.string用法Oracle官方文档参考链接:http://download.oracl ...

  5. Oracle merge

    oracle merge 語法:

  6. Oracle创建自增字段方法-ORACLE SEQUENCE的简单介绍

    引用自 :http://www.2cto.com/database/201307/224836.html   Oracle创建自增字段方法-ORACLE SEQUENCE的简单介绍 先假设有这么一个表 ...

  7. oracle 快速删除大批量数据方法(全部删除,条件删除,删除大量重复记录)

    oracle 快速删除大批量数据方法(全部删除,条件删除,删除大量重复记录) 分类: ORACLE 数据库 2011-05-24 16:39 8427人阅读 评论(2) 收藏 举报 oracledel ...

  8. Oracle OCI-22053:溢出错误解决方法

    原文 Oracle OCI-22053:溢出错误解决方法 Oracle 数值数据类型最多可存储 38 个字节的精度.当将 Oracle 数值转换为公共语言运行库数据类型时,小数点后边的位数可能过多,这 ...

  9. 序列化和持久化 merge方法和saveOrUpdate方法

    merge方法和saveOrUpdate方法的区别 merge方法是把我们提供的对象转变为托管状态的对象:而saveOrUpdate则是把我们提供的对象变成一个持久化对象:说的通俗一点就是:saveO ...

随机推荐

  1. 【POJ2752】【KMP】Seek the Name, Seek the Fame

    Description The little cat is so famous, that many couples tramp over hill and dale to Byteland, and ...

  2. 数组操作- reverse sort each 操作

    reverse reverse 操作符会读取列表(也可能来自数组),并按相反的次序返回该列表. .. ; @barney = reverse(@fred); # 得10,9,8,7,6 .. ; # ...

  3. php之文件上传类代码

    /* 单个文件上传 功能 上传文件 配置允许的后缀 配置允许的大小 获取文件后缀 判断文件的后缀 报错 */ class UpTool{ protected $allowExt = 'jpg,jpeg ...

  4. Python自动化运维之27、Django(一)

    一.概述 1.什么是框架? 框架,即framework,特指为解决一个开放性问题而设计的具有一定约束性的支撑结构,使用框架可以帮你快速开发特定的系统,简单说就是使用别人搭好的舞台,你来做表演. 2.常 ...

  5. C# mvc3 mvc4 伪静态及IIS7.5配置

    mvc3 mvc4路由配置 //单独路由 routes.MapRoute(    name: "XXX",    url: "Home/XXX.html/{id}&quo ...

  6. you don't have permission 错误

    当引入第三方的框架的时候 容易产生以下问题: The file “XXX.app” couldn’t be opened because you don’t have permission to vi ...

  7. 为什么Tomcat的webapps目录下新建的目录不能访问html文件?

    在Tomcat安装目录中,webapps默认为部署网站用的目录.webapps/ROOT是网站的根目录,其它目录都是网站的子目录,如webapps\jsp-examples目录.但是,当我们新建一个子 ...

  8. 使用iOS8 WKWebView的浏览器模块,脉冲动画层-b

    KINWebBrowser是一个可嵌入app的浏览器模块. 它使用iOS 8的 WKWebView API编写,同时在iOS 7上使用UIWebView来兼容. 测试环境: Xcode 6.0 iOS ...

  9. JavaScript DES 加密

    最近做网页数据加密工作, 使用CryptoJS v3.1.2 这个JavaScript脚本,网上比较有质量的文章实在太少,经验证加密结果与Asp.net DES加密结果一致 参考文章 https:// ...

  10. 使用 getNextException() 来检索已经过批处理的特定元素的异常。 ERRORCODE=-4228, SQLSTATE=null

    今天查询了一天发现的问题,用ibatis做批量操作时,报错: [非原子批处理出现故障]使用 getNextException() 来检索已经过批处理的特定元素的异常. ERRORCODE=-4228, ...