1. 首页 > 知识

Mysql的存储过程示例-MySQL

Mysql的存储过程示例-MySQL

存储过程文件名:award_inviter。输出参数:OUT msg varchar(5)BEGIN
DECLARE v_inviter_userid bigint; /** 定义相关变量值 **/
DECLARE v_inviter_inviterid bigint;
DECLARE v_inviter_user_name varchar(20);
DECLARE v_inviter_inviter_name varchar(20);
DECLARE v_account_total_user DOUBLE DEFAULT 0;
DECLARE v_account_usemoney_user DOUBLE DEFAULT 0;
DECLARE v_account_nousemoney_user DOUBLE DEFAULT 0;
DECLARE v_account_collection_user DOUBLE DEFAULT 0;
DECLARE v_account_total_inviter DOUBLE DEFAULT 0;
DECLARE v_account_usemoney_inviter DOUBLE DEFAULT 0;
DECLARE v_account_nousemoney_inviter DOUBLE DEFAULT 0;
DECLARE v_account_collection_inviter DOUBLE DEFAULT 0;
DECLARE v_user_gain_point DOUBLE DEFAULT 0;
DECLARE v_user_accoumt_point DOUBLE DEFAULT 0;
DECLARE v_inviter_gain_point DOUBLE DEFAULT 0;
DECLARE v_inviter_accoumt_point DOUBLE DEFAULT 0;
DECLARE done int DEFAULT 0;
DECLARE t_error int DEFAULT 0;
/** 邀请记录 **/
DECLARE c_inviter CURSOR FOR /** 定义游标变量,并将查询结果存放入游标变量中 **/
SELECT a。
id, a。inviterid from rocky_member a left join (select sum(money) sum, user_id from rocky_rechargerecord where status = 1 group by user_id having sum >= 1000) b on b。
user_id = a。id where b。user_id is not null and a。inviterid != 0 and a。
awardmoney = 0;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1; /** 定义查询状态 **/
START TRANSACTION; /** 开始事务 **/
OPEN c_inviter; /** 打开游标变量 **/
REPEAT /** 循环遍历开始 **/
FETCH c_inviter INTO v_inviter_userid,v_inviter_inviterid; /** 依次遍历游标变量中的记录,并将相应的值赋给定义的变量 **/
IF NOT done THEN /** 判断查询状态 **/
/** 被邀请人账户记录 **/
SELECT TOTAL,USE_MONEY,NO_USE_MONEY,COLLECTION INTO
v_account_total_user,v_account_usemoney_user,v_account_nousemoney_user,v_account_collection_user
FROM rocky_account WHERE USER_ID = v_inviter_userid FOR UPDATE; /** into 将查询出来的字段值赋给对应的变量,for update 锁定该记录 **/
SET v_account_total_user = v_account_total_user + 10;
SET v_account_usemoney_user = v_account_usemoney_user + 10;
/** 奖励10元 **/
UPDATE rocky_account SET TOTAL = v_account_total_user, USE_MONEY = v_account_usemoney_user WHERE USER_ID = v_inviter_userid;
/** 生成资金明细记录 **/
SELECT USERNAME INTO v_inviter_user_name FROM rocky_member WHERE ID = v_inviter_userid;
INSERT INTO rocky_accountlog (USER_ID,TYPE,TOTAL,MONEY,USE_MONEY,NO_USE_MONEY,COLLECTION,TO_USER,REMARK,ADDTIME)
VALUES (v_inviter_userid, 'web_recharge',v_account_total_user,
10,v_account_usemoney_user,v_account_nousemoney_user,v_account_collection_user,v_inviter_userid,
'首充1000奖励费用',UNIX_TIMESTAMP());
/** 邀请人账户记录 **/
SELECT TOTAL,USE_MONEY,NO_USE_MONEY,COLLECTION INTO
v_account_total_inviter,v_account_usemoney_inviter,v_account_nousemoney_inviter,v_account_collection_inviter
FROM rocky_account WHERE USER_ID = v_inviter_inviterid FOR UPDATE;
SET v_account_total_inviter = v_account_total_inviter + 10;
SET v_account_usemoney_inviter = v_account_usemoney_inviter + 10;
/** 奖励10元 **/
UPDATE rocky_account SET TOTAL = v_account_total_inviter, USE_MONEY = v_account_usemoney_inviter WHERE USER_ID = v_inviter_inviterid;
/** 生成资金明细记录 **/
SELECT USERNAME INTO v_inviter_inviter_name FROM rocky_member WHERE ID = v_inviter_inviterid;
INSERT INTO rocky_accountlog (USER_ID,TYPE,TOTAL,MONEY,USE_MONEY,NO_USE_MONEY,COLLECTION,TO_USER,REMARK,ADDTIME)
VALUES (v_inviter_inviterid, 'web_recharge',v_account_total_inviter,
10,v_account_usemoney_inviter,v_account_nousemoney_inviter,v_account_collection_inviter,v_inviter_inviterid,
CONCAT('您推荐的用户:',v_inviter_inviter_name,',首充1000,奖励10元已入账'),UNIX_TIMESTAMP());
/** 被邀请人记录**/
SELECT GAINACCUMULATEPOINTS,ACCUMULATEPOINTS INTO v_user_gain_point,v_user_accoumt_point FROM rocky_member WHERE ID = v_inviter_userid FOR UPDATE;
/** 奖励10个积分 **/
UPDATE rocky_member SET GAINACCUMULATEPOINTS = v_user_gain_point + 10, ACCUMULATEPOINTS = v_user_accoumt_point + 10, AWARDMONEY = 10 WHERE ID = v_inviter_userid;
/** 新增积分记录 **/
INSERT INTO ROCKY_MEMBER_ACCUMULATE_POINTS(MEMBERID,TYPE,ACCUMULATEPOINTS,GAINACCUMULATEPOINTS,GAINDATE,POINTSMAGNIFICATION) VALUES(v_inviter_userid,10,10,10, SUBSTR(NOW() FROM 1 FOR 19),1);
/** 邀请人记录**/
SELECT GAINACCUMULATEPOINTS,ACCUMULATEPOINTS INTO v_inviter_gain_point,v_inviter_accoumt_point FROM rocky_member WHERE ID = v_inviter_inviterid FOR UPDATE;
/** 奖励10个积分 **/
UPDATE rocky_member SET GAINACCUMULATEPOINTS = v_inviter_gain_point + 10, ACCUMULATEPOINTS = v_inviter_accoumt_point + 10 WHERE ID = v_inviter_inviterid;
/** 新增积分记录 **/
INSERT INTO ROCKY_MEMBER_ACCUMULATE_POINTS(MEMBERID,TYPE,ACCUMULATEPOINTS,GAINACCUMULATEPOINTS,GAINDATE,POINTSMAGNIFICATION) VALUES(v_inviter_inviterid,10,10,10, SUBSTR(NOW() FROM 1 FOR 19),1);
END IF;
UNTIL done
END REPEAT; /** 循环遍历结束 **/
CLOSE c_inviter;
IF t_error=1 THEN
SET msg = '00000';
ROLLBACK; -- 事务回滚
ELSE
SET msg = '00001';
COMMIT; -- 事务提交
END IF;
END。

