`

oracle exception 的 传播

 
阅读更多

没研究出来oracle exception的传播

 

  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
  begin
    insert into tree_tb (id, NODE_NAME) values ('1', '1');
    test2(p_RETCODE, p_retInfo);
    if p_RETCODE <> 1 then
      raise test_exception;
    end if;
    if 1 = 1 then
      p_RETCODE := '-1';
      p_retInfo := 'test1插入异常。';
      raise test_exception;
    end if;
    p_RETCODE := '1';
    p_retInfo := 'test1插入成功。';
  
  exception
    WHEN test_exception then
      DBMS_OUTPUT.PUT_LINE('Error code ' || p_RETCODE || ': ' || p_retInfo);
      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
  begin
    insert into tree_tb (id, NODE_NAME) values ('2', '2');
    insert into tree_tb (id, NODE_NAME) values ('3', '3');
  
    if 1 = 1 then
      p_RETCODE := '-2';
      p_retInfo := '插入2失败';
      raise test_exception;
    end if;
  
    insert into tree_tb (id, NODE_NAME) values ('4', '4');
    p_RETCODE := '1';
    p_retInfo := 'test2插入成功。';
  
  exception
    WHEN test_exception then
      dbms_output.put_line('errorCode: ' || p_RETCODE || 'errorInfo ' ||
                           p_retInfo);
      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
  
  begin
    test1(p_RETCODE, p_retInfo);
    if p_RETCODE <> 1 then
      raise test_exception;
    end if;
    insert into tree_tb (id, NODE_NAME) values ('5', '5');
  exception
    WHEN test_exception then
      dbms_output.put_line('errorCode: ' || p_RETCODE || 'errorInfo ' ||
                           p_retInfo);
      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_存储过程exception异常处理大全及实例经典最终.docx

    ### Oracle 存储过程 Exception 异常处理详解 #### 1. 异常处理概念 在 Oracle 存储过程中,异常处理是一项非常重要的技术,它能够帮助开发人员处理那些不可预见的情况,确保程序的健壮性和稳定性。异常处理主要...

    hibernate链接oracle

    - `transactionAttributes`: 定义了事务传播行为,其中`*`表示所有方法都采用`PROPAGATION_SUPPORTS`传播行为,当发生`Exception`异常时则不参与事务。 #### 业务服务配置 最后,定义了两个业务服务bean:`...

    Oracle 错误控制一览

    2. **增强可靠性**:异常机制允许开发者在出现错误时立即采取行动,而不是让错误悄无声息地传播,导致后续操作的失败。这有助于及时恢复系统的正常状态,减少潜在的数据损坏风险。 3. **优化性能**:合理利用异常...

    Introduction to Oracle - Sql Plsql (Vol2)

    根据文档提供的信息,该文档受版权法保护,并且其复制、传播或泄露均需获得Oracle Corporation的明确书面许可。此外,如果该文档被分发给美国政府机构,则须遵循特定的规定和限制条件。 #### 结论 本文档...

    Oracle8i_9i数据库基础

    §16.4.2.2 使用户EXCEPTION_INIT处理 286 §16.4.2.3 使用户raise_application_error处理 286 第十七章 创建包和使用包 287 §17.1 引言 287 §17.2 包的定义 288 §17.3 包的开发步骤 289 §17.4 包的头部说明 289...

    Oracle的PL/SQL编程手册

    根据文档提供的版权信息,本手册的所有权归Oracle公司所有,未经许可不得进行复制或传播。同时,文档还强调了反编译、逆向工程等活动受到法律限制。这些规定旨在保护Oracle的知识产权,并确保用户遵守软件许可证协议...

    Oracle PL/SQL语言初级教程

    - 常用的异常处理方法包括EXCEPTION WHEN、RAISE、RAISE_APPLICATION_ERROR等,可以定制错误响应。 通过这个初级教程,学习者将能够理解PL/SQL的基础概念,编写简单的存储过程、函数,并进行基本的数据操作和控制...

    ORACLE PL_SQL中的例外处理初探 (1).pdf

    异常的传播规则是这样的:当一个异常在块内没有被处理时,它会被传播到包含这个块的外部块,这个过程一直持续到找到处理异常的代码或到达最外层,如果没有找到处理程序,异常将被返回给调用者或宿主环境。...

    Oracle PLSQL

    **5.2 异常错误传播** - **RAISE**:手动引发异常。 - **WHEN OTHERS**:捕获未指定的异常。 #### 六、存储函数和过程 **6.1 创建函数** - **函数定义**:使用CREATE FUNCTION语句创建函数。 - **参数传递**:...

    PLSQL_Oracle 编程讲义

    - **异常处理部分(EXCEPTION)**:处理程序运行时可能出现的异常情况。 **2.2 标识符** PL/SQL中的标识符用来命名变量、常量等。它们必须遵循特定的规则,例如不能使用Oracle关键字作为标识符名称。 **2.3 变量...

    Oracle Developer:第12章 高级PLSQL.pdf

    异常处理的基本结构是通过EXCEPTION子句实现的,它包含一系列WHEN子句,每个子句关联一个异常名。当异常发生时,PL/SQL会停止执行当前块的其余部分,查找匹配的异常处理程序。如果找到,就执行该处理程序,然后返回...

    plsql_oracle 8i 编程讲义

    PL/SQL程序的基本单位是块(Block),每个块由三个部分组成:声明部分(DECLARATION)、执行部分(EXECUTION)和异常处理部分(EXCEPTION)。 **§2.2 PL/SQL结构** 1. **声明部分**: 用来声明变量、常量、游标等...

    PLSQL Program Design

    PL/SQL程序通常在Oracle数据库环境中运行,可以通过多种方式执行,比如SQL*Plus、Oracle Enterprise Manager等客户端工具。 #### 二、PL/SQL块结构和组成元素 **2.1 PL/SQL块** PL/SQL程序的基本单元是块,一个...

Global site tag (gtag.js) - Google Analytics