1、测试用例
declare
begin
INSERT INTO loginuser VALUES('admin','111');
testcommit.test('admin','123456');
end;
2、建表loginuser语句,用来测试用:
CREATE TABLE loginuser (
username varchar(50),
password varchar(50)
)
3、建包testcommit和包体testcommit中的过程test:
create or replace package testcommit is
PROCEDURE test(v_name VARCHAR2,
v_pass VARCHAR2) ;
end testcommit;
、、、、、、、、、、、、、、、、、、、、、、
create or replace package body testcommit is
PROCEDURE test(v_name VARCHAR2,
v_pass VARCHAR2) AS
PRAGMA AUTONOMOUS_TRANSACTION; --增加自主事务
BEGIN
INSERT INTO loginuser VALUES (v_name,v_pass);
COMMIT;--提交事务
END test;
end testcommit;
4、测试结果:
当运行完毕测试用例时,在未提交事务的情况下,loginuser表里的数据只有admin ---123456---一条记录;
INSERT INTO loginuser VALUES('admin','111'); -------此条记录在未提交事务时,并未插入到loginuser表中
testcommit.test('admin','123456');-----------由于使用自主事务,包体内的存储过程已经提交了事务,而且使用了自主事务,所以在测试用例未提交事务的时候,已经插入到了loginuser表里。
5、对比测试:
当修改包体中的存储过程test,把自主事务注释掉,
---注释掉该行 PRAGMA AUTONOMOUS_TRANSACTION; --自主事务
再次针对测试用例测试的结果为:
INSERT INTO loginuser VALUES('admin','111');----在未提交事务的情况下,该条记录成功插入到表loginuer
testcommit.test('admin','123456');---成功插入该记录
在数据清洗时为了方便查看当前运行的状态,特意在存储过程里面添加了一些日志。通过查看日志可以方便的看到当前运行到哪里,但是这输出的日志不能跟过程使用相当的事物(即不管清洗过程是成功还是失败,日志必须得成功写到数据库里面)。Oracle的独立事物就能帮助我们解决这个问题。
下面是方法模型:
procedure AddError(i_runid number, --运行号码
i_append varchar2, --附加信息
i_type number default 10 --错误等级0-9错误,10-99警告
) is
pragma autonomous_transaction;
begin
insert into dw_log_error
(log_id, log_runid, log_type, log_append)
values
(seq_dw_log_errorid.nextval,
i_runid,
i_type,
substr(i_append, 1, 2000));
commit;
end;
只需要在过程内容调整该过程即可!问题立马解决!
在编写程序中,常常需要有些事务提交了,但是有些事务不提交。
典型的应用就是一个主过程调用一个子过程,而子过程主要用于记录日志信息,不论主过程是否失败,子过程都需要执行。
--------主过程---------------
PROCEDURE MAIN
IS
BEGIN
.......
SUB_TRAN;
.........
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
COMMIT;
END MAIN;
------- END SUB---------
如果要完成前文所描述,则SUB_TRAN必须如以下定义
PROCEDURE SUB_TRAN
is
pragma autonomous_transaction;
begin
.......
INSERT INTO LOGTABLE() VALUES();
COMMIT;
EXCEPTION
分享到:
相关推荐
这份"Oracle自主学习核心资料"涵盖了Oracle学习的关键领域,旨在帮助用户深入理解Oracle数据库的各个方面,提升数据库管理技能。 首先,我们要关注的是"关系数据库与SQL语言环境"。SQL(Structured Query Language...
Oracle自主数据仓库云是Oracle公司推出的一种创新的云端数据仓库解决方案,旨在简化数据管理,提高效率并增强安全性。这个服务基于Oracle Database 18c,一个先进的数据库版本,结合了Oracle Cloud Infrastructure的...
在Oracle中,通过使用`PRAGMA AUTONOMOUS_TRANSACTION`语句,我们可以创建一个自主事务(Autonomous Transaction),这种事务在当前事务的上下文中运行,但有自己的提交和回滚机制,不受外部事务的影响。 1. **独立...
6. **自主事务(Autonomous Transaction)** 7. **触发器与事务管理** #### 触发器基本概念 在Oracle数据库中,触发器是一种特殊类型的存储过程,它被设计为当特定事件发生时自动执行。这些事件通常包括插入、更新...
Oracle自主事务处理(ATP)是一种云数据库服务,它消除了操作和保护高性能数据库的复杂性。 该服务自动执行数据库的配置,配置,调整,扩展,修补,加密和修复。 先决条件 有权manage Oracle Cloud Infrastructure...
- 自主事务:了解如何在PL/SQL块中使用自主事务来实现局部控制,确保数据的一致性,同时不影响全局事务。 - 调用者权利:理解Invoker's Rights与Definer's Rights的区别,确保安全地执行代码,尤其是在共享库或API...
- **自主事务**:自主事务是指在事务处理过程中,可以嵌套其他事务,这些嵌套事务具有独立的开始和结束。 - **可恢复的空间分配**:Oracle提供了一种在空间分配失败的情况下暂停、重启大型数据库操作的方法。这种...
sysbench0.5提供了一套全面的测试场景,包括OLTP(在线事务处理)工作负载、读写混合操作以及CPU性能测试等。通过执行预定义或自定义的测试脚本,sysbench0.5可以帮助管理员了解数据库在高压力下的表现,从而进行...
Oracle 自动数据仓库专家级考试题涉及到多个与Oracle数据库,特别是自动数据仓库(ADW)和自主事务处理(ATP)相关的知识点。以下是对这些内容的详细解释: 1. Oracle Cloud Infrastructure Object Storage 文件...
此外,Oracle数据字典提供了系统元数据信息,子程序和程序包(如过程、函数、自主事务处理和程序包)用于组织和复用代码。触发器是响应特定事件自动执行的代码,内置程序包提供额外功能。备份与恢复策略是数据库管理...
9. **子程序(proc, udf)与自主事务处理**: - **存储过程**是预编译的PL/SQL代码块,可重复使用。 - **函数**返回单一值,常用于计算或验证。 - **自主事务处理**允许在主事务中嵌套事务。 - **包规范与包主体...
教学过程中,教师会引导学生理解关系数据库的基本术语,如表、索引、事务等,并对比Oracle与SQL Server数据库的差异。学生将通过上机实验练习启动Oracle数据库,浏览和理解其界面功能。此外,还会讨论Oracle 9i的新...
- 日志生成:Oracle采用redo logs记录事务对数据库的更改,而DB2使用日志文件记录事务历史。 2. **产品选项**: - Oracle 10g提供企业版、标准版和Express版,其中企业版支持Oracle企业管理器等高级特性。 - DB2...
Oracle数据库以其高效的事务处理能力和丰富的数据类型,为在线考试管理系统提供了坚实的数据存储基础。开发者可以通过JDBC(Java Database Connectivity)接口,实现Java程序与Oracle数据库之间的通信,进行数据的...
重点是创建和使用子程序和程序包,难点是自主事务处理和程序包中的游标管理。 通过这七个章节的学习,学生将能够熟练地在Oracle数据库环境中进行数据操作和管理,为将来从事信息系统开发或数据库管理奠定坚实基础。...
1. 自主事务可以在过程内部独立执行,不影响其他过程。 2. 游标管理,包括静态游标、隐式游标、显示游标和REF游标。 3. 隐式游标的状态可以通过%found、%notfound、%rowcount和%isopen等属性检查。 4. REF游标允许...
在校园数据中心建设中,采用Oracle 10g RAC可以确保数据服务的连续性,即使在一个节点出现故障时,其他节点仍能继续处理事务,从而提高了整个系统的稳定性。 【关系型数据库】关系型数据库是按照关系模型组织数据的...
这个提供者允许开发者使用.NET代码与Oracle数据库进行通信,包括打开和关闭连接、执行SQL语句、处理事务等。OracleClient提供了对Oracle特性的全面支持,如PL/SQL存储过程、游标、绑定变量等。 达梦数据库的数据...