`
luogen33
  • 浏览: 82463 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

oracle中exception处理

阅读更多
有关于异常处理的3个知识点:

1.EXCEPTION_INT编译指示
功能是将某命名异常同某特定Oracle错误关联起来.
主用用来捕捉某特定异常错误,而不是通过OTHERS来处理.
语法:PROGMA EXCEPTION_INIT(exception_name,oracle_error_number)

SQL>
SQL> DECLARE
  2   expa    EXCEPTION;
  3   PRAGMA  EXCEPTION_INIT(expa,-6502);
  4   vn      NUMBER(1);
  5  BEGIN
  6   vn:=24;
  7  EXCEPTION
  8   WHEN expa THEN
  9     dbms_output.put_line('数字或值错误 :  数值精度太高');
10   WHEN OTHERS THEN
11     dbms_output.put_line(SQLCODE);
12     dbms_output.put_line(substr(SQLERRM,1,100));
13  END;
14  /
数字或值错误 :  数值精度太高

PL/SQL procedure successfully completed

SQL>



2.RAISE_APPLICATION_ERROR
功能用来自定义错误消息
语法: RAISE_APPLICATION_ERROR(error_number,error_message,[keep_errors])
error_number:-20 000到-20 999之间的值
error_message:必须少于512个字符
keep_errors:布尔值.为真则新的错误将被加到已存在的错误清单中(如果已存在的话),为假(默认值)则新的错误将代替当前的错误清单.

SQL> BEGIN
  2   UPDATE t SET a='TEST' WHERE a='12345';
  3   IF SQL%NOTFOUND THEN
  4    raise_application_error(-20001,'你傻了?知道没有这样的数据还去更新!');
  5   END IF;
  6  EXCEPTION
  7   WHEN OTHERS THEN
  8    dbms_output.put_line(substr(SQLERRM,1,100));
  9  END;
10  /
ORA-20001: 你傻了?知道没有这样的数据还去更新!

PL/SQL procedure successfully completed

SQL>



3.异常传播

A可执行部分发生的异常
1)如果当前语句块有该异常的处理程序则执行之,控制权交由外层语句块.

当前语句块有该异常的处理程序:
SQL> DECLARE
  2   expa EXCEPTION;
  3   expb EXCEPTION;
  4  BEGIN
  5   BEGIN
  6     RAISE expa;
  7   EXCEPTION
  8     WHEN expa THEN
  9       dbms_output.put_line('异常A产生');
10    END;
11  EXCEPTION
12   WHEN expb THEN
13    dbms_output.put_line('异常B产生');
14  END;
15  /
异常A产生

PL/SQL procedure successfully completed

SQL>


2)如果当前语句没有该异常的处理程序则通过外层语句块中产生该异常来传播该异常,然后通过外层异常处理程序按步骤1来处理.若外层没有该异常的处理程序则异常传播到调用环境.

当前语句块没有该异常的处理程序,外层语句块中产生该异常并处理
SQL> DECLARE
  2   expa EXCEPTION;
  3   expb EXCEPTION;
  4  BEGIN
  5   BEGIN
  6     RAISE expb;
  7   EXCEPTION
  8     WHEN expa THEN
  9       dbms_output.put_line('异常A产生');
10    END;
11  EXCEPTION
12   WHEN expb THEN
13    dbms_output.put_line('异常B产生');
14  END;
15  /
异常B产生

PL/SQL procedure successfully completed

SQL>

当前语句块没有该异常的处理程序,外层语句块中产生该异常且没有该异常处理程序,异常传播到调用环境
SQL> DECLARE
  2   expa EXCEPTION;
  3   expb EXCEPTION;
  4  BEGIN
  5   BEGIN
  6     RAISE expb;
  7   EXCEPTION
  8     WHEN expa THEN
  9       dbms_output.put_line('异常A产生');
10    END;
11  EXCEPTION
12   WHEN expa THEN
13    dbms_output.put_line('异常A产生');
14  END;
15  /

DECLARE
expa EXCEPTION;
expb EXCEPTION;
BEGIN
BEGIN
   RAISE expb;
EXCEPTION
   WHEN expa THEN
     dbms_output.put_line('异常A产生');
  END;
EXCEPTION
WHEN expa THEN
  dbms_output.put_line('异常A产生');
END;

ORA-06510: PL/SQL: 无法处理的用户自定义异常事件
ORA-06512: 在line 6

SQL>

B声明部分发生的异常
声明部分某赋值发生异常,该异常被立即传播到外层语句块,之后按"A可执行部分发生的异常"规则来处理

SQL> BEGIN
  2   DECLARE
  3     vn NUMBER(1):=25;
  4   BEGIN
  5     NULL;
  6   EXCEPTION
  7     WHEN OTHERS THEN
  8       dbms_output.put_line('异常在内层被处理!');
  9    END;
10  EXCEPTION
11   WHEN OTHERS THEN
12    dbms_output.put_line('异常在外层被处理!');
13  END;
14  /
异常在外层被处理!

PL/SQL procedure successfully completed

SQL>

C异常部分发生的异常
异常处理器中也会产生异常,如RAISE或运行错误产生,这里异常立即被传播到外层同"B声明部分发生的异常"

例子1
SQL>
SQL> BEGIN
  2   DECLARE
  3     expa  EXCEPTION;
  4     expb  EXCEPTION;
  5   BEGIN
  6     RAISE expa;
  7   EXCEPTI



分享到:
评论

相关推荐

    Oracle Exception汇总(自定义Oracle异常)

    以上就是Oracle数据库中一些常见的异常及对应的处理方法。在编写PL/SQL代码时,充分理解并合理处理这些异常是确保程序稳定运行的关键。通过预定义异常处理和良好的编程实践,可以提高代码的健壮性和可靠性。

    Oracle_存储过程exception异常处理大全及实例经典最终.docx

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

    oracle常见Exception

    在Oracle数据库管理与应用开发过程中,会遇到各种各样的异常情况,这些异常往往会影响到数据处理的准确性以及系统的稳定性。为了更好地理解和处理这些异常,本篇文章将详细介绍Oracle中常见的几种异常及其解决方案。...

    ORACLE异常处理剖析.pdf

    Oracle异常处理是数据库管理和应用程序开发中的关键环节,它涉及到对程序执行过程中可能出现的错误和异常情况进行有效管理和响应。Oracle数据库,作为一款广泛使用的商业关系型数据库管理系统,提供了强大的异常处理...

    Oracle 存储过程异常处理.docx

    Oracle 存储过程异常处理是指在 Oracle 数据库中使用存储过程时出现的异常情况的处理方法。异常处理是指在程序执行过程中出现错误或异常时,采取相应的处理措施,以确保程序的可靠性和安全性。 一、异常的优点 ...

    ORACLE NO_DATA_FOUND的三种处理办法

    在PL/SQL块中,你可以使用`BEGIN...EXCEPTION...END`结构来捕获并处理`NO_DATA_FOUND`异常。当异常发生时,程序会跳转到`EXCEPTION`部分,而不是终止执行。例如: ```sql DECLARE cursor_name CURSOR FOR SELECT ...

    ORACLE 异常错误处理

    ### ORACLE 异常错误处理详解 #### 一、异常处理概述 在ORACLE数据库的开发过程中,无论是多么复杂的业务逻辑还是简单的数据操作,都不可避免地会遇到各种异常情况。有效的异常处理机制不仅可以帮助开发者更好地...

    C#使用Oracle.ManagedDataAccess.dll轻松访问oracle数据库

    值得注意的是,Oracle.ManagedDataAccess.dll还支持事务处理、游标、批处理操作、异步操作等功能,这些都是开发高效数据库应用程序的关键特性。例如,你可以使用`OracleTransaction`对象来管理数据库事务,确保数据...

    linux安装oracle图形化界面问题处理

    "Linux安装Oracle图形化界面问题处理" Linux安装Oracle图形化界面时经常会遇到各种问题,本文将总结这些问题的解决方法。 一、错误描述:xlib connection to ":0.0" refused by server 解决方案:此错误是由于...

    16oracle的例外处理 PPT

    Oracle数据库系统提供了强大的异常处理机制,使得在编程过程中可以优雅地处理错误情况,避免程序中断,提高系统的稳定性和健壮性。以下是对“16Oracle的例外处理”中涉及的一些关键概念和用法的详细解释: 1. **...

    java对oracle数据库中blob字段的处理

    在IT领域,尤其是在Java开发与Oracle数据库交互的过程中,处理BLOB(Binary Large Object)类型字段是一项常见且重要的任务。BLOB字段主要用于存储大量的二进制数据,如图像、音频、视频或任何其他非文本格式的数据...

    基于C#连接Oracle数据库Oracle.ManagedDataAccess

    在Visual Studio中,可以通过右键点击解决方案资源管理器中的项目,选择“管理NuGet程序包”,然后在搜索框中输入"Oracle.ManagedDataAccess",找到对应的包并安装。 接下来,我们需要编写代码来建立数据库连接。...

    oracle_10g提示java.lang.Exception_Exception_in_sending_Request__null解决方案

    当遇到“java.lang.Exception: Exception in sending Request :: null”的错误时,通常是因为Oracle的EM组件未能正确识别或处理时区信息。默认情况下,Oracle EM配置文件`emd.properties`中的`agentTZRegion`参数被...

    ORACLE游标与异常处理

    在Oracle数据库中,游标(Cursor)和异常处理(Exception Handling)是PL/SQL编程的重要组成部分,它们在处理复杂逻辑和确保数据完整性方面起到关键作用。以下是对这两个主题的详细阐述。 首先,让我们来理解Oracle...

    解决System.Data.OracleClient 需要 Oracle 客户端软件 8.1.7 或更高版本

    标题中的“System.Data.OracleClient 需要 Oracle 客户端软件 8.1.7 或更高版本”是一个常见的错误提示,它涉及到在.NET环境中使用Oracle数据库时遇到的问题。这个错误表明,当你试图在应用程序中使用System.Data....

    Oracle中EXECUTE IMMEDIATE用法

    因此,建议在实际应用中使用`EXCEPTION`块来捕获并处理可能出现的异常情况,确保程序的健壮性和稳定性。 总之,`EXECUTE IMMEDIATE`是Oracle数据库中一个非常有用的特性,它提供了动态执行SQL语句的能力,极大地...

Global site tag (gtag.js) - Google Analytics