`

存储过程调存储过程的事务

 
阅读更多

直接上代码:

 

是在包里写的存储过程,要测试的话,要先写声明

  声明

procedure test1(p_RETCODE in out varchar2, p_retInfo in out varchar2);
  procedure test2(p_RETCODE in out varchar2, p_retInfo in out varchar2);
  procedure test3(p_RETCODE in out varchar2, p_retInfo in out varchar2);
 

实现

procedure test1(p_RETCODE in out varchar2, p_retInfo in out varchar2) is
    biz_exception exception;
  begin
    insert into tree_tb (id, NODE_NAME) values ('1', '1');
    p_RETCODE := '1';
    p_retInfo := 'test1插入成功。';
  exception
    WHEN biz_exception then
      p_RETCODE := '-1';
      p_retInfo := '自定义异常1';
      rollback;
    when others then
      p_RETCODE := SQLCODE;
      p_retInfo := SUBSTR(SQLERRM, 1, 1000);
      DBMS_OUTPUT.PUT_LINE('Error code ' || p_RETCODE || ': ' || p_retInfo);
      rollback;
  end;

  procedure test2(p_RETCODE in out varchar2, p_retInfo in out varchar2) is
    biz_exception exception;
  begin
    insert into tree_tb (id, NODE_NAME) values ('2', '2');
    insert into tree_tb (id, NODE_NAME) values ('3', '3');
    raise biz_exception;
    insert into tree_tb (id, NODE_NAME) values ('4', '4');
    p_RETCODE := '1';
    p_retInfo := 'test2插入成功。';
  exception
    WHEN biz_exception then
      p_RETCODE := '-2';
      p_retInfo := '自定义异常2';
      rollback;
    when others then
      p_RETCODE := SQLCODE;
      p_retInfo := SUBSTR(SQLERRM, 1, 1000);
      DBMS_OUTPUT.PUT_LINE('Error code ' || p_RETCODE || ': ' || p_retInfo);
      rollback;
  end;


 /**
  * @作者: 马宏敏
  * @功能描述: 测试存储过程同时调多个存储过程时的事务原子性与一致性
  * @param retcode     out   返回编码
  * @param retinfo     out   返回编码对应的信息
  */
  procedure test3(p_RETCODE in out varchar2, p_retInfo in out varchar2) is
    biz_exception exception;
  begin
    test1(p_RETCODE, p_retInfo);
    test2(p_RETCODE, p_retInfo);
  exception
    WHEN biz_exception then
      rollback;
    when others then
      p_RETCODE := SQLCODE;
      p_retInfo := SUBSTR(SQLERRM, 1, 1000);
      DBMS_OUTPUT.PUT_LINE('Error code ' || p_RETCODE || ': ' || p_retInfo);
      rollback;
  end;

 

以上写法可回滚。

 

分享到:
评论

相关推荐

    oracle 事务 回滚 存储过程

    在Oracle数据库环境中,事务管理与存储过程的结合是实现数据一致性、事务回滚以及错误处理的关键技术之一。本文将深入探讨“Oracle事务回滚存储过程”这一主题,旨在理解其核心概念、工作原理以及实际应用。 ### ...

    SQLServer存储过程中事务的使用方法

    存储过程是一组预编译的SQL语句,可以在数据库中被多次调用,提高了效率并降低了网络流量。本篇将详细介绍如何在SQL Server存储过程中使用事务。 首先,事务有四个基本特性,即ACID(原子性、一致性、隔离性和持久...

    pb调用存储过程

    存储过程有多种优点,包括提高性能(因为预编译了SQL语句)、增强安全(可以限制对数据的访问)、简化复杂操作(如多个操作的事务处理)以及提供可重用的代码段。 总的来说,Pb调用存储过程是通过声明并执行存储...

    存储过程与事务

    示例代码展示了如何在调用存储过程时使用事务: ```csharp public DataTable GetDataTable(SqlConnection SqlConn, string proName, params SqlParameter[] param) { if (SqlConn.State == ConnectionState.Closed...

    hibernate query调用oracle存储过程

    例如,调用存储过程时,可以将相关操作包裹在Transaction中,以便在出现错误时能够回滚事务。 总之,通过Hibernate的Query接口,我们可以方便地调用Oracle的存储过程和函数,实现复杂的业务逻辑。结合源码和数据库...

    java 调用存储过程

    在Java编程中,调用存储过程是连接数据库并执行预定义SQL代码的一种常见方式。存储过程是由数据库管理系统(如MySQL, Oracle, SQL Server等)编译并存储的一组操作,可以包含复杂的逻辑、条件判断、循环等,提高数据...

    存储过程- 06.在应用程序中调用存储过程

    - **ORM框架**:Object-Relational Mapping(ORM)框架如Hibernate和Entity Framework也支持调用存储过程,开发者可以在ORM的映射配置中指定存储过程,然后在代码中像调用普通方法一样调用它。 3. **参数传递** -...

    存储过程实例解释 事务实例解释 C#中使用带返回值的存储过程

    ### 存储过程实例解释与事务处理 #### 一、简单存储过程的创建与调用 首先,我们来看一个简单的存储过程示例:`dbo.testProcedure_AX`。 ```sql CREATE PROCEDURE dbo.testProcedure_AX AS select userID from ...

    mybatis调用orclae存储过程

    MyBatis作为一款流行的Java持久层框架,提供了一种方便的方式来调用这些存储过程。下面将详细介绍如何使用MyBatis来调用Oracle存储过程。 ### 1. 创建Oracle存储过程 首先,我们需要在Oracle数据库中创建一个存储...

    ibatIS调用存储过程

    ibatIS调用存储过程是数据库操作中常见的一种技术,特别是在复杂的业务逻辑处理或数据批量操作时,存储过程能够提供更高的效率和更好的性能。本文将深入探讨如何在ibatIS框架中调用存储过程,以及涉及到的相关知识点...

    hibernate调用存储过程

    然而,有时我们需要执行更复杂的SQL任务,如存储过程,这时就需要了解如何通过Hibernate来调用存储过程。下面将详细解释Hibernate调用存储过程的相关知识点。 1. **存储过程的概念** 存储过程是预编译的SQL语句...

    MySQL SQL高级特性-存储过程-触发器-事务

    MySQL是目前最流行的开源关系型数据库管理系统之一,它提供了丰富的数据库高级特性,比如存储过程、触发器和事务管理。这些特性增强了数据库的交互性、安全性和性能。 一、存储过程 存储过程是一组为了完成特定...

    mybatis调用存储过程

    在调用过程中,如果出现错误,MyBatis会抛出异常,如`SQLException`。可以捕获这些异常,获取错误信息进行调试。此外,使用日志框架(如Log4j或Logback)可以帮助跟踪和分析MyBatis的执行过程。 6. 动态SQL与存储...

    oracle触发器调用存储过程

    ### Oracle触发器调用存储过程 #### 知识点概览 1. **触发器基本概念** 2. **存储过程简介** 3. **触发器如何调用存储过程** 4. **示例代码详解** 5. **注意事项** 6. **自主事务(Autonomous Transaction)** 7. ...

    sqlserver存储过程

    - 远程存储过程不受事务控制,更改无法回滚。 - 单个存储过程支持最多2100个参数。 - 局部变量的数量受可用内存限制。 - 存储过程最大可达128MB,取决于内存情况。 #### 名称限定 在存储过程中,如果对象名未明确...

    oracle调用存储过程

    调用Oracle存储过程是数据库管理中的常见任务,尤其对于需要执行大量数据处理或事务操作的场景。下面我们将详细探讨如何在Oracle中调用存储过程以及其相关知识点。 1. **创建存储过程**: 在Oracle中,你可以使用`...

    db2 存储过程语法与实例

    - **事务处理**:在一个存储过程中处理多个数据库操作,确保事务的原子性和一致性。 综上所述,DB2存储过程是提高数据库应用程序效率的重要工具,它们可以简化复杂操作,提高代码重用,减少网络通信,以及提供更好...

Global site tag (gtag.js) - Google Analytics