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;
  • 相关阅读:
    系统兼容性与软件兼容性
    SqlServer 笔记三 规则
    Sql Server 2008 与 Visual Studio 2008 安装说明
    Ms Sql Server
    Git系列教程三 配置与基本命令
    Git系列教程一 入门与简介
    Git系列教程二 基础介绍
    浏览器IE与非IE区分
    SqlServer 笔记二 获取汉字的拼音首字母
    时间戳与日期字符串的转换
  • 原文地址:https://www.cnblogs.com/rengke2002/p/6698211.html
Copyright © 2011-2022 走看看