`
qinya06
  • 浏览: 595124 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

oracle 存储过程 一例

阅读更多
CREATE OR REPLACE PACKAGE PY_PCKG_REFUND2 AS    
------------------------------------------------------------------------    
-- Oracle 包       
-- 游标定义:    
--    
-- 存储过程定义:    
-- PY_WEBREFUND_VISA_PREPARE  : VISA退款准备    
-- 最后修改人:dougq    
-- 最后修改日期:2010.4.15   
------------------------------------------------------------------------    
   
 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 存储过程编译,特别是使用 PL/SQL 语言编写的存储过程。 标题:Oracle 存储过程编译 描述:Oracle 存储过程编译 标签:Oracle 部分内容: 在上面的代码中,我们定义了一个...

    Oracle存储过程、游标、函数的详解

    通过以上对Oracle存储过程、游标和函数的详细介绍,我们可以看到这些特性为Oracle数据库提供了一种强大而灵活的方式来处理数据。掌握这些技术对于开发高效的应用程序至关重要。在未来的学习和实践中,我们应该不断...

    *oracle存储过程总结*oracle存储过程总结*

    根据提供的文件信息,我们可以归纳出以下Oracle存储过程的相关知识点: ### Oracle存储过程基础概念 - **存储过程**:是在数据库中存储的一组SQL语句和控制流语句的集合,可以接受输入参数、返回单个值、返回多个...

    oracle 存储过程语法例子

    在本例中,我们看到两个具体的存储过程`writeCount`和`testSandyInSert`,它们展示了如何创建和使用Oracle存储过程。 1. 创建包(Package): 在Oracle中,存储过程通常被组织到包(Package)中,以便更好地管理和...

    ibatis调用oracle存储过程

    在IT领域,特别是数据库操作与Java开发中,利用ibatis框架调用Oracle存储过程是一个常见的需求,这不仅能够提升代码的执行效率,还能增强应用程序的安全性。本文将深入解析ibatis如何与Oracle数据库中的存储过程进行...

    Oracle存储过程实例使用显示游标

    在本例中,“Oracle存储过程实例使用显示游标”着重展示了如何在存储过程中调用函数,并通过游标来处理和更新数据。 首先,我们需要了解存储过程的基本结构。一个存储过程通常包含以下部分: 1. **声明部分**:在...

    java调用oracle存储过程入门实例 增删改查

    在Java中调用Oracle存储过程,我们需要使用JDBC(Java Database Connectivity),这是Java标准库提供的一组接口和类,用于与各种数据库进行通信。首先,我们需要添加Oracle JDBC驱动到项目中,例如ojdbc.jar。 1. *...

    JAVA调用ORACLE存储过程

    ### JAVA调用ORACLE存储过程知识点详解 #### 一、背景与概述 在现代软件开发过程中,集成多种技术栈是常态。特别是在企业级应用中,Java 和 Oracle 数据库的组合非常常见。通过 Java 调用 Oracle 存储过程不仅能够...

    oracle数组存储过程批量插入

    在本例中,我们探讨了如何使用数组存储过程进行批量插入和删除。数组在Oracle中的使用通常涉及定义PL/SQL类型,这允许我们创建索引数组以存储特定数据类型。 首先,我们创建一个名为`MSGPAG`的包,其中定义了一个名...

    oracle存储过程详细介绍

    Oracle存储过程是数据库管理系统Oracle中的一个重要特性,它允许开发者编写一系列复杂的SQL和PL/SQL语句,形成可重用的代码块。存储过程在数据库中预先编译,提高了执行效率,降低了网络通信量,同时也提供了更好的...

    Oracle 分页的存储过程

    Oracle 分页存储过程是数据库管理中的一个重要概念,它允许用户以特定的页面大小获取数据,而不是一次性获取所有数据,这有助于提高性能并减轻服务器负担。在Oracle中,可以通过创建存储过程来实现这一功能,尤其在...

    Oracle第7章存储过程操作.pptx

    Oracle数据库是企业级广泛使用的数据库管理系统,其强大的功能之一就是支持存储过程的创建、管理和使用。存储过程是一组为了完成特定任务而预编译的SQL语句集合,它可以提高应用程序的性能和效率,同时减少网络流量...

    Oracle存储过程应用实例

    本节以一个具体的GPS车辆监控系统为例,介绍如何在Visual C++开发环境下,使用ADO技术调用Oracle存储过程。 ##### 1. 开发环境与工具 本案例基于Visual C++ 6.0开发平台,利用ADO(ActiveX Data Object)技术实现...

    oracle 存储过程.pptx

    总之,Oracle存储过程是数据库开发中的关键组件,它们提供了结构化的方法来组织和执行复杂的数据库操作,同时提高了系统的安全性和性能。正确地设计和使用存储过程能够极大地提升数据库应用的效率和质量。

    oracle 自动执行存储过程

    ### Oracle自动执行存储过程 #### 一、背景与需求 在很多实际应用场景中,我们可能会遇到需要定时执行某些任务的情况,比如数据清理、备份、统计分析等。在Oracle数据库环境中,可以通过创建定时任务来实现对特定...

    java调用oracle存储过程

    首先,我们需要理解Oracle存储过程的概念。存储过程是预编译在数据库服务器上的SQL和PL/SQL代码集合,可以接收参数,执行特定任务并返回结果。调用存储过程可以提高性能,减少网络流量,并封装业务逻辑。 在Java中...

    Mybatis传list参数调用oracle存储过程的解决方法

    但是,如何将List类型参数传递给Oracle存储过程,实现批量插入数据却是一个棘手的问题,本文将给大家介绍Mybatis传List参数调用Oracle存储过程的解决方法。 使用Mybatis传List参数调用Oracle存储过程的解决方法 在...

    oracle存储过程

    ### Oracle存储过程详解 在Oracle数据库管理中,存储过程是一种重要的数据库对象,它允许开发者将一组SQL和PL/SQL语句封装在一起,作为单一单元在数据库服务器上存储和执行。这种封装不仅提高了代码的重用性和维护...

    JAVA调用ORACLE存储过程小结[文].pdf

    本文将对这一主题进行深入探讨,以帮助开发者理解如何有效地在Java中调用Oracle存储过程。 首先,我们来看一个无返回值的存储过程的例子。Oracle存储过程`adddept`用于向`dept`表中插入新的部门记录。在Java中,...

Global site tag (gtag.js) - Google Analytics