例外情况-4

注意:-

=========

1.只能在PL / SQL块,子程序或程序包的声明部分声明异常。

2.Exception和变量声明相似。 但是请记住,异常是错误条件,而不是数据项。 与变量不同,异常不能出现在赋值语句或SQL语句中。 但是,相同的作用域规则适用于变量和异常。

3.PL/SQL例外的范围规则

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

不能在同一块中两次声明异常。 但是可以在两个不同的块中声明相同的异常。

块中声明的异常被认为是该块本地的,而其所有子块都是全局的。 因为块只能引用局部或全局异常,所以封闭的块不能引用在子块中声明的异常。

如果在子块中重新声明全局异常,则以本地声明为准。 因此,除非在带标签的块中声明了子异常,否则子块不能引用全局异常。

4.过程RAISE_APPLICATION_ERROR可让您从存储的子程序中发出用户定义的ORA-错误消息。 这样,您可以向应用程序报告错误,并避免返回未处理的异常。

要调用RAISE_APPLICATION_ERROR,请使用以下语法

raise_application_error(error_number,message [,{TRUE | FALSE}]));

其中error_number是在-20000 .. -20999范围内的负整数,而message是一个字符串,最长为2048个字节。

如果可选的第三个参数为TRUE,则将错误放置在先前错误的堆栈中。 如果参数为FALSE(默认值),则该错误将替换所有先前的错误。

RAISE_APPLICATION_ERROR是DBMS_STANDARD程序包的一部分,并且与STANDARD程序包一样,您不需要限定对其的引用。

应用程序只能从正在执行的存储子程序(或方法)中调用raise_application_error。 调用时,raise_application_error会结束子程序,并向应用程序返回用户定义的错误号和消息。 错误号和消息可以像任何Oracle错误一样被捕获。

5.Exception OTHERS可以处理所有类型的异常,因此它必须是异常列表中的最后一个。

PRAGMA EXCEPTION_INIT

=====================


CREATE OR REPLACE PROCEDURE raiseexp IS
empty EXCEPTION;    --user defined exception declared
PRAGMA EXCEPTION_INIT(empty, -01400);  
--initialized to oracle defined number (this exceptionis raised when a null is inserted into afield with not null constraint)
BEGIN
INSERT INTO emp(empno)  VALUES  (null);
COMMIT;
EXCEPTION
WHEN empty THEN
dbms_output.put_line('ERROR: Trapped Fields Left Null');
--when the exception is raised customized message is displayed instead of oracle defined message.
WHEN OTHERS THEN
dbms_output.put_line(SQLERRM);
END ;  
注意;-在上述过程中,用户尝试将空值输入到非空字段(EMP表的EMPNO字段)中,该字段受到限制。

From: https://bytes.com/topic/oracle/insights/655848-exceptions-4-a

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值