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

oracle 自主事务

 
阅读更多

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学习的关键领域,旨在帮助用户深入理解Oracle数据库的各个方面,提升数据库管理技能。 首先,我们要关注的是"关系数据库与SQL语言环境"。SQL(Structured Query Language...

    Oracle自主数据仓库云介绍.pdf

    Oracle自主数据仓库云是Oracle公司推出的一种创新的云端数据仓库解决方案,旨在简化数据管理,提高效率并增强安全性。这个服务基于Oracle Database 18c,一个先进的数据库版本,结合了Oracle Cloud Infrastructure的...

    Oracle中独立事务的学习.docx

    在Oracle中,通过使用`PRAGMA AUTONOMOUS_TRANSACTION`语句,我们可以创建一个自主事务(Autonomous Transaction),这种事务在当前事务的上下文中运行,但有自己的提交和回滚机制,不受外部事务的影响。 1. **独立...

    oracle触发器调用存储过程

    6. **自主事务(Autonomous Transaction)** 7. **触发器与事务管理** #### 触发器基本概念 在Oracle数据库中,触发器是一种特殊类型的存储过程,它被设计为当特定事件发生时自动执行。这些事件通常包括插入、更新...

    oci-arch-oke-atp

    Oracle自主事务处理(ATP)是一种云数据库服务,它消除了操作和保护高性能数据库的复杂性。 该服务自动执行数据库的配置,配置,调整,扩展,修补,加密和修复。 先决条件 有权manage Oracle Cloud Infrastructure...

    Oracle PL/SQL best practice

    - 自主事务:了解如何在PL/SQL块中使用自主事务来实现局部控制,确保数据的一致性,同时不影响全局事务。 - 调用者权利:理解Invoker's Rights与Definer's Rights的区别,确保安全地执行代码,尤其是在共享库或API...

    数据库事务管理

    - **自主事务**:自主事务是指在事务处理过程中,可以嵌套其他事务,这些嵌套事务具有独立的开始和结束。 - **可恢复的空间分配**:Oracle提供了一种在空间分配失败的情况下暂停、重启大型数据库操作的方法。这种...

    数据库经典压测工具sysbench双版本 sysbench0.5支持oracle sysbench1.1 支持达梦 附详细文档

    sysbench0.5提供了一套全面的测试场景,包括OLTP(在线事务处理)工作负载、读写混合操作以及CPU性能测试等。通过执行预定义或自定义的测试脚本,sysbench0.5可以帮助管理员了解数据库在高压力下的表现,从而进行...

    Oracle 自动数据仓库专家级考试题

    Oracle 自动数据仓库专家级考试题涉及到多个与Oracle数据库,特别是自动数据仓库(ADW)和自主事务处理(ATP)相关的知识点。以下是对这些内容的详细解释: 1. Oracle Cloud Infrastructure Object Storage 文件...

    oracle教程

    此外,Oracle数据字典提供了系统元数据信息,子程序和程序包(如过程、函数、自主事务处理和程序包)用于组织和复用代码。触发器是响应特定事件自动执行的代码,内置程序包提供额外功能。备份与恢复策略是数据库管理...

    Oracle从基础到熟练(太实用了)

    9. **子程序(proc, udf)与自主事务处理**: - **存储过程**是预编译的PL/SQL代码块,可重复使用。 - **函数**返回单一值,常用于计算或验证。 - **自主事务处理**允许在主事务中嵌套事务。 - **包规范与包主体...

    大型数据库技术(Oracle数据库)(教案).doc

    教学过程中,教师会引导学生理解关系数据库的基本术语,如表、索引、事务等,并对比Oracle与SQL Server数据库的差异。学生将通过上机实验练习启动Oracle数据库,浏览和理解其界面功能。此外,还会讨论Oracle 9i的新...

    Oracle DBA如何管理DB2

    - 日志生成:Oracle采用redo logs记录事务对数据库的更改,而DB2使用日志文件记录事务历史。 2. **产品选项**: - Oracle 10g提供企业版、标准版和Express版,其中企业版支持Oracle企业管理器等高级特性。 - DB2...

    javaSE阶段写的学生在线考试管理系统_Oracle

    Oracle数据库以其高效的事务处理能力和丰富的数据类型,为在线考试管理系统提供了坚实的数据存储基础。开发者可以通过JDBC(Java Database Connectivity)接口,实现Java程序与Oracle数据库之间的通信,进行数据的...

    《ORACLE数据库应用》课程教学大纲.docx

    重点是创建和使用子程序和程序包,难点是自主事务处理和程序包中的游标管理。 通过这七个章节的学习,学生将能够熟练地在Oracle数据库环境中进行数据操作和管理,为将来从事信息系统开发或数据库管理奠定坚实基础。...

    ACCP-oracle学习

    1. 自主事务可以在过程内部独立执行,不影响其他过程。 2. 游标管理,包括静态游标、隐式游标、显示游标和REF游标。 3. 隐式游标的状态可以通过%found、%notfound、%rowcount和%isopen等属性检查。 4. REF游标允许...

    基于ORACLE 10g RAC校园数据中心建设方案研究.pdf

    在校园数据中心建设中,采用Oracle 10g RAC可以确保数据服务的连续性,即使在一个节点出现故障时,其他节点仍能继续处理事务,从而提高了整个系统的稳定性。 【关系型数据库】关系型数据库是按照关系模型组织数据的...

    适用于Oracle 和达梦数据库8 的 IDbConnection 的数据库驱动链接库

    这个提供者允许开发者使用.NET代码与Oracle数据库进行通信,包括打开和关闭连接、执行SQL语句、处理事务等。OracleClient提供了对Oracle特性的全面支持,如PL/SQL存储过程、游标、绑定变量等。 达梦数据库的数据...

Global site tag (gtag.js) - Google Analytics