DELIMITER $$

USE `qrsoft_dyj_db`$$

DROP PROCEDURE IF EXISTS `proc_withdraw_approve`$$

CREATE PROCEDURE `proc_withdraw_approve`(
IN p_apply_id INT,
IN p_handleuserid INT,
IN p_handlestate INT,
IN p_handletype INT,
IN p_bankreceipt VARCHAR(200),
IN p_apply_mark VARCHAR(2000),
IN p_cash_serial VARCHAR(200))

label_pro : BEGIN
DECLARE apply_userid INT;
DECLARE apply_balance DECIMAL;
DECLARE apply_code VARCHAR(200);
DECLARE before_avabalance DECIMAL;

START TRANSACTION;

-- 校验审核记录ID

IF p_apply_id = 0 THEN
SELECT -1002 AS RESULT_CODE;
ROLLBACK;
LEAVE label_pro ;
END IF;

-- 校验审核状态
IF p_handlestate <> 2 && p_handlestate <> 3 THEN
SELECT -1001 AS RESULT_CODE;
ROLLBACK;
LEAVE label_pro;
END IF;

-- 查询用户ID 提现订单号 提现金额
SELECT applyrecord_ref_userid ,
applyrecord_balance ,
applyrecord_code INTO apply_userid, apply_balance ,apply_code
FROM qr_apply_record
WHERE applyrecord_id = p_apply_id;

IF p_handlestate = 2 THEN -- 审核成功
-- 更新提现信息表
UPDATE qr_apply_record SET
applyrecord_handlestate = p_handlestate,
applyrecord_handletime = NOW(),
applyrecord_handleuserid = p_handleuserid,
applyrecord_handletype = p_handletype,
applyrecord_bankreceipt = p_bankreceipt ,
applyrecord_mark = p_apply_mark
WHERE applyrecord_id = p_apply_id;

-- 修改用户账号信息表中累计提现金额值
UPDATE qr_useraccount SET account_drawalsbalance = account_drawalsbalance + apply_balance
WHERE account_ref_userid = apply_userid;

ELSE -- 审核失败
-- 更新提现信息表
UPDATE qr_apply_record SET
applyrecord_handlestate = p_handlestate,
applyrecord_handletime = NOW(),
applyrecord_handleuserid = p_handleuserid,
applyrecord_mark = p_apply_mark
WHERE applyrecord_id = p_apply_id;

-- 返还提现金额到账户余额和添加退款记录
-- 1.查询用户变动前可用余额
SELECT account_avabalance INTO before_avabalance FROM qr_useraccount
WHERE account_ref_userid = apply_userid;

-- 2.更新账户可用余额
UPDATE qr_useraccount SET account_avabalance = before_avabalance + apply_balance
WHERE account_ref_userid = apply_userid;

-- 3.添加退款记录
-- 交易类型 (4:退款(旅游订单申请退款) 5:退款(提现申请被拒绝退款))
-- 交易方式 1:余额支付
INSERT INTO `qr_cash_record` (`cashrecord_serial`,
`cashrecord_ref_userid`,
`cashrecord_beforebalance`,
`cashrecord_balance`,
`cashrecord_afterbalance`,
`cashrecord_type`,
`cashrecord_time`,
cashrecord_ref_id,
cashrecord_model)
VALUES (
p_cash_serial,
apply_userid,
before_avabalance,
apply_balance,
(before_avabalance + apply_balance), 5, NOW(), p_apply_id, 1);

END IF;

COMMIT;

SELECT 1 AS RESULT_CODE;

END$$

DELIMITER ;

