Oracle MERGE 用法

 

CREATE OR REPLACE PROCEDURE P_C(X OUT VARCHAR2,Y OUT VARCHAR2, S IN VARCHAR2) AS

  P_STR VARCHAR2(100) := 'ABCDEF';
  STR VARCHAR2(50);
  STR_SQL VARCHAR2(100);
  P_EMAIL_NAME VARCHAR2(50);
  P_EMAIL VARCHAR2(50);

BEGIN

  MERGE INTO T_INVOICE I
  USING (SELECT M.VIP_ZONE_CODE,
                M.VIP_CODE,
                M.INVOICE_YEAR_MONTH,
                M.STANDARD_MONEY_AMT,
                M.ZONE_CODE
           FROM T_MONTHLY_INVOICE M
          WHERE M.VIP_CODE = '123456') V
  ON (I.DEPT_CODE = V.ZONE_CODE)
  WHEN MATCHED THEN
    UPDATE
       SET/* I.DEPT_CODE          = V.ZONE_CODE,*/--此列不能更新,更新会报错--使用merge时要注意:作为查询条件的列(在"condition"中)是不可以被更新的(在merge_update_clause中不可更新)。
           I.CUSTOMER_CODE      = V.VIP_ZONE_CODE,
           I.STANDARD_MONEY_AMT = V.STANDARD_MONEY_AMT


  WHEN NOT MATCHED THEN

    INSERT
      (STANDARD_MONEY_AMT, CUSTOMER_CODE)
    VALUES
      (V.STANDARD_MONEY_AMT, V.VIP_CODE);

   SELECT SUBSTR(P_STR,1,4) INTO STR FROM DUAL;
   DBMS_OUTPUT.put_line(STR);
   
   STR_SQL := 'SELECT T.EMAIL_TEL,T.EMAIL_MAIL  FROM TT_EMAIL T WHERE T.EMAIL_USER = :SS';
   EXECUTE IMMEDIATE STR_SQL  INTO P_EMAIL_NAME ,P_EMAIL
    USING S;  
   DBMS_OUTPUT.put_line(P_EMAIL_NAME||P_EMAIL);
    
   EXCEPTION
     WHEN OTHERS THEN 
       DBMS_OUTPUT.put_line(SQLERRM);
END P_C;

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值