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;
  • 相关阅读:
    DOM(九)使用DOM设置文本框
    DOM(八)使用DOM控制表单
    DOM(七)使用DOM控制表格
    Javascript制作伸缩的二级菜单
    Javascript屏蔽鼠标的右键的两种方法。
    DOM(六)事件类型
    DOM(五)事件对象
    DOM(四)事件流
    DOM(三)使用DOM + Css
    Javascript一个在页面内追加元素的小例子
  • 原文地址:https://www.cnblogs.com/rengke2002/p/6698211.html
Copyright © 2011-2022 走看看