相关推荐

  • 深圳无抵押贷款办理需要什么?

    深圳无抵押贷款办理需要什么?

    办理,贷款,银行,申请办理,查询,想在深圳申请无抵押贷款,请问需要什么条件?在深圳申请无抵押贷款需要了解该业务的流程:1、准备好贷款材料  在申请办理个人无抵押贷款时,你需要提前准备好贷款材料,据了解,个人无抵押贷款的申请材料主要包括二代身份证以及复印件、近三至六个月的银行流水单、居住证明。2、提前查询征信报告  由于个人无抵押贷款不需要借款人提供抵押物,因此对于借款人的个人资质很看重,其中最重要的就是个人信用记录。银行一般会看近两年的信...

  • 个人无抵押贷款有哪些方式,以及需要注意的事情?

    个人无抵押贷款有哪些方式,以及需要注意的事情?

    银行,贷款,工资,有哪些,金额,想申请个人无抵押贷款,请问有哪几种方式可以办理,同时需要注意什么事项呢?个人无抵押贷款的方式主要有以下五种1、工资卡贷款有些银行可以允许个人用工资卡贷款,也就是说如果你的工资是通过该银行发放到工资卡的,那么你就可以在该银行申请个人无抵押贷款,当然这对你的工作年限以及工资金额都是有一定的要求的。2、银行流水贷款银行流水贷款并不要求提供指定银行的银行流水,可以是任何银行的,它主要是要求银行流水需要满足一定期限,...

  • 请,西安本市户口在西安购买二手房,按揭贷款如何申请?

    请,西安本市户口在西安购买二手房,按揭贷款如何申请?

    贷款,按揭,购买,借款人,方案,想在西安申请按揭贷款买房,但是有些地方不太懂,请问可以详细解答一下吗?个人购买二手房申请按揭贷款的流程如下:1、 确定按揭服务公司和贷款方案。借款人在办理贷款前首先需要与中介确定按揭服务公司,并向按揭服务公司提出贷款咨询,确定贷款方案。2、 查询公积金(若个人需公积金贷款)。与卖方确定购房意向后,借款人提供公积金帐号,由按揭服务公司进行公积金查询,确定可贷款的金额和贷款年限。3、签定房屋买卖合同。借款人与卖...

  • 二手房可以申请公积金按揭贷款吗?

    二手房可以申请公积金按揭贷款吗?

    个月,账户,条件,连续,按月,我目前只听过一手房申请住房公积金贷款的,还没有听说二手房申请的,请问有资格吗?需要什么条件呢?二手房一样可以申请住房公积金贷款,但是他审批的时间相对来说可能要长一些。申请条件如下:1. 借款申请人须建立住房公积金账户12个月(含)以上,同时足额正常缴存住房公积金12个月(含)以上(正常缴存包括按月连续缴存、预缴、补缴住房公积金),且申请贷款时处于缴存状态。2. 对于经中心审批同意,处于缓缴状态的单位,其职工在...

  • 如何申请公积金按揭贷款?

    如何申请公积金按揭贷款?

    条件,证明,缴纳,收入,账户,你好,我已经在我工作的地方缴纳公积金五年了,想申请住房公积金贷款,要如何办理呢?你一直在缴纳住房公积金,说明你满足公积金贷款的条件,此你需要提供以下材料:身份证原件(已结婚的须提供配偶身份证);户口薄原件;结婚证(或者未婚证);收入证明(大于月供款的2.5倍);供款存折复印件;公积金卡(有公积金的存款账户也可以);存折流水账单6个月以上(主要看你平时资金款项的进出,要大额款项)。...

  • 工行房贷晚还了几天对个人征信有无影响

    工行房贷晚还了几天对个人征信有无影响

    房贷,几天,银行,工行,账户,我之前在工行申请的购房贷款,但是这次还款的时候不小心晚还了几天,这会不会对我的征信有影响?一般来说房贷晚还了几天,会有一次逾期记录,若不是连续逾期就影响不大。为避免逾期建议下次提前存款进入还款账户,或联系银行进行主动还款,避免影响。不过也不用太过于担心,因为有的银行在还款时间的规定上,有一定的缓冲期,那如果借款人在缓冲期内将贷款偿还后,一般是没有太大影响的。所以你可以询问一下工行的工作人员是否有缓冲期,如果有...

  • 中国银行信用贷款如何申请?

    中国银行信用贷款如何申请?

    贷款,循环,信用,额度,身份,我是中国银行的资深老客户,听说中行推出了信用贷款,请问这一贷款要如何才能申请到呢?我有充足的收入。你说的是中信银行的个人信用循环贷款吧。他是中国银行根据个人客户的信用状况,为其提供的一种短期融资便利产品,借款人在中行核定的额度金额内可循环周转使用贷款。你需要提供以下申请材料:1、《个人信用循环贷款额度申请表》;2、有效身份证明材料;3、职业证明材料和收入证明材料;4、最高学历或学位证书、专业技术资格证书、职业...

  • 公积金购房贷款怎么申请呢?需要的要求和条件有哪些?

    公积金购房贷款怎么申请呢?需要的要求和条件有哪些?

    条件,偿还,信用,能力,账户,在公司缴纳了住房公积金,现在想用来买房,请问怎么申请住房公积金贷款?想要申请住房公积金贷款,就要了解申请公积金贷款的条件,下面为你介绍一下该业务的条件:1、具有合法有效身份及完全民事行为能力;2、具有稳定的职业和收入;3、信用状况良好,有偿还贷款本息的能力;4、 借款申请人须建立住房公积金账户12个月(含)以上,同时,足额正常缴存住房公积金12个月(含)以上(正常缴存包括按月连续缴存、预缴、补缴住房公积金),...

  • 生源地贷款如何还款?

    生源地贷款如何还款?

    贷款,账户,登录,服务,支付宝,具体怎么操作?你好,具体流程如下:首先,登陆国家开发银行,生源地助学贷款网站,查询自己的欠款。每年除11月外的每月10日前,学生联系县(市、区)资助中心或登录国家开发银行学生在线服务系统,提出提前还款申请;确定之后将还款资金打入还款账户或支付宝账户;国开行将在当月20日前,通知银行或支付宝进行扣款;次月1日借款学生科登录学生在线服务系统查询还款结果,若还款未成功,可在下月继续提交提前还款申请。...

  • 公积金账户余额能不能做购房首付?

    公积金账户余额能不能做购房首付?

    余额,账户,能不,办理,福利,我已经连续交了四年的住房公积金了,现在想买房,请问能不能把账户余额提出来付我房子的首付?有哪些要求呢?不可以这样做。大多数人都认为既然公积金是职工购房福利政策,那么理所当然的可以用来支付购房首付,其实事实并非如此,因为公积金是先使用后才可以提取的,即购房人只有在购房后提供购房相关的证明材料才可以办理提取手续。也就是,你可以用你住房公积金的余额来还贷款,但是不能付首付。...

  • 工行网贷通怎么样,如何申请?

    工行网贷通怎么样,如何申请?

    贷款,循环,工行,中国工商银行,支持,听说过中国工商银行的网贷通,感觉很简单靠谱,请问这个要怎么申请?有什么条件呢?谢谢解答!中国工商银行网贷通即个人网络贷款,是指客户通过柜面或网上银行、手机银行等互联网渠道进行贷款申请、提款、还款的个人循环贷款。他的贷款用途广泛,手续简便快捷; 抵(质)押物范围广泛;可以随时随地满足资金需求;且贷款资金循环使用,支持随借随还。他的申请条件为:1. 具有中国国籍的公民(不含港、澳、台居民),具有完全民事行...

  • 天津银行个人贷款有什么特点?

    天津银行个人贷款有什么特点?

    贷款,银行,账户,客户,按月,你好,我最近看到了天津银行的个人消费贷款,请问他有什么特点呢?适合什么样的人办理呢?谢谢解答!天津银行有一种个人消费贷款存抵贷业务,他是为个人消费贷款业务的客户提供的,将贷款还款账户与贷款账户相关联的综合金融服务。是我行在向客户支付法定存款利息的基础上,根据规则计算还款帐户内存款抵扣贷款后借款人减少的贷款利息支出。他日日累计、按月结算、可减少更多贷款利息支出;多存多抵贷,加速偿还贷款本金,降低还贷压力;多存多...