直接上代码:
是在包里写的存储过程,要测试的话,要先写声明
声明
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事务回滚存储过程”这一主题,旨在理解其核心概念、工作原理以及实际应用。 ### ...
存储过程是一组预编译的SQL语句,可以在数据库中被多次调用,提高了效率并降低了网络流量。本篇将详细介绍如何在SQL Server存储过程中使用事务。 首先,事务有四个基本特性,即ACID(原子性、一致性、隔离性和持久...
存储过程有多种优点,包括提高性能(因为预编译了SQL语句)、增强安全(可以限制对数据的访问)、简化复杂操作(如多个操作的事务处理)以及提供可重用的代码段。 总的来说,Pb调用存储过程是通过声明并执行存储...
示例代码展示了如何在调用存储过程时使用事务: ```csharp public DataTable GetDataTable(SqlConnection SqlConn, string proName, params SqlParameter[] param) { if (SqlConn.State == ConnectionState.Closed...
例如,调用存储过程时,可以将相关操作包裹在Transaction中,以便在出现错误时能够回滚事务。 总之,通过Hibernate的Query接口,我们可以方便地调用Oracle的存储过程和函数,实现复杂的业务逻辑。结合源码和数据库...
在Java编程中,调用存储过程是连接数据库并执行预定义SQL代码的一种常见方式。存储过程是由数据库管理系统(如MySQL, Oracle, SQL Server等)编译并存储的一组操作,可以包含复杂的逻辑、条件判断、循环等,提高数据...
- **ORM框架**:Object-Relational Mapping(ORM)框架如Hibernate和Entity Framework也支持调用存储过程,开发者可以在ORM的映射配置中指定存储过程,然后在代码中像调用普通方法一样调用它。 3. **参数传递** -...
### 存储过程实例解释与事务处理 #### 一、简单存储过程的创建与调用 首先,我们来看一个简单的存储过程示例:`dbo.testProcedure_AX`。 ```sql CREATE PROCEDURE dbo.testProcedure_AX AS select userID from ...
MyBatis作为一款流行的Java持久层框架,提供了一种方便的方式来调用这些存储过程。下面将详细介绍如何使用MyBatis来调用Oracle存储过程。 ### 1. 创建Oracle存储过程 首先,我们需要在Oracle数据库中创建一个存储...
ibatIS调用存储过程是数据库操作中常见的一种技术,特别是在复杂的业务逻辑处理或数据批量操作时,存储过程能够提供更高的效率和更好的性能。本文将深入探讨如何在ibatIS框架中调用存储过程,以及涉及到的相关知识点...
然而,有时我们需要执行更复杂的SQL任务,如存储过程,这时就需要了解如何通过Hibernate来调用存储过程。下面将详细解释Hibernate调用存储过程的相关知识点。 1. **存储过程的概念** 存储过程是预编译的SQL语句...
MySQL是目前最流行的开源关系型数据库管理系统之一,它提供了丰富的数据库高级特性,比如存储过程、触发器和事务管理。这些特性增强了数据库的交互性、安全性和性能。 一、存储过程 存储过程是一组为了完成特定...
在调用过程中,如果出现错误,MyBatis会抛出异常,如`SQLException`。可以捕获这些异常,获取错误信息进行调试。此外,使用日志框架(如Log4j或Logback)可以帮助跟踪和分析MyBatis的执行过程。 6. 动态SQL与存储...
### Oracle触发器调用存储过程 #### 知识点概览 1. **触发器基本概念** 2. **存储过程简介** 3. **触发器如何调用存储过程** 4. **示例代码详解** 5. **注意事项** 6. **自主事务(Autonomous Transaction)** 7. ...
- 远程存储过程不受事务控制,更改无法回滚。 - 单个存储过程支持最多2100个参数。 - 局部变量的数量受可用内存限制。 - 存储过程最大可达128MB,取决于内存情况。 #### 名称限定 在存储过程中,如果对象名未明确...
调用Oracle存储过程是数据库管理中的常见任务,尤其对于需要执行大量数据处理或事务操作的场景。下面我们将详细探讨如何在Oracle中调用存储过程以及其相关知识点。 1. **创建存储过程**: 在Oracle中,你可以使用`...
- **事务处理**:在一个存储过程中处理多个数据库操作,确保事务的原子性和一致性。 综上所述,DB2存储过程是提高数据库应用程序效率的重要工具,它们可以简化复杂操作,提高代码重用,减少网络通信,以及提供更好...