Mysql存储过程使用LEAVE实现MSSQL存储过程中return语法的更多相关文章

  1. MySQL 之 视图、触发器、存储过程、函数、事物与数据库锁

    浏览目录: 1.视图 2.触发器 3.存储过程 4.函数 5.事物 6.数据库锁 7.数据库备份 1.视图 视图:是一个虚拟表,其内容由查询定义.同真实的表一样,视图包含一系列带有名称的列和行数据 视 ...

  2. MYSQL之视图、触发器、存储过程、函数、事物、数据库锁和数据库备份

    一.视图 -- view 视图:是一个虚报表,其内容由查询定义.同真实的表一样,视图包含一系列带有名称的列和行数据. 视图有如下特点: 1.视图的列可以来自不同的表,是表的抽象和逻辑意义上建立的新关系 ...

  3. 数据库MySQL之 视图、触发器、存储过程、函数、事务、数据库锁、数据库备份、事件

    数据库MySQL之 视图.触发器.存储过程.函数.事务.数据库锁.数据库备份.事件 浏览目录 视图 触发器 存储过程 函数 事务 数据库锁 数据库备份 事件 一.视图 1.视图概念 视图是一个虚拟表, ...

  4. mysql第五篇 : MySQL 之 视图、触发器、存储过程、函数、事物与数据库锁

    第五篇 : MySQL 之 视图.触发器.存储过程.函数.事物与数据库锁 一.视图 视图是一个虚拟表(非真实存在的),其本质是‘根据SQL语句获取动态的数据集,并为其命名‘ ,用户使用时只需使用“名称 ...

  5. Mysql学习笔记(十)存储过程与函数 + 知识点补充(having与where的区别)

    学习内容:存储程序与函数...这一章学的我是云里雾里的... 1.存储过程...   Mysql存储过程是从mysql 5.0开始增加的一个新功能.存储过程的优点其实有很多,不过我觉得存储过程最重要的 ...

  6. MySQL与Oracle 差异比较之五存储过程&Function

    存储过程&Function 编号 类别 ORACLE MYSQL 注释 1 创建存储过程语句不同 create or replace procedure P_ADD_FAC(   id_fac ...

  7. Python全栈开发之MySQL(三)视图,存储过程触发器,函数,事务,索引

    一:视图 1:什么是视图? 视图是指存储在数据库中的查询的SQL语句,具有简单.安全.逻辑数据独立性的作用及视点集中简化操作定制数据安全性的优点.视图包含一系列带有名称的列和行数据.但是,视图并不在数 ...

  8. MySQL之 视图,触发器,存储过程,函数,事物,数据库锁,数据库备份

    1.视图 视图: 是一个虚拟表,其内容由查询定义: 视图有如下特点;  1. 视图的列可以来自不同的表,是表的抽象和逻辑意义上建立的新关系.  2. 视图是由基本表(实表)产生的表(虚表).  3. ...

  9. MySQL(十一)视图及存储过程

    一.视图 视图是虚拟的表,它只包含使用时动态检索数据的查询. 1.使用视图的好处 ①重用SQL语句: ②简化复杂的SQL操作(可以方便的重用它而不必知道它的基本查询细节): ③使用表的组成部分而不是整 ...

随机推荐

  1. CSS -- 练习之制作简单商品图

    只加深了印象,出错点:未给左侧人物大图宽高,致使第二行图层叠在其上: <!DOCTYPE html> <html lang="en"> <head&g ...

  2. Omi架构与React Fiber

    原文链接-https://github.com/AlloyTeam/omi/tree/master/tutorial 写在前面 Omi框架在架构设计的时候就决定把update的控制权交给了开发者,视灵 ...

  3. iOS--通过MOB平台实现第三方登录与分享

     适合刚开始接触第三方登录与分享的IOS小白!! 这两天看了一下有关IOS第三方登录与分享的一些知识,发现在QQ开放平台与微信开放平台实现这些功能很繁琐,不容易实现,在导师的推荐下,找到了这样一个平台 ...

  4. iOS面试必看经典试题分析

    > **不用临时变量怎么实现两个数据的交换?** 方式一:加减法的运算方式求解new_b = a - b + b = a;new_a = a + b - a = b;一个简单的运算方式,最重要的 ...

  5. POPTEST老李谈钩子

    poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家咨询qq:908821478,咨询电话010-845052 ...

  6. Spring基础学习(五)—事务管理

    一.事务基本认识 1.事务的概述      为了保证数据库中数据的一致性,数据的操作应当是离散的成组的逻辑单元.当它全部完成时,数据的一致性可以保持,而当这个单元中的一部分操作失败,整个事务应当全部视 ...

  7. JavaScript Array 技巧

    filter():返回该函数会返回true的项组成的数组 ,,,,]; var result = num.filter(function(item,index,array){ ); }) consol ...

  8. 在IntelliJ IDEA中添加repository模板

    可以用于快速新建一个repository类,减少开发时间 在IntelliJ IDEA settings设置中(ctrl+alt+s)--Editor--File and Code Templates ...

  9. Ubuntu16.04安装NVIDIA驱动时的一些坑与解决方案

    这几天在新购置的笔记本上部署工作环境,在安装NVIDIA驱动的时候遇到了不少坑,重装了很多次,在Ubuntu论坛以及其他资料源看了很多大牛的分析,最终终于解决了一个又一个问题,过程比较艰辛,所以决定写 ...

  10. jquery如何设置html众标签中的值

    $("img").attr("src",some_url);//jquery设置img标签中的src值 $("#user").val(&qu ...