`

RAISE_APPLICATION_ERROR

 
阅读更多

 

http://www.cnblogs.com/caizhanshu/articles/1129642.html

可能不是很多人知道 RAISE_APPLICATION_ERROR 的用途是什么,虽然从字面上已经猜到这个函数是干什么用的。平时用来测试的异常处理
我们都是通过dbms_output.put_line来输出异常信息,但是在实际的应用中,需要把异常信息返回给调用的客户端。
其实 RAISE_APPLICATION_ERROR 是将应用程序专有的错误从服务器端转达到客户端应用程序(其他机器上的SQLPLUS或者其他前台开发语言)

RAISE_APPLICATION_ERROR 的声明:

PROCEDURE RAISE_APPLICATION_ERROR( error_number_in IN NUMBER, error_msg_in IN VARCHAR2);
里面的错误代码和内容,都是自定义的。说明是自定义,当然就不是系统中已经命名存在的错误类别,是属于一种自定义事务错误类型,才调用此函数。error_number_in 之容许从 -20000 到 -20999 之间,这样就不会与 ORACLE 的任何错误代码发生冲突。error_msg_in 的长度不能超过 2k,否则截取 2k。
举个例吧:
阻止小于18岁的用户增加到数据库 employee 表中


CREATE OR REPALCE TRIGGER minimun_age_check
BEFORE INSERT ON employee
FOR EACH ROW
BEGIN
        IF ADD_MONTHS( :new.birth_date, 18*12> SYSDATE
        THEN
               RAISE_APPLICATION_ERROR(-20001'Employees must at least eighteen years of age.');
        END IF;
END;


下面我们编写一个客户端程序,为了简单,同样用PL/SQL调用

DECLARE

      no_babies_allowed EXCEPTION;

       
/*将名称与用于触发器中的错误号码关联起来*/
       PRAGMA EXCEPTION_INIT(no_babies_allowed, 
-20001);

BEGIN

         
INSERT INTO employee .;

EXCEPTION
         
WHEN no_babies_allowed
         
THEN
                
/*
                || SQLERRM 将传递给内置过程 RAISE_APPLICATION_ERROR 的消息返回
                
*/

                DBMS_OUTPUT.PUT_LINE(SQLERRM);
END;
分享到:
评论

相关推荐

    oracle知识点及常用技术

    1,raise_application_error(-20005,''); 2,when no_data_found then 3 number(6,2)位数,保留小数位数 4 exec =call(包)函数 5create or replace trigger update_cascade after update of deptno on dept --update...

    Oracle skill

    Oracle中RAISE异常详解: 由三种方式抛出异常    1. 通过PL/SQL运行时引擎    2. 使用RAISE语句    3. 调用RAISE_APPLICATION_ERROR存储过程

    Oracle中RAISE异常深入分析

    调用RAISE_APPLICATION_ERROR存储过程 当数据库或PL/SQL在运行时发生错误时,一个异常被PL/SQL运行时引擎自动抛出。异常也可以通过RAISE语句抛出 RAISE exception_name; 显式抛出异常是程序员处理声明的异常的习惯...

    详解Oracle自定义异常示例

    raise_application_error(-20001,'数量小于10'); end if; end; 执行结果: 2.控制台显示: 示例代码: declare v_count number; my_exp exception; begin select count(*) into v_count from dept; if v_count ...

    C# 访问Oracle示例+PL/SQL+存储过程+触发器 完整示例 测试可用 易懂

    RAISE_APPLICATION_ERROR(-20001,'人为引发的异常'); select name into pname from products; exception when too_many_rows then dbms_output.put_line('错误'||SQLERRM); when others then dbms_output.put...

    Oracle8i_9i数据库基础

    §16.4.2.3 使用户raise_application_error处理 286 第十七章 创建包和使用包 287 §17.1 引言 287 §17.2 包的定义 288 §17.3 包的开发步骤 289 §17.4 包的头部说明 289 §17.5 包体的说明 290 §17.6 删除过程、...

    oracle实验报告

    实验一 SQL*PLUS练习 【实验目的】 (1) 了解Oracle的工作环境和基本使用方法。 (2) 练习标准SQL的数据操作,查询命令及其查询优化。 (3) 学会使用高级SQL命令,排序、分组、自连接查询等。 (4) 学会使用SQL*PLUS...

    数据库基础

    §16.4.2.3 使用户raise_application_error处理 286 第十七章 创建包和使用包 287 §17.1 引言 287 §17.2 包的定义 288 §17.3 包的开发步骤 289 §17.4 包的头部说明 289 §17.5 包体的说明 290 §17.6 删除过程、...

    PLSQL.Developer v11.0.4.1774 主程序+ v11中文包+keygen

    &<name="Exception?" checkbox="raise_application_eror(-20000,, '[#]'), null"> Substitution variable checkbox unchecked value now defaults to empty when 1 value is given DDL for indexes on virtual ...

    微软内部资料-SQL性能优化3

    Application A lock resource defined by an application. The lock manager knows nothing about the resource format. It simply compares the 'strings' representing the lock resources to determine whether ...

    Bochs - The cross platform IA-32 (x86) emulator

    - Bochs now can be compiled as native Windows x86-64 application (tested with Mingw gcc 4.5.1 and Microsoft Visual Studio Express 2010) - Added ability to configure CPUID stepping through .bochsrc....

    python3.6.5参考手册 chm

    Application-Layer Protocol Negotiation Support Other Changes sqlite3 subprocess sys sysconfig tarfile threading time timeit tkinter traceback types unicodedata unittest unittest.mock ...

    asp连接数据库代码实例

    on error resume next set conn=server.createobject(\"adodb.connection\") conn.open \"driver={microsoft access driver (*.mdb)};dbq=\"&server.mappath(db) if err then err.clear set conn = Nothing ...

    Sakemail

    but he found the error.- Hou yg has sent to me a revisited IsIPAddress function, so I put the newer function in, infortunely my reply to him doesn‘t want to go.1.8.7- Ok, I discovered a weird bug, ...

    Google C++ Style Guide(Google C++编程规范)高清PDF

    Table of Contents Header Files The #define Guard Header File Dependencies Inline Functions The -inl.h Files Function Parameter Ordering Names and Order of Includes Scoping Namespaces Nested Classes ...

    unigui0.83.5.820

    - 0000712: raise error if Form owner is not either TUniGUIApplication or TApplication - 0000609: TUniTimer: Attach to TUniScreenMask - 0000703: TUniDBLookUpxxx bug when datasource and datafield are ...

    Programming Excel With Vba And .net.chm

    ErrorChecking Members Section 7.8. SpellingOptions Members Section 7.9. Window and Windows Members Section 7.10. Pane and Panes Members Chapter 8. Opening, Saving, and Sharing Workbooks ...

    Access+2000中文版高级编程

    4.3.1 使用Application对象 67 4.3.2 使用References集合 80 4.3.3 使用Forms和Reports集合 80 4.4 通过编程实现同一窗体的多个副本 83 4.4.1 支持多窗体实例 84 4.4.2 检查Employees窗体的代码 84 ...

    Access 2000中文版高级编程(part1)

    4.3.1 使用Application对象 67 4.3.2 使用References集合 80 4.3.3 使用Forms和Reports集合 80 4.4 通过编程实现同一窗体的多个副本 83 4.4.1 支持多窗体实例 84 4.4.2 检查Employees窗体的代码 84 4.4.3 自动...

Global site tag (gtag.js) - Google Analytics