Create or Replace procedureProc_insertuseramount (userid Number, Msgtype Number, Amountvalue Number, Financetype Number, Createuserid Number, MsgId nvarchar2, remark nvarchar2, Addtime date) isv_cnt Number; V_beforevalue Number; V_aftervalue Number; V_userid Number; V_msgtype Number;beginV_userid:=userid; V_msgtype:=Msgtype; Select Count(*) intoV_cnt fromDualwhere exists(Select 1 fromUser_amountinfo TwhereT.userid=V_userid andT.msgtype=V_msgtype); ifV_cnt>0 Then UpdateUser_amountinfoSetAmount=Amount+AmountvaluewhereUser_amountinfo.userid=V_userid andUser_amountinfo.msgtype=V_msgtype; Else Insert intoUser_amountinfo (Userid,msgtype,amount)Values(Userid,msgtype,amountvalue); End if; SelectAmount-Amountvalue,amount intoV_beforevalue,v_aftervalue fromUser_amountinfo TwhereT.userid=V_userid andT.msgtype=V_msgtype; Insert intoUser_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 intoUser_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--type is recharge UpdateUser_amountinfoSetRechargeamount=Rechargeamount+AmountvaluewhereUser_amountinfo.userid=V_userid andUser_amountinfo.msgtype=V_msgtype; End if; Commit; exception--An exception occurs, a transaction is rolled back, an exception is thrown whenOthers Then rollback; raise;End;
Oracle's stored procedures with rollback