• oracle--merge


    MERGE语句是Oracle9i新增的语法,用来合并UPDATE和INSERT语句。

    MERGE INTO [your table-name] [rename your table here]
    USING ([write your query here])[rename your query-sql or using just like a table]
    ON ([conditional expression here] AND [...]...)
    WHEN MATHED THEN [here you can execute some update sql or something else ]
    WHEN NOT MATHED THEN [execute something else here ! ]

    oracle10g后对merge做了一些改动:

    1、UPDATE或INSERT子句是可选的

    when mathed和when not mathed不必都写上,可以只用when mathed,也可以只用when not mathed

    2、UPDATE和INSERT子句可以加WHERE子句
    3、在ON条件中使用常量过滤谓词来insert所有的行到目标表中,不需要连接源表和目标表

    例如:merge into products p using (select * from newproducts) np on (1=0).......
    4、UPDATE子句后面可以跟DELETE子句来去除一些不需要的行

    给一个例子:

    <update id="updateOrderInfo" parameterClass="com.edai.pojo.EntityForBuyEPlan">
    MERGE INTO t_cus_order O USING dual on (user_id= #userId# and PRODUCT_TYPE=#productType#) WHEN MATCHED THEN update set INVEST_AMOUNT = INVEST_AMOUNT+#amount#, LAST_UPDATE_DATE = systimestamp, UPDATE_PER = 'HOUPURCHASE', ASSIGNMENT_STATUS ='2', CASH_VALUE = CASH_VALUE+#amount#, FROZEN_IDLE_FUNDS=FROZEN_IDLE_FUNDS+#amount#, ORDER_VALUE = ORDER_VALUE + #amount# WHEN NOT MATCHED THEN insert ( O.ORDER_ID, O.ACCT_ID, O.USER_ID, O.CREDIT_ACCT_ID, O.CASH_VALUE, O.INVEST_DATE, O.LOCK_TIME, O.INVEST_AMOUNT, O.FROZEN_IDLE_FUNDS, O.FROZEN_PRE_MATCH_FUNDS, O.FROZEN_HAS_MATCH_FUNDS, O.PRODUCT_TYPE, O.ORDER_STATE, O.CREATE_DATE, O.CREATE_PER, O.CYCLE_MATCH_TYPE, O.BUY_MEDIA, O.ASSIGNMENT_STATUS, O.ORDER_VALUE ) values( SEQ_ORDER_NUM.NEXTVAL, (select acct_id from t_cus_acct where user_id = #userId# ), #userId#, (select credit_acct_id from t_cus_acct_credit where user_id = #userId# and product_type = #productType#), #amount#, systimestamp, (select fp.base_lock_period from finance_plan@db_link_bl fp where fp.id=#productType#), #amount#, #amount#, '0', '0', #productType#, #orderState#, systimestamp, 'HOUPURCHASE', #cycleMatchType#, #buyMedia#, '2', #amount# )
    </update>
  • 相关阅读:
    Zebra命令模式分析(一)  分析
    sublime text2
    开源路由软件zebra的命令存储原理及使用方法
    开源路由软件zebra介绍和和在Linux环境下的安装
    jQuery删除节点
    如何成为一名软件架构师
    jQuery中的DOM操作
    编写自己的Shell解释器
    Notepad++集成VC2010环境
    ffmpeg使用语法
  • 原文地址:https://www.cnblogs.com/yhzh/p/5386945.html
Copyright © 2020-2023  润新知