`
mmclxq
  • 浏览: 6797 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
最近访客 更多访客>>
社区版块
存档分类
最新评论

Oracle自定义异常收集(二)

阅读更多

1、非预定义异常使用预定义异常,只能处理21个Oracle错误.而当使用PL/SQL开发应用程序时,可能还遇到其他的上结错误. 使用非预定义异常的步骤如下: 定义异常 -> 关联异常和错误 -> 引用例外 当定义Oracle错误和例外之间的关联关系时,要使用伪过程EXCEPTION_INTI.下面以处理ORA-02291错误为例说明:

      DECLARE e_integrity EXCEPTION; 
      PRAGMA EXCEPTION_INIT(e_integrity,-2291);
      BEGIN 
          UPDATE emp SET deptno=&dno WHERE empno=&eno; 
      EXCEPTION WHEN e_integrity THEN 
          DBMS_OUTPUT.PUT_LINE('该部门不存在.'); 
      END;

2、处理自定义异常预定义异常和非预定义异常都与Oracle错误有关,并且出现Oracle错误时会自动触发. 而自定义异常与Oracle错误没有任何关联,它是开发人员为特定情况所定义的异常. 自定义异常必须显式触发.使用步骤如下: 定义异常 -> 显式触发异常 -> 引用异常首先要在定义部分(DECLARE)定义异常,然后在执行部分(BEGIN)触发异常(RAISE语句), 最后在异常处理部分(EXCEPTION)捕捉处理.如下:

      DECLARE e_integrity EXCEPTION;
      PRAGMA EXCEPTION_INIT(e_integrity,-2291);
      e_no_employee EXCEPTION;
      BEGIN
          UPDATE emp SET deptno=&dno WHERE empno=&eno; 
     IF SQL%NOTFOUND THEN
          RAISE e_no_employee;
     END IF;
     EXCEPTION WHEN e_integrity THEN 
         DBMS_OUTPUT.PUT_LINE('该部门不存在.'); 
     WHEN e_no_employee THEN 
         DBMS_OUTPUT.PUT_LINE('该雇员不存在.');
     END;

3、使用异常函数在PL/SQL块中出现Oracle错误时,通过使用例外函数可以取得错误号以及相关的错误消息,函数SQLCODE用于取得Oracle错误号. SQLERRM则用于取得与之相关的错误消息.另外,在存储过程,函数和包中使用RAISE_APPLICATION_ERROR可以自定义错误号和消息.

     DECLARE v_ename emp.ename%TYPE; 
     BEGIN
         SELECT ename INTO v_ename FROM emp WHERE sal=&&v_sal;
         DBMS_OUTPUT.PUT_LINE('雇员名:'||v_ename);
     EXCEPTION WHEN NO_DATA_FOUND THEN
         DBMS_OUTPUT.PUT_LINE('不存在工资为'||&v_sal||'雇员');
     WHEN OTHERS THEN
         DBMS_OUTPUT.PUT_LINE('错误号'||SQLCODE); 
         DBMS_OUTPUT.PUT_LINE(SQLERRM);
     END;

4、RAISE_APPLICATION_ERROR 该过程用于自定义错误消息.只能在数据库端的子程序(过程,函数,包,触发器)中使用,不能在匿名块和客户端程序是使用. 语法如下: raise_application_error(error_number,message[,{TRUE | FALSE}]); error_number : 错误号,范围是: -20000 ~ -20999之间的负整数; message : 错误消息,长度不能超过2048字节; 第三个可靠选参数,如果TRUE,该错误会被放在先前错误堆栈中;如果FALSE(默认),则替换先前所有错误. 例:

     CREATE OR REPLACE PROCEDURE raise_comm(eno NUMBER,commission NUMBER) IS v_comm emp.comm%TYPE;
     BEGIN
           SELECT comm INTO v_comm FROM emp WHERE emp=eno;
           IF v_comm IS NULL THEN
                RAISE_APPLICATION_ERROR(-20001,'该员工无补助.');
           END IF; 
           EXCEPTION WHEN NO_DATA_FOUND THEN 
                DBMS_OUTPUT.PUT_LINE('该雇员不存在.');
    END;

分享到:
评论

相关推荐

    zabbix 监控 oracle

    7. **使用相关工具**:压缩包中的相关工具可能包括自定义脚本或程序,用于扩展Zabbix的功能,例如自动发现Oracle实例、收集特定性能指标或处理特定警报。 在实际操作中,你还需要关注一些关键的Oracle监控指标,如...

    Oracle.zip压缩包

    10. **PL/SQL增强**:Oracle的内置编程语言PL/SQL在11g中得到了扩展,增加了诸如游标变量、异常处理、包的使用等方面的改进。 在安装"orgcle"之前,你需要确保系统满足Oracle 11g的硬件和软件需求,包括操作系统...

    自定义表单web工程

    这样的功能对于构建各种业务场景下的数据收集和处理系统非常有用,例如在线报名、调查问卷、订单提交等。 在这个工程中,使用了JDK 1.4作为Java开发环境。JDK(Java Development Kit)是Oracle公司提供的Java编程...

    Oracle参考书籍目录

    - **Statspack 的作用**:了解Statspack在Oracle 9i中的角色,即收集性能统计数据以供分析。 - **安装与配置**:学习如何安装和配置Statspack,以便能够收集性能数据。 - **性能报告**:掌握如何生成和解读Statspack...

    oracle压力测试工具 java版

    6. **异常处理**:在高压力下,数据库可能出现错误或异常,工具应能捕获并记录这些异常,以便开发者定位问题。 7. **可扩展性与兼容性**:由于是Java编写,该工具可能具有良好的跨平台性,可以在多种操作系统上运行...

    Oracle Database 11g PLSQL编程实战

    - RAISE:引发自定义异常。 5. **PL/SQL与SQL的交互** - DML语句(INSERT, UPDATE, DELETE):在PL/SQL中执行对数据库表的操作。 - SELECT INTO:从查询结果中提取单行数据到PL/SQL变量。 - BULK COLLECT:批量...

    VC++之数据库技术之用ADO连接Oracle数据库[收集].pdf

    同时,添加消息响应函数和必要的自定义函数,比如连接数据库的函数。 在添加代码的过程中,有几点需要注意: 1. 在“stdafx.h”文件中,导入msado15.dll库,并且重命名EOF为adoEOF,以避免与MFC中的EOF冲突。 2. ...

    Oracle® Database 2 Day + Performance Tuning Guide

    - **自定义报告**:根据需求生成自定义报告,帮助用户深入了解系统性能状况。 #### 实践案例 本书还提供了多个实际场景下的性能调优案例,包括但不限于: - 如何使用AWR报告分析并定位SQL执行效率低下的原因; - ...

    oracle之监控报警

    8. **监控脚本和自定义解决方案**: 除了Oracle内置的监控工具,DBA还可以编写自定义脚本来监测特定的性能指标,结合DBMS_MAIL发送定制化的报警邮件。 综上所述,Oracle的监控报警机制涵盖了多种工具和技术,从基础...

    Oracle PL SQL 程序设计 下 第五版

    - 用户可以自定义异常,或者使用预定义的系统异常。 7. **存储过程与函数** - 存储过程是一组PL/SQL语句,可以接收参数,执行后不返回值。 - 函数类似于存储过程,但必须返回一个值,可以作为查询的一部分使用。...

    Oracle基础知识习题

    二、Oracle数据库对象 1. 表(Table):存储数据的基本单元,由列和行组成。 2. 视图(View):虚拟表,基于一个或多个表的查询结果,提供数据的另一种访问方式。 3. 索引(Index):提高数据检索速度的数据结构,...

    oracle监控系统

    9. **日志分析**:收集和分析Oracle数据库的日志信息,辅助诊断和问题排查。 10. **性能调优**:根据监控数据提出数据库参数调优建议,提升整体性能。 通过Oracle 监控系统,DBA可以更加高效地管理工作,降低维护...

    Oracle 10g 学习课件

    Oracle 10g 学习课件是一套全面的教程,专为想要深入理解Oracle数据库管理系统的人们设计。Oracle数据库是全球广泛使用的大型企业级数据库系统,尤其在金融、电信和政府等行业中占据主导地位。Oracle 10g是其第十个...

    Oracle Enterprise Manager Getting Started with the Oracle Standa

    2. **监控与警报**:Oracle标准管理包允许实时监控数据库性能,通过警报机制提供异常检测,帮助管理员及时发现并解决问题。这部分可能会介绍如何设置性能阈值、创建自定义警报和管理警报策略。 3. **性能优化**:...

    Overview of Oracle Business Intelligence Applications

    Oracle BI应用程序提供了一系列强大的分析工具,帮助用户发现模式、趋势和异常。这些工具支持各种分析类型,包括描述性、预测性和规范性分析。通过使用Oracle BI,企业能够更好地了解其业务运作方式,并采取行动以...

    oracle使用经验

    - 这个标签可能暗示文章中会涉及Oracle的源码分析或自定义工具的开发,这将帮助读者更深入地理解Oracle的工作原理和扩展其功能。 综上所述,“Oracle使用经验”涵盖了Oracle数据库的多个重要方面,无论是对于新手...

    oracle 中 pl/sql 只是学习方法

    5. **异常处理**:PL/SQL的异常处理机制允许我们在遇到错误时执行特定的代码块,通过RAISE语句自定义异常,或者使用预定义的系统异常。 6. **事务管理**:在PL/SQL中,可以使用BEGIN、COMMIT、ROLLBACK语句进行事务...

    json格式数据到入oracle数据库java源码

    - 使用BULK COLLECT和FORALL语句:Oracle支持批量收集查询结果并一次插入多个行,显著提升性能。 - 索引和表分区:根据数据特点创建索引或使用分区策略,加快查询和插入速度。 综上所述,从JSON格式数据到Oracle...

    《Oracle从入门到精通》书中代码

    《Oracle从入门到精通》是一本旨在帮助初学者和进阶者掌握Oracle数据库系统的书籍,其配套代码提供了实践操作的机会,使理论与实践相结合,更好地理解Oracle的强大功能和使用技巧。Oracle是全球广泛使用的数据库管理...

Global site tag (gtag.js) - Google Analytics