??斗地主捕鱼电竞提现秒到 广告位招租 - 15元/月全站展示
??支付宝搜索579087183领大额红包 ??伍彩集团官网直营彩票
??好待遇→招代理 ??伍彩集团官网直营彩票
??络茄网 广告位招租 - 15元/月全站展示
DB2 MERGE INTO的使用实例讲解

转载   2018-04-25   浏览量:320


DB2中的Merge语句可以将一个表中的数据合并到另一个表中,在合并的同时可以根据条件进行插入、删除、更新等操作,功能非常强大。

语法如下:彩票开奖查询 www.kbyp.net  

MERGE INTO table_name alias1

USING (table|view|sub_query) alias2

ON (join condition)

WHEN MATCHED THEN

     UPDATE table_name SET col1 = col_val1,col2 = col2_val

WHEN NOT MATCHED THEN

     INSERT (column_list) VALUES (column_values)

关键字、参数

into子句 

在into子句中指定所要修改或者插入数据的目标表

using子句 

在using子句中指定用来修改或者插入的数据源。数据源可以是表、视图或者一个子查询语句。

on子句 

在on子句中指定执行插入或者修改的满足条件。

when matched | not matched 

用该子句通知数据库如何对满足或不满足条件的结果做出相应的操作??梢允褂靡韵碌牧嚼嘧泳?。

   有数据就更新或删除,无数据就插入

merge_update子句 

merge_update子句执行对目标表中的字段值修改。当在符合on子句条件的情况下执行。如果修改子句执行,则目标表上的修改触发器将被触发。

限制:当修改一个视图时,不能指定一个default值

merge_insert 子句 

merge_insert子句执行当不符合on子句条件时,往目标表中插入数据。如果插入子句执行,则目标表上插入触发器将被触发。

限制:当修改一个视图时,不能指定一个default值

示例:

MERGE INTO BONUSES D 

USING (SELECT EMPLOYEE_ID, SALARY, DEPARTMENT_ID FROM EMPLOYEES WHERE DEPARTMENT_ID = 80) S 

ON (D.EMPLOYEE_ID = S.EMPLOYEE_ID) 

WHEN MATCHED THEN UPDATE SET D.BONUS = D.BONUS + S.SALARY*.01 

WHEN NOT MATCHED THEN INSERT (D.EMPLOYEE_ID, D.BONUS)  VALUES (S.EMPLOYEE_ID, S.SALARY*0.01);

MERGE INTO XCMDTRANSFERSTATE AS T  

USING TABLE (VALUES(?,?,?,?,?,?))  T1(DATASNO,EXTERIORSYSTEM,STATUS,DATA_TIME,MARKFORDELETE,DATATRANSFERNO)  

ON (T.DATATRANSFERNO = T1.DATATRANSFERNO)  

WHEN MATCHED THEN  update set T.DATASNO = T1.DATASNO,T.EXTERIORSYSTEM = T1.EXTERIORSYSTEM,T.STATUS = T1.STATUS,T.LASTUP_TIME = T1.DATA_TIME,T.MARKFORDELETE = T1.MARKFORDELETE  

WHEN NOT MATCHED THEN    INSERT (DATASNO,EXTERIORSYSTEM,STATUS,CREATE_TIME,MARKFORDELETE,DATATRANSFERNO) VALUES (T1.DATASNO,T1.EXTERIORSYSTEM,T1.STATUS,T1.DATA_TIME,T1.MARKFORDELETE,T1.DATATRANSFERNO

MERGE INTO EMPLOYE AS EM  

USING MANAGER AS MA  

ON EM.EMPLOYEID=MA.MANAGERID  

WHEN MATCHED AND EM.SALARY<MA.SALARY THEN UPDATE SET EM.SALARY=MA.SALARY  

WHEN MATCHED AND EM.SALARY>MA.SALARY THEN SIGNAL SQLSTATE '70001' SET MESSAGE_TEXT = 'EM.SALARY>MA.SALARY'

WHEN NOT MATCHED THEN INSERT VALUES (MA.MANAGERID,MA.NAME,MA.SALARY) 

与update的区别

一,共同点

1.都可以做更新操作

二、不同点

1.merge可以同时做插入(not matched的时候)

2.merge不会强制要求不被更新的表具有唯一或者主键约束

      例如merge a using b on  (...), 这里不会要求b具有唯一约束或者主键约束。当然肯定还是要求b只能返回一条记录。

      很多update语句调整为等效语句的时候会遇到这种强制约束的问题,但merge不存在。

3.在某些情况下,merge效率更高。---查看执行计划

转载自:https://www.2cto.com/database/201804/740189.html

招聘 不方便扫码就复制添加关注:程序员招聘谷,微信号:jobs1024



DB2V9备份数据的恢复教程
DB2V9备份数据的恢复教程。在DB2V9的情况下,如果使用自动存储的数据库,备份之后恢复的话可能出现上述报错,必须使用如下办法恢复
DB2 MERGE INTO的使用实例讲解
DB2MERGEINTO的使用实例讲解。DB2中的Merge语句可以将一个表中的数据合并到另一个表中,在合并的同时可以根据条件进行插入、删除、更新等操作,功能非常强大。
MSSQLServer2000、Oracle、DB2取中间几条数据及连接方法
MSSQLServer2000、Oracle、DB2取中间几条数据及连接方法。1)在MSSQLServer2000中取前5用top,取第六名开始3个人的信息。首先将前5名的主键取出来,在检索时排除这5名的前3人即可。
DB2存储过程,循环插入数据(用户自测造大量数据)教程
DB2存储过程,循环插入数据(用户自测造大量数据)教程。表结构如下
DB2SQLError:SQLCODE=-668,SQLSTATE=57016,SQLERRMC=7;ZJTEG.MDS_FXSPOTRATE,DRIVER=3.64.106异常问题解决
DB2SQLError:SQLCODE=-668,SQLSTATE=57016,SQLERRMC=7;ZJTEGMDS_FXSPOTRATE,DRIVER=364106异常问题解决。在dbvisualizer客户端执行下面sql:
ora.racdb2.vipFAILOVER(代码实例)
oraracdb2vipFAILOVER(代码实例)。
db2_data_server_client客户端安装与配置
db2_data_server_client客户端安装与配置。一安装:
一些---DB2数据库操作注意
11W比以下采用方法:deletefromtablewhere……condition……说明:产生交易日志,删除大量数据时,有机会出现交易日志满,出现SQLCODE=-9642全部数据采用方法:truncatetable说明:不会产生交易日志,为最快方式,用于清理临时表等
DB2数据库使用存储过程详解
存储过程(StoredProcedure)是在大型数据库系统中,一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。
db2锁
db2锁