博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
RAISE_APPLICATION_ERROR用法
阅读量:6110 次
发布时间:2019-06-21

本文共 1138 字,大约阅读时间需要 3 分钟。

hot3.png

可能不是很多人知道 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
;

转载于:https://my.oschina.net/u/138995/blog/198419

你可能感兴趣的文章
ecshop后台权限增加
查看>>
C#装饰者模式实例代码
查看>>
ASP.NET MVC显示异常信息
查看>>
第 9 章 MySQL数据库Schema设计的性能优化
查看>>
前nginx后Apache+Node反向代理
查看>>
Web前端开发十日谈
查看>>
关于jsp页面乱码写得好的一篇文章
查看>>
Linux 基础知识
查看>>
写了一个采集的类,个人感觉不错,代码普通,但灵活性高
查看>>
collector v1.02采集核心代码版本升级中
查看>>
ddns动态域名解析系统
查看>>
Spring Data Redis 2 之消息订阅
查看>>
centos中如何查看tomcat的版本
查看>>
[XML/RSS] XML加ASP实现网页自动适应多国语言
查看>>
Android小笔记自定义控件
查看>>
学会思考
查看>>
docker 镜像仓库Harbor https访问
查看>>
dblink创建
查看>>
磁盘管理
查看>>
luov之SMTP报错详解
查看>>