ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 【DB2】MERGE语句的用法

【DB2】MERGE语句的用法

原创 Linux操作系统 作者:肖_Sean 时间:2012-06-04 23:05:13 0 删除 编辑

1、MERGE语句:将有条件更新、插入或者删除操作组合起来
    比如有总公司员工表EMPLOYEE,子公司员工表MY_EMP
    子公司可以使用MERGE通过维护MY_EMP来处理本地职员的更新跟总公司合并
   MERGE INTO EMPLOYEE AS E    --(1)
     USING (SELECT EMPNO,FIRSTNAME,MIDINIT,LASTNAME,WORKDEPT,
              PHOENO,HIREDATE,JOB,EDLEVEL,SEX,BIRTHDATE,SALARY
            FROM MY_EMP) AS M  --(2)
    
ON E.EMPNO = M.EMPNO      --(3)
     WHEN MATCHED THEN UPDATE SET (SALARY) = (M.SALARY) --(4)
     WHEN NOT MATCHED THEN     --(5)
       INSERT (EMPNO,FIRSTNAME,MIDINIT,LASTNAME,WORKDEPT,
              PHOENO,HIREDATE,JOB,EDLEVEL,SEX,BIRTHDATE,SALARY)
       VALUES (M.EMPNO,M.FIRSTNAME,M.MIDINIT,M.LASTNAME,
M.WORKDEPT,
             M.PHOENO,M.HIREDATE,M.JOB,M.EDLEVEL,M.SEX,
             M.BIRTHDATE,M.SALARY)
;

  (1) 目标表

  (2) 源表

  (3) 匹配条件

  (4) 匹配成功的操作

  (5) 匹配失败的操作

2、使用注意事项(借鉴)

a、SELECT IDENTITY_VAL_LOCAL() FROM SYSIBM.DUAL
函数IDENTITY_VAL_LOCAL对于MERGE语句中的INSERT,不能像普通的INSERT语句那样返回最后一次插入数据库中的数据的ID值,对于这种情况,只能使用普通的INSERT语句。

b、WHEN MATCHED THEN
MATCHED的情况下,只有UPDATE和DELETE语句可以使用,不能使用INSERT语句。   WHEN NOTE MATCHED THEN
NOTE MATCHED的情况下,不能使用UPDATE和DELETE语句,只可以使用INSERT语句。  (有数据就更新或删除,无数据就插入)

c、WHEN [NOT] MATCHED AND ( ... AND ... OR ... ) THEN
除了使用默认的MATCHED/NOT MATCHED以外,还可以指定额外的判断条件,但与MATCHED并列的条件只能用AND,而AND里面可以使用AND和OR

d、注意NULL与任何值比较的结果既不是TRUE也不是FALSE,结果永远都是NULL。

e、例外的数据
用MERGE语句INSERT的数据不能被MERGE的分支语句所操作

f、UPDATE的赋值语法
UPDATE的有两种可用的赋值语法,一种是“column = ?[, column = ?] ...”,另一种是“(column, column ...) = (value, value ...)”。

3、几个例子(借鉴)

MERGE INTO project px
USING (SELECT 1 AS VAL FROM SYSIBM.DUAL WHERE 1 = 2) py
      ON VAL = 1
WHEN MATHED THEN
              SET MESSAGE_TEXT = 'love me';
WHEN NOT MATCHED THEN
              SET MESSAGE_TEXT = 'love you';
结果:触发警告,不走matched 也不走 not matched

MERGE INTO project px
USING (SELECT 1 AS VAL FROM SYSIBM.DUAL WHERE 1 = 1) py
      ON VAL = 1
WHEN MATHED THEN
              SET MESSAGE_TEXT = 'love me';
WHEN NOT MATCHED THEN
              SET MESSAGE_TEXT = 'love you';
结果:走matched                                                                                                        MERGE INTO project px
USING (SELECT 1 AS VAL FROM SYSIBM.DUAL WHERE 1 = 1) py
      ON VAL = 2                                                                                                             WHEN MATHED THEN
              SET MESSAGE_TEXT = 'love me';
WHEN NOT MATCHED THEN
              SET MESSAGE_TEXT = 'love you';
结果:走 not matched

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26952448/viewspace-731895/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2012-05-07

  • 博文量
    9
  • 访问量
    32073