oracle存储过程一例
来源:互联网 发布:淘宝有哪些支付方式 编辑:程序博客网 时间:2024/05/22 03:52
------------------------------------------------------------------------
-- Oracle 包
---国航支付平台VISA退款
-- 游标定义:
--
-- 存储过程定义:
-- PY_WEBREFUND_VISA_PREPARE : VISA退款准备
-- 最后修改人:dougq
-- 最后修改日期:2007.4.17
------------------------------------------------------------------------
PROCEDURE PY_WEBREFUND_VISA_PREPARE (
in_serialNoStr IN VARCHAR2, --用"|"隔开的一组网上退款申请流水号
in_session_operatorid IN VARCHAR2, --业务操作员
out_return_code OUT VARCHAR2, --存储过程返回码
out_visaInfoStr OUT VARCHAR2
);
END PY_PCKG_REFUND2;
/
CREATE OR REPLACE PACKAGE BODY PY_PCKG_REFUND2 AS
PROCEDURE PY_WEBREFUND_VISA_PREPARE (
in_serialNoStr IN VARCHAR2, --用"|"隔开的一组网上退款申请流水号
in_session_operatorid IN VARCHAR2,--业务操作员
out_return_code OUT VARCHAR2, --存储过程返回码
out_visaInfoStr OUT VARCHAR2
) IS
--变量声明
v_serialno VARCHAR2(20);--网上退款申请流水号
v_refserialno VARCHAR2(20);--支付交易流水号
v_tobankOrderNo VARCHAR2(30);--上送银行的订单号
v_orderDate VARCHAR2(8);--订单日期
v_businessType VARCHAR2(10);--业务类型
v_currType VARCHAR2(3);--订单类型(ET-电子机票)
v_merno VARCHAR2(15);--商户号
v_orderNo VARCHAR2(20);--商户订单号
v_orderState VARCHAR2(2);
v_refAmount NUMBER(15,2);--退款金额
v_tranType VARCHAR(2);--交易类型
v_bank VARCHAR2(10);--收单银行
v_date VARCHAR2 (8);--交易日期
v_time VARCHAR2 (6);--交易时间
v_datetime VARCHAR2 (14);--获取的系统时间
v_index_start NUMBER;
v_index_end NUMBER;
v_i NUMBER;
BEGIN
-- 初始化参数
out_visaInfoStr := '';
v_i := 1;
v_index_start := 1;
v_index_end := INSTR(in_serialNoStr,'|',1,1);
v_refserialno := SUBSTR(in_serialNoStr, v_index_start, v_index_end-1);
v_datetime := TO_CHAR (SYSDATE, 'yyyymmddhh24miss');
v_date := SUBSTR (v_datetime, 1, 8);
v_time := SUBSTR (v_datetime, 9, 14);
--从退款请求表中查询定单信息(商户号、商户订单号、退款金额)
WHILE v_index_end > 0 LOOP
SELECT
WEBR_MERNO,
WEBR_ORDERNO,
WEBR_AMOUNT,
WEBR_SERIALNO,
WEBR_REFUNDTYPE
INTO
v_merno,
v_orderNo,
v_refAmount,
v_serialno,
v_tranType
FROM
PY_WEB_REFUND
WHERE
WEBR_REFREQNO = v_refserialno;
--将查询到的数据组成串
out_visaInfoStr := out_visaInfoStr || v_merno || '~' || v_orderNo || '~' || v_refAmount + '|';
--为下次循环做数据准备
v_i := v_i + 1;
v_index_start := v_index_end + 1;
v_index_end := INSTR(in_serialNoStr,'|',1,v_i);
IF v_index_end > 0 THEN
v_refserialno := SUBSTR(in_serialNoStr, v_index_start, v_index_end - 1);
END IF;
--根据原支付流水号在流水表中查询该订单的信息,包括原上送银行或第三方的订单号:WTRN_TOBANKORDERNO
SELECT
WTRN_TOBANKORDERNO,
WTRN_ORDERNO,
WTRN_ORDERDATE,
WTRN_BUSINESSTYPE,
WTRN_ACCPBANK,
WTRN_TRANCURRTYPE
INTO
v_tobankOrderNo,
v_orderNo,
v_orderDate,
v_businessType,
v_bank,
v_currType
FROM PY_WEBPAY_VIEW
WHERE WTRN_SERIALNO = v_serialno;
--记录流水表(退款)
INSERT INTO PY_WEBPAY_TRAN(
WTRN_SERIALNO,
WTRN_TRANTYPE,
WTRN_ORIGSERIALNO,
WTRN_ORDERNO,
WTRN_ORDERDATE,
WTRN_BUSINESSTYPE,
WTRN_TRANCURRTYPE,
WTRN_TRANAMOUNT,
WTRN_ACCPBANK,
WTRN_TRANSTATE,
WTRN_TRANTIME,
WTRN_TRANDATE,
WTRN_MERNO,
WTRN_TOBANKORDERNO
)VALUES(
v_refserialno, --和申请表的流水号相同,作为参数传人
v_tranType,
v_serialno, --原交易流水号,查询退款申请表得到
v_orderNo,
v_orderDate,
v_businessType,
v_currType,
v_refAmount,
v_bank,
'1',
v_time,
v_date,
v_merno,
v_tobankOrderNo --上送银行的订单号,查询流水表得到
);
--更新网上退款申请表
UPDATE PY_WEB_REFUND
SET
WEBR_IFDISPOSED = '1',
WEBR_DISPOSEDOPR = in_session_operatorid,
WEBR_DISPOSEDDATE = v_datetime
WHERE
WEBR_REFREQNO = v_refserialno;
--更新定单表
IF v_tranType = '2' THEN
v_orderState := '7';
ELSE
v_orderState := '10';
END IF;
UPDATE PY_ORDER
SET
ORD_ORDERSTATE = v_orderState
WHERE
ORD_ORDERNO = v_orderNo
AND ORD_ORDERDATE = v_orderDate
AND ORD_BUSINESSTYPE = v_businessType;
END LOOP;
-- 异常处理
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
out_return_code := '14001';
RETURN;
END;
END PY_PCKG_REFUND2;
/
- oracle存储过程一例
- oracle存储过程一
- oracle 存储过程学习一
- oracle存储过程写法(一)
- Oracle一存储过程总结
- Oracle存储过程详解(一)
- Oracle存储过程编写及调用一例
- oracle存储过程代码实例一
- Oracle存储过程总结(一、基本应用)
- oracle存储过程接口自动生成器(一)
- Oracle存储过程总结(一、基本应用)
- oracle 存储过程调用java一
- Oracle存储过程总结(一、基本应用)
- Oracle 存储过程学习笔记(一)
- Oracle存储过程学习笔记(一)
- Oracle存储过程总结(一、基本应用)
- Oracle存储过程总结(一、基本应用)
- Oracle存储过程总结(一、基本应用)
- vmware下LINUX修改分辨率
- DB2 UDB V8.1 管理 学习笔记(二)
- 基于RVCT编译器的symbian平台搭建(完成版)
- 调用类库函数的简单加密(转的)
- DB2 UDB V8.1 管理 学习笔记(三)
- oracle存储过程一例
- [转摘]你这该死的销售--走出软件作坊:三五个人十来条枪 如何成为开发正规军(七)
- DB2 学习笔记(四)
- Oracle Procedure中使用游标cursor更新多表
- 什么是Ajax(网络转载)
- db2数据库(ibm公司)调试
- IPMSG(飞鸽传书)协议翻译
- 浅谈IBM DB2的数据库备份与恢复
- 内核结构图