您的位置:首页 > 其它

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);

----------------内部流水对账流水号更新

根据内部汇总记录序号+清算时间

---------------更新业务对账汇总和业务流水

---------------清空业务对账汇总错误记录和业务流水对账状态
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: