资金表实现过程方案二:资金表与冻结表分离(三)
P_MONEY IN FLOAT, --冻结金额
P_VALID IN NUMBER, --是否冻结::1.冻结,0.解冻
P_MEMBER_ID IN NUMBER, --会员ID
P_MERCHANT_ID IN NUMBER --商户ID
)
IS
V_MONEY FLOAT (126); --冻结金额
V_VALID NUMBER (1); --是否冻结::1.冻结,0.解冻
V_MEMBER_ID NUMBER (19); --会员ID
V_MERCHANT_ID NUMBER (19); --商户ID
V_USEBALANCE FLOAT (126); --商戶或會員可用余額
V_EXIST NUMBER (19); --商戶或會員是否存在
BEGIN
V_MONEY := P_MONEY; --冻结金额
V_VALID := P_VALID; --是否冻结::1.冻结,0.解冻
V_MEMBER_ID := P_MEMBER_ID; --会员ID
V_MERCHANT_ID := P_MERCHANT_ID; --商户ID
V_USEBALANCE := 0; --商戶或會員可用余額
-- CATEGORY ID DNAME FROZEN --
-- TradeSettlementCategory 506 转帐支出 YES --
-- TradeSettlementCategory 505 退款支出 YES --
-- TradeSettlementCategory 507 提现支出 YES --
-- TradeSettlementCategory 508 手续费支出 NO --
-- TradeSettlementCategory 509 返点收入 NO --
-- TradeSettlementCategory 504 支付收入 NO --
-----------------------------------------------------------------------------------
CASE
WHEN V_MEMBER_ID IS NULL
--商户处理:转帐支出,退款支出,提现支出
/* 由于上述三种支出需长时间处理且状态不确定,为保证资金安全,需先冻结*/
THEN
SELECT COUNT (MERCHANT_ID)
INTO V_EXIST
FROM TAB_MERCHANTFUND
WHERE MERCHANT_ID = V_MERCHANT_ID;
--存在并冻结
/* 余额=总收入-总支出=可用余额+冻结金额 */
/* 余额不变,可用余额减少,冻结金额增加 */
THEN
SELECT usebalance
INTO v_usebalance
FROM TAB_MERCHANTFUND
WHERE MERCHANT_ID = V_MERCHANT_ID
FOR UPDATE ;
--余额大于冻结金额
THEN
UPDATE tab_merchantfund
SET frozenprice = frozenprice + v_money,
usebalance = usebalance - v_money
WHERE merchant_id = v_merchant_id;
ELSE
--可用余额,不足以支付该笔交易则报错
raise_application_error (
-20001,
'Balance is insufficient, please phone!'
);
END IF;
ELSE
--不存在则不能冻结并报错
raise_application_error (
-20001,
'Balance is insufficient, please phone!'
);
END IF;
WHEN V_MERCHANT_ID IS NULL
--会员处理:转帐支出,退款支出,提现支出
/* 由于上述三种支出需长时间处理且状态不确定,为保证资金安全,需先冻结*/
THEN
SELECT COUNT (MEMBER_ID)
INTO V_EXIST
FROM TAB_MEMBERFUND
WHERE MEMBER_ID = V_MEMBER_ID;
--存在并冻结
/* 余额=总收入-总支出=可用余额+冻结金额 */
/* 余额不变,可用余额减少,冻结金额增加 */
THEN
SELECT usebalance
INTO v_usebalance
FROM TAB_MEMBERFUND
WHERE MEMBER_ID = V_MEMBER_ID
FOR UPDATE ;
--余额大于冻结金额
THEN
UPDATE TAB_MEMBERFUND
SET frozenprice = frozenprice + v_money,
usebalance = usebalance - v_money
WHERE member_id = v_member_id;
ELSE
--可用余额,不足以支付该笔交易则报错
raise_application_error (
-20001,
'Balance is insufficient, please phone!'
);
END IF;
ELSE
--不存在则不能冻结并报错
raise_application_error (
-20001,
'Balance is insufficient, please phone!'
);
END IF;
END CASE;
END;
/
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/25198367/viewspace-745870/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/25198367/viewspace-745870/
资金表实现过程方案二:资金表与冻结表分离(三)相关推荐
- 资金表实现过程方案二:资金表与冻结表分离(一)
1. 分别在资金表与冻结表建立两个触发器 CREATE OR REPLACE TRIGGER TRG_TAB_TRADESETTLEMENT_HIS29 BEFORE INSERT OR DEL ...
- 资金表实现过程方案一:资金表与冻结表合并(一)
1. 触发器调用存储过程 a. 向资金表插入数据前查询出当前交易前余额 b. 分别调用三个存储过程实现该表的insert/update/delete 三种操作的触发 CREATE OR REPLACE ...
- (转)Spring4.2.5+Hibernate4.3.11+Struts1.3.8集成方案二
http://blog.csdn.net/yerenyuan_pku/article/details/52894958 前面我们已经集成了Spring4.2.5+Hibernate4.3.11+Str ...
- 实验:跨域VPN-OptionC方式-方案二
配置思路 基础配置:各接口IP地址.环回口IP地址 IGP配置:各AS内环回口IP地址互通 MPLS配置:PE和ASBR之间配置MPLS LDP,建立LSP隧道 BGP基础配置:PE和 ...
- 图表CanvasChartView(四):基于方案二的优化
前言 之前我们已经讨论并实现了两种实现滑动的方案,最终第二种实现了我们想要的效果,今天我们对方案二优化一下,让我们的CanvasChartView体验起来更屌. 都有哪些地方需要优化呢: Fling效 ...
- Moveit+Gazebo:搭建双臂仿真平台(方案二)
演示视频:Moveit+Gazebo:搭建双臂仿真平台(方案二)_哔哩哔哩_bilibili 实现效果如上图所示,有两个rviz界面分别展示两条臂的运动,gazebo中同步rviz中的运动. 先说一下 ...
- 如何完美隐藏Disposable的存储和销毁过程(二)
如何完美隐藏Disposable的存储和销毁过程(二) 前面一节大致讲了讲,我们的成品到底是怎么样的?那么这一节,我们就来讲讲如何初步地隐藏自己Disposable的存储和销毁. 首先说说最常见的方式 ...
- SQL Server 数据库的整理优化的基本过程(二)
SQL Server 数据库的整理优化的基本过程(二) 高建刚 第一节 基本维护 第二节 索引 索引相信大家都不陌生,而且在因特网上,有了很多关于如何通过索引来优化数据库的文章,在这里,我主要是结合我 ...
- springboot集成mybatis源码分析-启动加载mybatis过程(二)
springboot集成mybatis源码分析-启动加载mybatis过程(二) 1.springboot项目最核心的就是自动加载配置,该功能则依赖的是一个注解@SpringBootApplicati ...
最新文章
- strlen函数_7.2 C++字符串处理函数
- 如果用户希望将一台计算机,计算机网络试卷(有答案版)
- 04.卷积神经网络 W1.卷积神经网络
- 3行python代码实现假聊天机器人(慎入:这是假机器人!!!)
- 中文字符集编码unicode,gb2312,cp936,GBK,GB18030介绍
- 乐理基础-曲谱、简谱、音名、唱名、调、调号
- games101 材质与外观
- This request has been blocked; the content must be served over HTTPS.
- 收款码在线生成系统源码 无限制 (web微信、QQ、支付宝三合一收款码)
- 从菜鸟到架构师(六)
- 中国90%的SaaS都亏钱,为何这家公司偏偏盈利千万
- 时间同步装置(时钟系统)工作模式介绍
- Promise、Promise.all 和Promise.race用法
- 淘宝(SpringBoot自动装配原理)
- matlab 路由表,闭关修炼之zigbee路由
- 计算机网络功能中的提高系统的可靠性指的是,下列不属于计算机网络功能的是()。A.提高系统可靠性B.提高工作效率C.分散数据的综合处理D.使...
- 智能优化算法:北方苍鹰优化算法-附代码
- 【前端工程化】配置package.json中scripts命令脚本,新手必学
- kettle实现数据增量同步方案
- python爬取分页数据_爬虫抓取分页数据的简单实现