各位用户为了找寻关于Oracle MERGE INTO的用法示例介绍的资料费劲了很多周折。这里教程网为您整理了关于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    举一反三啦,很多时候都可以用到的,整理自网络