`

<转载> ORACLE RAISE_APPLICATION_ERROR

阅读更多
可能不是很多人知道 RAISE_APPLICATION_ERROR 的用途是什么,虽然从字面上已经猜到这个函数是干什么用的。
      其实 RAISE_APPLICATION_ERROR 是将应用程序专有的错误从服务器端转达到客户端应用程序。

      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;


在客户端,你可以写一个类似下面的程序,来测试一下。

DECLARE

    no_babies_allowed EXCEPTION;

   
     PRAGMA EXCEPTION_INIT(no_babies_allowed, -20001);

BEGIN

       INSERT INTO employee ....;

EXCEPTION
       WHEN no_babies_allowed
       THEN
            
              DBMS_OUTPUT.PUT_LINE(SQLERRM);
END;

------------------------------------------------------------------------------

DBMS_STANDARD包的RAISE_APPLICATION_ERROR过程,可以重新定义异常错误消息,它为应用程序提供了一种与ORACLE交互的方法。语法如下

RAISE_APPLICATION_ERROR(errorNumber,errorString)

errorNumber是数值在-20000到-20999之间,errorString为自定义的错误信息。

如:

update jobs set job_title = v_newJobTitle where job_id = v_jobid;

if sql%notfound then

   RAISE_APPLICATION_ERROR(-20167,'update failure!');

end if;

..........

当在sqlpus中测试时,一旦没有要更新的行,则抛出这样的异常:

ORA-20167: update failure!
分享到:
评论

相关推荐

    Oracle中RAISE异常深入分析

    Oracle提供了多种方式来处理和抛出异常,包括由PL/SQL运行时引擎自动抛出、使用`RAISE`语句显式抛出,以及调用`RAISE_APPLICATION_ERROR`存储过程。 1. **通过PL/SQL运行时引擎抛出异常**: 这是最常见的异常处理...

    在Oracle运行操作系统命令

    RAISE_APPLICATION_ERROR(-20010, 'execute_system: Error while sending. Status=' || status); END IF; status := DBMS_PIPE.RECEIVE_MESSAGE(pipe_name, timeout); IF status &lt;&gt; 0 THEN RAISE_APPLICATION...

    详解Oracle自定义异常示例

    `raise_application_error`函数允许我们在程序中抛出具有负数异常号的用户定义错误,这些异常号通常在-20000到-20999之间,以避免与Oracle预定义的异常号冲突。 在实际开发中,自定义异常能够帮助我们提供更精确的...

    oracle中修改用户密码复杂度的具体例子及操作过程(unix中)

    raise_application_error(-20003, 'Password should contain at least one digit, one character and one punctuation'); END IF; -- 2. Check for the character &lt;&lt;findchar&gt;&gt; ischar:=FALSE; FOR i IN 1.....

    存储过程、触发器、定时器例子(oracle)

    RAISE_APPLICATION_ERROR(-20001, 'Salary cannot be less than $1500'); END check_salary; ``` 3. **定时器**: Oracle中的定时器通常指的是调度器(DBMS_SCHEDULER),这是一个强大的任务调度工具,可以安排...

    oracle包用存储过程图分页

    RAISE_APPLICATION_ERROR(-20001, '页数超出范围'); END IF; -- 构造分页SQL v_sql := 'SELECT * FROM (' || p_sql || ') WHERE ROWNUM &lt;= ' || p_page * p_pageSize; v_sql := v_sql || ' MINUS '; v_sql :=...

    Oracle使用配置文件创建口令管理策略

    RAISE_APPLICATION_ERROR(-20003, '口令必须包含至少一个大写字母'); ELSIF NOT REGEXP_LIKE(password, '[0-9]') THEN RAISE_APPLICATION_ERROR(-20004, '口令必须包含至少一个数字'); ELSE RETURN TRUE; END ...

    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...

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

    " checkbox="raise_application_eror(-20000,, '[#]'), null"&gt; Substitution variable checkbox unchecked value now defaults to empty when 1 value is given DDL for indexes on virtual columns would specify ...

    BLOG_Oracle_lhr_如何限定特定IP访问Oracle数据库.pdf

    除了介绍限定IP访问的方法,本篇博客还涉及到了其他知识点,例如如何将信息写入到Oracle的告警日志中,以及RAISE_APPLICATION_ERROR函数不能抛出错误到客户端环境的问题。告警日志记录了数据库的重要事件,包括错误...

    Oracle设置用户密码复杂度的函数

    8 raise_application_error(-20001, 'Password must be at least 6 characters long'); 9 END IF; 10 INSERT INTO passwd_changed VALUES (username, old_password, password); 11 RETURN TRUE; 12 END; ``` 该函数...

    oracle存储过程、函数、触发器应用举例

    RAISE_APPLICATION_ERROR(-20001, '入学时间不能晚于当前时间'); END IF; END; ``` 通过以上介绍,我们可以看到Oracle中的存储过程、函数和触发器都是强大的工具,它们能够帮助开发人员更高效地管理数据库,并...

    oracle数据库 游标、存储过程和触发器.ppt

    RAISE_APPLICATION_ERROR(-20001, 'Salary is too high'); END IF; END my_trigger; 3.2 触发器的类型 触发器可以分为两种:行级触发器和语句级触发器。行级触发器可以在每一行数据被操作时被触发,而语句级...

    oracle触发器案例

    - **错误处理**:若为非工作日,则通过 `RAISE_APPLICATION_ERROR` 抛出错误,阻止 DML 操作执行。 #### 案例二:区分不同操作类型的工作日限制 **目标**:对于 EMP 表,在非工作日时,根据不同的 DML 操作抛出...

    Oracle 实验代码(1-6)

    例如,创建一个在插入新学生记录时检查年龄是否合法的触发器,`CREATE TRIGGER check_age BEFORE INSERT ON students FOR EACH ROW WHEN (NEW.age &lt; 18) BEGIN RAISE_APPLICATION_ERROR(-20000, 'Age must be at ...

    PL_SQL中的异常处理方法研究.pdf

    用户可以创建自定义异常,通常使用RAISE或RAISE_APPLICATION_ERROR过程引发。自定义异常是通过在异常处理部分使用RAISE语句并指定异常名称来触发的。 5. RAISE_APPLICATION_ERROR使用 RAISE_APPLICATION_ERROR是一...

    ORACLE_PlSql-甲骨文学习笔记

    RAISE_APPLICATION_ERROR(-20001, '年龄不能为负数'); END IF; EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('发生错误: ' || SQLERRM); END; ``` ##### 7 存储过程 存储过程是在数据库中存储的一组预编译...

    Oracle skill

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

    Oracle PL/SQL中异常高级特性示例解析

    总结来说,Oracle PL/SQL的异常处理机制包括`RAISE_APPLICATION_ERROR`、异常命名以及`WHEN OTHERS THEN`,这些高级特性使得开发者能够灵活应对各种运行时问题,提供更符合业务逻辑的错误处理。通过巧妙运用这些特性...

Global site tag (gtag.js) - Google Analytics