zoukankan      html  css  js  c++  java
  • Oracle 带回滚的存储过程

    create or replace procedure PROC_insertUserAmount
    (
         userid  number,
         msgtype number,
         amountvalue number,
         financeType  number,
         createUserid number,
         msgId nvarchar2,
         remark nvarchar2,
         addtime date
    )
    is
         v_cnt number;
         v_beforevalue number;
         v_aftervalue number;
         v_userid number;
         v_msgtype number;
    begin
      v_userid:=userid;
       v_msgtype:=msgtype;
    
    
       select count(*)into v_cnt from dual
           where exists (select 1 from user_amountinfo t where t.userid=v_userid and t.msgtype=v_msgtype);
       if  v_cnt>0 then
           update user_amountinfo set amount=amount+amountvalue  where user_amountinfo.userid=v_userid and user_amountinfo.msgtype=v_msgtype;
       else
           insert into user_amountinfo (userid,msgtype,amount)values(userid,msgtype,amountvalue);
       end if;
    
       select amount-amountvalue,amount into v_beforevalue,v_aftervalue from user_amountinfo t where t.userid=v_userid and t.msgtype=v_msgtype;
    
       insert into user_amountinfodetails(userid,msgtype,beforevalue,amountvalue,aftervalue,financetype,createUserid,msgid,remark,addtime)
           values(userid,msgtype,v_beforevalue,amountvalue,v_aftervalue,financetype,createUserid,msgid,remark,addtime);
    
       if(financetype<>2)then
           insert into user_amountinforecharges(id,userid,msgtype,beforevalue,amountvalue,aftervalue,financetype,createUserid,msgid,remark,addtime)
           values(seq_user_amountinfodetails_id.currval,userid,msgtype,v_beforevalue,amountvalue,v_aftervalue,financetype,createUserid,msgid,remark,addtime);
       end if;
    
       if(financetype=1) then--类型为充值
            update user_amountinfo set rechargeamount=rechargeamount+amountvalue  where user_amountinfo.userid=v_userid and user_amountinfo.msgtype=v_msgtype;
       end if;
       commit;
    exception--出现异常,回滚事务,抛出异常
      when others then
        rollback;
        raise;
    end;
  • 相关阅读:
    李宏毅 Keras手写数字集识别(优化篇)
    李宏毅 Keras2.0演示
    李宏毅 线性回归预测PM2.5
    李宏毅 Gradient Descent Demo 代码讲解
    Pandas导入导出&pickle文件模块
    python(29)Tinker+BeautifulSoup+Request抓取美女壁纸
    golang(11) 反射用法详解
    golang(10)interface应用和复习
    golang(09) golang 接口内部实现
    golang(08)接口介绍
  • 原文地址:https://www.cnblogs.com/rengke2002/p/6698211.html
Copyright © 2011-2022 走看看