lxpeng163
作者lxpeng163·2013-07-12 19:21
项目经理·哈尔滨银行

DB2 -MERGE语句的用法

字数 4566阅读 1946评论 0赞 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


如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

0

添加新评论0 条评论

Ctrl+Enter 发表

作者其他文章

相关文章

相关问题

相关资料

X社区推广