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自主事务处理(ATP)是一种云数据库服务,它消除了操作和保护高性能数据库的复杂性。 该服务自动执行数据库的配置,配置,调整,扩展,修补,加密和修复。 先决条件 有权manage Oracle Cloud Infrastructure...
③:自主事务处理 ④:包规范|包主体 十一.触发器|内置包 ①:触发器类型 ②:触发器原理 ③:new和old 两个行类型变量 ④:递归 ⑤:内置包 十二.导入导出 ①:导入导出/整个DB/表空间/表/用户 十三.其他
3、资源分为两类:真实应用场景的存储过程案例61个(真实业务案例,供学习参考)、通用存储过程案例57个(涉及序列、表及列操作、主键唯一索引约束、事务、内存、权限、导出文件、视图、迭代、备份、参数校验等,可...
并行操作、数据仓库优化,多媒体支持,内置消息,支持分区,内置Java虚拟机,虚拟专用数据库,闪回查询,支持集群和MPP,支持分布式SQL和事务处理,平台可移植性,自主管理数据库,安全企业搜索等等;
**去“IOE”**这个概念,最早由王坚院士在刚刚加入阿里时提出,其目标是**将IBM 的小型机、Oracle数据库、EMC存储设备从阿里的IT体系中去除,代之以自主研发的系统**。 随着**国产云计算服务水平**的不断发展,**...
移动和改进对OCI和ATP的应用该研讨会涵盖了将现有数据库应用程序移至Oracle云和自主事务处理(ATP)的概念。 该课程可以是讲师指导的课程,也可以是自定进度的学习课程。讲师指导的培训对于讲师指导的培训,请单击此...
跨平台支持本地/远程文件、MSSQL、ORACLE、MySQL、PostgreSQL、达梦等数据库完全、增量、事务日志备份。 类Windows计划任务模式的备份任务设置,可自由组合无限复合式备份任务;支持备份文件ZIP压缩后通过Lan/Ftp/...
基于VB6自主研发的轻量级数据库查询客户端工具,启动速度较快,所占资源较小。 附源码,对初学数据库编程的童鞋有所裨益! 1、支持SQLServer、Oracle、Sybase、DB2数据库平台 2、单句执行:可以提交单一的SQL语句...
数据交换平台ZCBUS是本企业自主研发的一款数据融合产品。用户无需编写任何代码,通过可视化图形配置界面,只需几分钟即可自服务式的部署一条实时数据管道(链路),并提供丰富的管理功能:数据计算批流一体、数据...
跨平台支持本地/远程/FTP文件、MSSQL、ORACLE、MySQL、PostgreSQL、达梦等数据库完全、增量、事务日志备份与恢复。 只需一机安装,即可管理无限台计算机的数据库/文件备份;类Windows计划任务模式的备份任务设置,...
个人事务管理 事务安排 通讯录 工作计划 日程安排 .工作流 1.系统内置四类工作流处理 1.发文 2.收文 3.普通办件 4.月报 5.会议 发文:拟稿、审核、会签、签发、归档、发布 收文:登记、传阅、审批、归挡、发布 ...
个人事务管理 事务安排 通讯录 工作计划 日程安排 .工作流 1.系统内置四类工作流处理 1.发文 2.收文 3.普通办件 4.月报 5.会议 发文:拟稿、审核、会签、签发、归档、发布 收文:登记、传阅、审批、归挡、发布 ...
个人事务管理 事务安排 通讯录 工作计划 日程安排 .工作流 1.系统内置四类工作流处理 1.发文 2.收文 3.普通办件 4.月报 5.会议 发文:拟稿、审核、会签、签发、归档、发布 收文:登记、传阅、审批、归挡、发布...
Cache Server提供了和传统关系数据库管理系统(MS SQL SERVER、Oracle、Sybase、DB2、mysql)的访问接口,可以以同步或异步方式和RDBMS交互。 Cache Server内存数据库为需要容错服务的系统提供实时数据库复制功能...
Cache Server嵌入式(实时)内存数据库是具有自主知识产权的企业级内存数据库,是作者多年工作经验的结晶。Cache Server提供详细的中文文档(安装手册、使用手册、开发文档、练习手册、通讯协议等)和服务。 Cache...
目前,绝大多数流行的关系型数据库管理系统,如Oracle,Sybase,Microsoft SQL Server,Access等都采用了SQL语言标准。虽然很多数据库都对SQL语句进行了再开发和扩 展,但是包括Select,Insert,Update,Delete,Create,...
目前,绝大多数流行的关系型,如Oracle,Sybase,Microsoft SQL Server,Access等都采用了SQL语言标准。虽然很多数据库都对SQL语句进行了再开发和扩 展,但是包括Select,Insert,Update,Delete,Create,以及Drop在内的...