您当前的位置: 首页 > 数据库教程 > Oracle教程 > Oracle MERGE INTO的用法示例介绍

Oracle MERGE INTO的用法示例介绍

作者:不详 来源:网络 发布时间: 2014-08-25 23:03 点击:
这篇文章主要介绍了Oracle MERGE INTO的用法,需要的朋友可以参考下 很多时候我们会出现如下情境,如果一条数据在表中已经存在,对其做update,如果不存在,将新的数据插入.如果不使用Oracle提供的merge语法的话,可能先要上数据库select查询一下看是否存在,然后决定怎么操作

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

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

         :更多精彩文章请关注三联编程教程栏目。
分享到:
本文"Oracle MERGE INTO的用法示例介绍"由远航站长收集整理而来,仅供大家学习与参考使用。更多网站制作教程尽在远航站长站。
顶一下
(0)
0%
踩一下
(0)
0%
[点击 次] [返回上一页] [打印]
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 密码: 验证码:
关于本站 - 联系我们 - 网站声明 - 友情连接- 网站地图 - 站点地图 - 返回顶部
Copyright © 2007-2013 www.yhzhan.com(远航站长). All Rights Reserved .
远航站长:为中小站长提供最佳的学习与交流平台,提供网页制作与网站编程等各类网站制作教程.
官方QQ:445490277 网站群:26680406 网站备案号:豫ICP备07500620号-4