orcale 游标之依次插入 使用游标依次插入到数据中(支付清算)
2015-09-06 18:01
309 查看
------------------------------更新业务对账汇总至内部对账汇总-------------------------------
BEGIN
------------------------------按照每天进行分类,每天将所有商户的交易金额,交易笔数,交易成功笔数,交易错误笔数,等进行汇总统计,并将结果写到内部对账表中去-------------------
FOR cr IN
(select t.settle_date, --清算日期
sum(t.trans_amt) as trans_amt , --交易金额
sum(t.chk_count) as chk_count, --对账总比数
sum(t.chk_succ_count) as chk_succ_count , --成功笔数
sum(t.chk_succ_amt) as chk_succ_amt, --成功金额
sum(t.chk_err_count) as chk_err_count, --错误笔数
sum(t.chk_err_amt) as chk_err_amt --错误金额
from t_Mchnt_Chk_Result t
group by t.settle_date )
LOOP
insert into t_Inner_Chk_Result (
t_Inner_Chk_Result.id, --序列
t_Inner_Chk_Result.settle_Date, --清算日期
t_Inner_Chk_Result.Trans_Amt, --对账交易金额
t_Inner_Chk_Result.Busi_Amt, --对账业务金额
t_Inner_Chk_Result.CHK_COUNT, --对账总笔数
t_Inner_Chk_Result.chk_succ_count, --对账成功笔数
t_inner_chk_result.Chk_Succ_Trans_Amt, --对账成功交易金额
t_inner_chk_result.chk_succ_busi_amt, --对账成功业务金额
t_Inner_Chk_Result.CHK_ERR_COUNT, --对账错误笔数
t_Inner_Chk_Result.Chk_Err_Trans_Amt, --对账错误交易金额
t_Inner_Chk_Result.Chk_Err_Busi_Amt, --对账错误业务金额
t_Inner_Chk_Result.CHK_STATUS, --对账状态
t_Inner_Chk_Result.Create_Time, --创建时间
t_Inner_Chk_Result.Last_Upd_Time, --最新更新时间
t_Inner_Chk_Result.Chk_Num --对账次数
)
values(
seq_inner_chk_result.nextval, --序列
cr.settle_date, --清算日期
cr.trans_amt, --交易金额
cr.trans_amt, --业务金额
cr.chk_count, --对账总比数
cr.chk_succ_count, --成功对账笔数
cr.chk_succ_amt, --对账成功交易金额
cr.chk_succ_amt, --对账成功业务金额
cr.chk_err_count, --对账错误笔数
cr.chk_err_amt, --对账错误交易金额
cr.chk_err_amt, --对账错误业务金额
'02', --对账状态
sysdate, --创建时间
sysdate, --最新更新时间
1); --对账次数
END LOOP;
END;
--------------------------更新业务差错表中的数据至内部差错表中-----------------------------------------------------
declare
--定义一个 全局变量,表示对账流水号
chkNo varchar2(50);
begin
for cr in (
---从商户对账差错表中取数据
select ID,MCHNT_CODE,SETTLE_DATE,
TRANS_DATE,TRANS_CODE,TRANS_AMT,
HANDLE_STATUS,BUSI_NO,ERR_TYPE,
HANDLE_DATE,HANDLER,INNER_TRANS_NO,
AUDIT_STATUS,CREATE_TIME,LAST_UPD_TIME,
HANDLER_IP,HANDLE_TYPE,SERVICE_CODE
FROM t_mchnt_chk_err )
loop
--------------------将清算日期打印到控制台上
DBMS_OUTPUT.PUT_LINE(to_char(cr.settle_date,'yyyymmdd'));
--------------------内部对账表中的id赋值给对账流水号------------------
--------------------1 条件是使用当天的日期等于游标查询出来的清算日期--------------------------------------------------
select id into chkNo from t_inner_chk_result where settle_date=cr.settle_date;
----将游标查询出来的数据赋值到内部差错表中去,其中id为nextval
insert into t_inner_chk_err (
ID,MCHNT_CODE,SETTLE_DATE,TRANS_DATE,
TRANS_CODE,BUSI_AMT,TRANS_AMT,HANDLE_STATUS,
BUSI_NO,ERR_TYPE,HANDLE_DATE,HANDLER,
INNER_TRANS_NO,AUDIT_STATUS,CREATE_TIME,
LAST_UPD_TIME,HANDLER_IP,HANDLE_TYPE,
SERVICE_CODE,CHK_NO)
values(
seq_inner_chk_err.nextval,cr.mchnt_code,cr.settle_date,cr.trans_date,
cr.trans_code,cr.trans_amt,cr.trans_amt,nvl(cr.handle_status,'D'),
cr.busi_no,cr.ERR_TYPE,cr.HANDLE_DATE,cr.HANDLER,cr.INNER_TRANS_NO,
NVL(cr.AUDIT_STATUS,'D'),cr.CREATE_TIME,cr.LAST_UPD_TIME,cr.HANDLER_IP,
cr.HANDLE_TYPE,cr.SERVICE_CODE,chkNO
);
end loop;
end;
-----------------业务对账状态更新至内部对账状态
-----------------1即主订单表中的对账状态为业务交易详情表中的状态
-----------------2主订单表的内部流水号和业务交易详情表中的内部流水号是一致的
UPDATE t_order_main T1 SET VER_STATUS=(SELECT T2.VER_STATUS FROM T_BUSI_TRANS_DETAIL T2 WHERE T1.INNER_TRANS_NO=T2.INNER_TRANS_NO);
----------------内部流水对账流水号更新
根据内部汇总记录序号+清算时间
---------------更新业务对账汇总和业务流水
---------------清空业务对账汇总错误记录和业务流水对账状态
BEGIN
------------------------------按照每天进行分类,每天将所有商户的交易金额,交易笔数,交易成功笔数,交易错误笔数,等进行汇总统计,并将结果写到内部对账表中去-------------------
FOR cr IN
(select t.settle_date, --清算日期
sum(t.trans_amt) as trans_amt , --交易金额
sum(t.chk_count) as chk_count, --对账总比数
sum(t.chk_succ_count) as chk_succ_count , --成功笔数
sum(t.chk_succ_amt) as chk_succ_amt, --成功金额
sum(t.chk_err_count) as chk_err_count, --错误笔数
sum(t.chk_err_amt) as chk_err_amt --错误金额
from t_Mchnt_Chk_Result t
group by t.settle_date )
LOOP
insert into t_Inner_Chk_Result (
t_Inner_Chk_Result.id, --序列
t_Inner_Chk_Result.settle_Date, --清算日期
t_Inner_Chk_Result.Trans_Amt, --对账交易金额
t_Inner_Chk_Result.Busi_Amt, --对账业务金额
t_Inner_Chk_Result.CHK_COUNT, --对账总笔数
t_Inner_Chk_Result.chk_succ_count, --对账成功笔数
t_inner_chk_result.Chk_Succ_Trans_Amt, --对账成功交易金额
t_inner_chk_result.chk_succ_busi_amt, --对账成功业务金额
t_Inner_Chk_Result.CHK_ERR_COUNT, --对账错误笔数
t_Inner_Chk_Result.Chk_Err_Trans_Amt, --对账错误交易金额
t_Inner_Chk_Result.Chk_Err_Busi_Amt, --对账错误业务金额
t_Inner_Chk_Result.CHK_STATUS, --对账状态
t_Inner_Chk_Result.Create_Time, --创建时间
t_Inner_Chk_Result.Last_Upd_Time, --最新更新时间
t_Inner_Chk_Result.Chk_Num --对账次数
)
values(
seq_inner_chk_result.nextval, --序列
cr.settle_date, --清算日期
cr.trans_amt, --交易金额
cr.trans_amt, --业务金额
cr.chk_count, --对账总比数
cr.chk_succ_count, --成功对账笔数
cr.chk_succ_amt, --对账成功交易金额
cr.chk_succ_amt, --对账成功业务金额
cr.chk_err_count, --对账错误笔数
cr.chk_err_amt, --对账错误交易金额
cr.chk_err_amt, --对账错误业务金额
'02', --对账状态
sysdate, --创建时间
sysdate, --最新更新时间
1); --对账次数
END LOOP;
END;
--------------------------更新业务差错表中的数据至内部差错表中-----------------------------------------------------
declare
--定义一个 全局变量,表示对账流水号
chkNo varchar2(50);
begin
for cr in (
---从商户对账差错表中取数据
select ID,MCHNT_CODE,SETTLE_DATE,
TRANS_DATE,TRANS_CODE,TRANS_AMT,
HANDLE_STATUS,BUSI_NO,ERR_TYPE,
HANDLE_DATE,HANDLER,INNER_TRANS_NO,
AUDIT_STATUS,CREATE_TIME,LAST_UPD_TIME,
HANDLER_IP,HANDLE_TYPE,SERVICE_CODE
FROM t_mchnt_chk_err )
loop
--------------------将清算日期打印到控制台上
DBMS_OUTPUT.PUT_LINE(to_char(cr.settle_date,'yyyymmdd'));
--------------------内部对账表中的id赋值给对账流水号------------------
--------------------1 条件是使用当天的日期等于游标查询出来的清算日期--------------------------------------------------
select id into chkNo from t_inner_chk_result where settle_date=cr.settle_date;
----将游标查询出来的数据赋值到内部差错表中去,其中id为nextval
insert into t_inner_chk_err (
ID,MCHNT_CODE,SETTLE_DATE,TRANS_DATE,
TRANS_CODE,BUSI_AMT,TRANS_AMT,HANDLE_STATUS,
BUSI_NO,ERR_TYPE,HANDLE_DATE,HANDLER,
INNER_TRANS_NO,AUDIT_STATUS,CREATE_TIME,
LAST_UPD_TIME,HANDLER_IP,HANDLE_TYPE,
SERVICE_CODE,CHK_NO)
values(
seq_inner_chk_err.nextval,cr.mchnt_code,cr.settle_date,cr.trans_date,
cr.trans_code,cr.trans_amt,cr.trans_amt,nvl(cr.handle_status,'D'),
cr.busi_no,cr.ERR_TYPE,cr.HANDLE_DATE,cr.HANDLER,cr.INNER_TRANS_NO,
NVL(cr.AUDIT_STATUS,'D'),cr.CREATE_TIME,cr.LAST_UPD_TIME,cr.HANDLER_IP,
cr.HANDLE_TYPE,cr.SERVICE_CODE,chkNO
);
end loop;
end;
-----------------业务对账状态更新至内部对账状态
-----------------1即主订单表中的对账状态为业务交易详情表中的状态
-----------------2主订单表的内部流水号和业务交易详情表中的内部流水号是一致的
UPDATE t_order_main T1 SET VER_STATUS=(SELECT T2.VER_STATUS FROM T_BUSI_TRANS_DETAIL T2 WHERE T1.INNER_TRANS_NO=T2.INNER_TRANS_NO);
----------------内部流水对账流水号更新
根据内部汇总记录序号+清算时间
---------------更新业务对账汇总和业务流水
---------------清空业务对账汇总错误记录和业务流水对账状态
相关文章推荐
- 使用Intellij14导入Android Library工程
- Unity性能优化原则(一)
- 匈牙利算法
- Cocos Studio和Cocos2d-x版本对应关系 附1.6Cocostudio版本下载地址
- 最小化数值误差
- Linux下VIM编辑器的详细使用
- runloop总结
- Android把定时轮番放到ViewPager里面
- Android更新ui 的几种方式?Handler 机制(二)
- Android学习路线
- Hadoop 学习
- iOS9新特性 - UIStack View
- 解决MFC运行时错误:“Stack around the variable 'dlg' was corrupted. ”
- UI基础-01 隐藏键盘
- uboot命令
- ios AFNetworking网络请求
- Java中常用字符串方法总结
- 一步一步地安装Yeoman脚手架工具
- unity之MonoBehaviour
- 解决 "cc.CardinalSplineTo:create() method is nil" 的问题