zoukankan      html  css  js  c++  java
  • db2_merge

    DB2 MERGE INTO语句的使用
     
    DB2中的Merge语句可以将一个表中的数据合并到另一个表中,在合并的同时可以根据条件进行插入、删除、更新等操作,功能非常强大。
     
    语法如下:www.2cto.com  
    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)  
    ELSE IGNORE;
  • 相关阅读:
    02-04UML类图之--关联关系(Association)
    02-03UML类图之--实现关系(Implementation)
    02-02UML类图之--泛化关系(generalization)
    02-01UML类图之--依赖关系(Dependence)
    01-07.合成复用原则(Composite Reuse Principle)
    01-06.迪米特法则(Demeter Principle)
    算法 - 二叉搜索树的第k个结点
    算法
    InteliJ IDEA社区版 两款插件变身旗舰版
    intelliJ idea自定义代码折叠
  • 原文地址:https://www.cnblogs.com/caroline4lc/p/4016181.html
Copyright © 2011-2022 走看看