Mysql存储过程使用LEAVE实现MSSQL存储过程中return语法
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语法的更多相关文章
- MySQL 之 视图、触发器、存储过程、函数、事物与数据库锁
浏览目录: 1.视图 2.触发器 3.存储过程 4.函数 5.事物 6.数据库锁 7.数据库备份 1.视图 视图:是一个虚拟表,其内容由查询定义.同真实的表一样,视图包含一系列带有名称的列和行数据 视 ...
- MYSQL之视图、触发器、存储过程、函数、事物、数据库锁和数据库备份
一.视图 -- view 视图:是一个虚报表,其内容由查询定义.同真实的表一样,视图包含一系列带有名称的列和行数据. 视图有如下特点: 1.视图的列可以来自不同的表,是表的抽象和逻辑意义上建立的新关系 ...
- 数据库MySQL之 视图、触发器、存储过程、函数、事务、数据库锁、数据库备份、事件
数据库MySQL之 视图.触发器.存储过程.函数.事务.数据库锁.数据库备份.事件 浏览目录 视图 触发器 存储过程 函数 事务 数据库锁 数据库备份 事件 一.视图 1.视图概念 视图是一个虚拟表, ...
- mysql第五篇 : MySQL 之 视图、触发器、存储过程、函数、事物与数据库锁
第五篇 : MySQL 之 视图.触发器.存储过程.函数.事物与数据库锁 一.视图 视图是一个虚拟表(非真实存在的),其本质是‘根据SQL语句获取动态的数据集,并为其命名‘ ,用户使用时只需使用“名称 ...
- Mysql学习笔记(十)存储过程与函数 + 知识点补充(having与where的区别)
学习内容:存储程序与函数...这一章学的我是云里雾里的... 1.存储过程... Mysql存储过程是从mysql 5.0开始增加的一个新功能.存储过程的优点其实有很多,不过我觉得存储过程最重要的 ...
- MySQL与Oracle 差异比较之五存储过程&Function
存储过程&Function 编号 类别 ORACLE MYSQL 注释 1 创建存储过程语句不同 create or replace procedure P_ADD_FAC( id_fac ...
- Python全栈开发之MySQL(三)视图,存储过程触发器,函数,事务,索引
一:视图 1:什么是视图? 视图是指存储在数据库中的查询的SQL语句,具有简单.安全.逻辑数据独立性的作用及视点集中简化操作定制数据安全性的优点.视图包含一系列带有名称的列和行数据.但是,视图并不在数 ...
- MySQL之 视图,触发器,存储过程,函数,事物,数据库锁,数据库备份
1.视图 视图: 是一个虚拟表,其内容由查询定义: 视图有如下特点; 1. 视图的列可以来自不同的表,是表的抽象和逻辑意义上建立的新关系. 2. 视图是由基本表(实表)产生的表(虚表). 3. ...
- MySQL(十一)视图及存储过程
一.视图 视图是虚拟的表,它只包含使用时动态检索数据的查询. 1.使用视图的好处 ①重用SQL语句: ②简化复杂的SQL操作(可以方便的重用它而不必知道它的基本查询细节): ③使用表的组成部分而不是整 ...
随机推荐
- python try/except/finally
稍微总结一下,否则总是忘. [python] view plaincopyprint? x = 'abc' def fetcher(obj, index): return obj[index] fet ...
- 【C++】浅谈三大特性之一继承(二)
三,继承方式&访问限定符 派生类可以继承基类中除了构造函数和析构函数之外的所有成员,但是这些成员的访问属性是由继承方式决定的. 不同的继承方式下基类成员在派生类中的访问属性: 举例说明: (1 ...
- Cassandra存储time series类型数据时的内部数据结构?
因为我一直想用Cassandra来存储我们的数字电表中的数据,按照之前的文章(getting-started-time-series-data-modeling)的介绍,Cassandra真的 ...
- 读书笔记 effective c++ Item 42 理解typename的两种意义
1. class和typename意义相同的例子 问题:在下面的模板声明中class和typename的区别是什么? template<class T> class Widget; // ...
- 【Hexo】Hexo+Github构建个人博客 (三):添加皮肤主题
一.选择主题 选择你自己喜欢的主题 参考: 1.Hexo官网主题 2.知乎:有哪些好看的 Hexo 主题? 二.配置主题 1.我选择了hexo-theme-yilia这个主题,简洁大方,功能齐全: 这 ...
- Python之路-计算机基础
一·计算机的组成 一套完整的计算机系统分为:计算机硬件,操作系统,软件. 硬件系统:运算器,控制器和存储器 ,输入设备,输出设备. 1.运算器:负责算数运算和逻辑运算,与控制器一起组成CPU. 2 ...
- 性能测试分享:Jmeter多机协作原理
性能测试分享:Jmeter多机协作原理 poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家咨询qq:90 ...
- “this kernel requires an x86-64 CPU, but only detects an i686 CPU, unable to boot” 问题解决
1. 问题描述: 在Virtual Box上安装 Ubuntu 系统时出现错误(如题),VIrtual Box 上也没有64位操作系统的选项 2.原因分析: (1) 可能 BIOS 的 Virtua ...
- 谱聚类(Spectral clustering)(2):NCut
作者:桂. 时间:2017-04-13 21:19:41 链接:http://www.cnblogs.com/xingshansi/p/6706400.html 声明:欢迎被转载,不过记得注明出处哦 ...
- CSS3-渐变背景色
线性渐变背景色: <style> .linear { width:130px; height:130px; border:2px solid black; padding: 10px; b ...