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. Linux之nc命令详解

    nc是一个强大的网络工具,可以通过yum安装 [root@LB2 ~]# which nc /usr/bin/which: no nc in (/usr/local/sbin:/usr/local/b ...

  2. Frame框架

    框架 frameset    框架集    如果使用框架集,当前页面不能有body    cols="300,*" :左右拆分,左边宽300,右边宽剩余    rows=" ...

  3. HTTP协议(二)

    一.请求的格式: (一).请求行 (1).请求方法 1.GET 2.POST 3.PUT 4.DELETE 5.TRACE 6.OPTIONS (2).请求路径 (3).所用的协议 (二).请求头信息 ...

  4. java随机数生成的原理

    一.在j2se里我们可以使用Math.random()方法来产生一个随机数,这个产生的随机数是0-1之间的一个double,我们可以把他乘以一定的数,比如说乘以100,他就是个100以内的随机,这个在 ...

  5. 性能调优案例分享:Mysql的cpu过高

    性能调优案例分享:Mysql的cpu过高   问题:一个系统,Mysql数据库,数据量变大之后.mysql的cpu占用率很高,一个测试端访问服务器时mysql的cpu占用率为15% ,6个测试端连服务 ...

  6. 锋利的jQuery(1)——DOM对象与jQuery对象的转换

    1.认识jQuery DOM对象:即文档对象模型 jQuery对象:通过jQuery包装DOM对象后产生的对象.这是jQuery对象所特有的,在jQuery对象中无法使用DOM对象的任何方法,同时DO ...

  7. 文本挖掘预处理之向量化与Hash Trick

    在文本挖掘的分词原理中,我们讲到了文本挖掘的预处理的关键一步:"分词",而在做了分词后,如果我们是做文本分类聚类,则后面关键的特征预处理步骤有向量化或向量化的特例Hash Tric ...

  8. OCR文字识别帮助录入文字信息

    OCR文字识别是指将图片.照片上的文字内容,直接转换为可编辑文本的过程.目前各行各业不断地应用文字识别产品,解决文字录入工作的烦恼,提高工作效率. OCR文字识别用在哪里? 一个做社区工作的朋友透露, ...

  9. 【PAT_Basic日记】1001. 害死人不偿命的(3n+1)猜想

    还是觉得代码放这靠谱,会定期的看看和优化代码 #include <stdio.h> #include <stdlib.h> int main() { int n; int co ...

  10. C++ count_if/erase/remove_if 用法详解

    每次使用这几个算法时都要去查CPP reference,为了能够加深印象,整理一下基本应用. cout/cout_if:  return the number of elements satisfyi ...