当前位置: 代码迷 >> 综合 >> ORACLE——RAISE_APPLICATION_ERROR 转自《达华的空间》
  详细解决方案

ORACLE——RAISE_APPLICATION_ERROR 转自《达华的空间》

热度:90   发布时间:2024-01-09 12:18:05.0

       可能不是很多人知道 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 /* || SQLERRM 将传递给内置过程     

   RAISE_APPLICATION_ERROR 的消息返回 */

  DBMS_OUTPUT.PUT_LINE(SQLERRM);

 END;

 


本次开发中就是用到了

  /*将名称与用于触发器中的错误号码关联起来*/

  errInValidID EXCEPTION;

    PRAGMA EXCEPTION_INIT(errInValidID, -20001);

因为平时没有用过异常对象,都是类似于RAISE_APPLICATION_ERROR(-20001, 'Employees must at least eighteen years of age.');

这种用法。所以这次试试,看到博主的文章收获很大。

  相关解决方案