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);

小帮助:

看到数据库表这么多字段是不是好烦,拷贝、写都麻烦还容易出错,可以如下操作:

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

举一反三啦,很多时候都可以用到的,整理自网络

时间: 2024-10-30 13:50:49

Oracle MERGE INTO的用法示例介绍的相关文章

Oracle MERGE INTO的用法示例介绍_oracle

很多时候我们会出现如下情境,如果一条数据在表中已经存在,对其做update,如果不存在,将新的数据插入.如果不使用Oracle提供的merge语法的话,可能先要上数据库select查询一下看是否存在,然后决定怎么操作,这样的话需要写更多的代码,同时性能也不好,要来回数据库两次.使用merge的话则可以一条SQL语句完成. 1)主要功能 提供有条件地更新和插入数据到数据库表中 如果该行存在,执行一个UPDATE操作,如果是一个新行,执行INSERT操作 - 避免了分开更新 - 提高性能并易于使用

html 中 #include file 的用法示例介绍

 html 中 #include file 的用法示例介绍 有两个文件a.htm和b.htm,在同一目录下a.htm内容如下 代码如下: <!-- #include file="b.htm" --> b.htm内容如下 今天:雨 31 ℃-26 ℃ <br />明天:雷阵雨 33 ℃-27 ℃ 直接在浏览器中打开a,没有任何显示,后来知道,include是SSI(Server Side Include),在html中不支持include,之后把a.htm改成a.

jQuery中$.fn的用法示例介绍

jQuery中$.fn的用法示例介绍 $.fn是指jquery的命名空间,加上fn上的方法及属性,会对jquery实例每一个有效. 如扩展$.fn.abc(),即$.fn.abc()是对jquery扩展了一个abc方法,那么后面你的每一个jquery实例都可以引用这个方法了. 那么你可以这样子:$("#div").abc();  jQuery为开发插件提拱了两个方法,分别是:  jQuery.extend(object);为扩展jQuery类本身.为类添加新的方法. jQuery.fn

AspNetPager控件的最基本用法示例介绍_实用技巧

AspNetPager控件是一个基于.net的第三方免费开源控件,具有开发高效.使用方便.功能完整等优点.它弥补了GridView内置分页以及PageDatasource类辅助分页的不足,将分页数据逻辑和页面UI分离开来,非常有利于SQL分页的实现.下面仅举一个最基本的用法,帮助初学者入门. 到AspNetPage官方网站相应页面下载控件:点击打开链接 下载后解压缩,里面有一个AspNetPager.dll文件,它就是我们要使用的控件.另外还有一个AspNetPager.xml文件,它是对应的文

ASP.NET Dictionary 的基本用法示例介绍

 ASP.NET中的Dictionary想必使用.net的朋友并不陌生吧,下面以示例的方式为大家介绍下其基本用法,感兴趣的朋友可以参考下   代码如下: Dictionary<string, string> o_Dic = new Dictionary<string, string>();  //添加元素  o_Dic.Add("01", "aaa");  o_Dic.Add("02","bbb"); 

Oracle Merge Into的用法详解实例

作用:merge into 解决用B表跟新A表数据,如果A表中没有,则把B表的数据插入A表: 语法: MERGE INTO [your table-name] [rename your table here] USING ( [write your query here] )[rename your query-sql and using just like a table] ON ([conditional expression here] AND [-]-) WHEN MATHED THEN

JS中数组Array的用法示例介绍

 这篇文章主要介绍了JS中数组Array的用法,需要的朋友可以参考下 new Array()  new Array(len)  new Array([item0,[item1,[item2,...]]]  使用数组对象的方法:  var objArray=new Array();  objArray.concact([item1[,item2[,....]]]-------------------将参数列表连接到objArray的后面形成一个新的数组并返回,原有数组不受影响.如:var arr=

oracle中to_date详细用法示例(oracle日期格式转换)_oracle

TO_DATE格式(以时间:2007-11-02 13:45:25为例) 1. 日期和字符转换函数用法(to_date,to_char) 复制代码 代码如下: select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') as nowTime from dual;   //日期转化为字符串  select to_char(sysdate,'yyyy')  as nowYear   from dual;   //获取时间的年  select to_char(sys

JSF中confirm弹出框的用法示例介绍

 本文为大家详细介绍下JSF中confirm弹出框的使用方法,感兴趣的朋友可以参考下   代码如下: function checkInput(objectSource) {  if(objectSource.onclick){  objectSource.oldOnClick = objectSource.onclick;  objectSource.onclick = null;  }    var attachfile = $('#attachment').val();  if(conten