PRAGMA EXCEPTION_INIT的用法
来源:互联网 发布:sql server case when 编辑:程序博客网 时间:2024/04/29 10:12
PRAGMA EXCEPTION_INIT的用法
PRAGMA EXCEPTION_INIT的用法
如果要处理未命名的内部异常,必须使用OTHERS异常处理器或PRAGMA EXCEPTION_INIT 。PRAGMA由编译器控制,或者是对于编译器的注释。PRAGMA在编译时处理,而不是在运行时处理。EXCEPTION_INIT告诉编译器将异常名与ORACLE错误码结合起来,这样可以通过名字引用任意的内部异常,并且可以通过名字为异常编写一适当的异常处理器。
在子程序中使用EXCEPTION_INIT的语法如下:
PRAGMA EXCEPTION_INIT(exception_name, -Oracle_error_number);
在该语法中,异常名是声明的异常,下例是其用法:
DECLARE
deadlock_detected EXCEPTION;
PRAGMA EXCEPTION_INIT(deadlock_detected, -60);
BEGIN
... -- Some operation that causes an ORA-00060 error
EXCEPTION
WHEN deadlock_detected THEN
-- handle the error
END;
下面看一个例子
create or replace procedure SP_Del_Test
(P_ItemAdmin in mfitem.itemadmin%type, --ItemAdmin
P_ItemCd in mfitem.itemcd%type, --ItemCode
P_Return out number --输出参数
) is
exp exception;
PRAGMA Exception_Init(exp, -2292);
begin
delete from mfitem t
where t.itemcd = P_ItemCd
and t.itemadmin = P_ItemAdmin; --这一句会引发-2292异常,有级连删除异常
EXCEPTION
WHEN EXP THEN
P_Return := 9;
ROLLBACK;
WHEN OTHERS THEN
ROLLBACK;
end SP_Del_Test;
使用自定义的异常,自定我们自己的错误消息:过程RAISE_APPLICATION_ERROR
调用RAISE_APPLICATION_ERROR的语法如下:
raise_application_error(error_number, message[, {TRUE | FALSE}]);
error_number是一个范围在-20000至-20999之间的负整数,message是最大长度为2048字节的字符串。如果第三个可选参数为TRUE的话,错误就会被放到前面错误的栈顶。如果为FALSE(默认值),错误就会替代前面所有的错误。
CREATE PROCEDURE raise_salary (emp_id NUMBER, amount NUMBER) AS
curr_sal NUMBER;
BEGIN
SELECT sal
INTO curr_sal
FROM emp
WHERE empno = emp_id;
IF curr_sal IS NULL THEN
/* Issue user-defined error message. */
raise_application_error (-20101, 'Salary is missing');
ELSE
UPDATE emp
SET sal = curr_sal + amount
WHERE empno = emp_id;
END IF;
END raise_salary;
如何抛出PL/SQL异常
DECLARE
out_of_stock EXCEPTION;
number_on_hand NUMBER (4);
BEGIN
...
IF number_on_hand < 1 THEN
RAISE out_of_stock;
END IF;
EXCEPTION
WHEN out_of_stock THEN
-- handle the error
END;
- PRAGMA EXCEPTION_INIT的用法
- PRAGMA EXCEPTION_INIT的用法
- Pragma Exception_init 的用法
- PRAGMA EXCEPTION_INIT
- oracle pragma 举例: exception_init()
- Oracle pragma 举例:exception_init
- pragma exception_init使用
- Oracle PRAGMA EXCEPTION_INIT
- Oracle pragma 举例:exception_init (预编译 )
- #pragma 的用法
- #pragma的一般用法
- #pragma warning 的用法
- #pragma的用法
- #pragma的用法
- #pragma的用法
- pragma comment的用法
- #pragma的用法
- #pragma的用法
- 五个小女子
- 天使的咒语
- Ant打包详解
- My SQL存储过程语法
- WSAAsynsSelect模型
- PRAGMA EXCEPTION_INIT的用法
- SQL SERVER 中自动编号的字段
- 有点累
- mysql alter 语句用法,添加、修改、删除字段等
- mysql主从复制不同步问题
- C#中的构造函数
- C#泛型讲座(一)知识点
- Jquery JS 正确的比较两个数字大小的方法
- 使用mysql的一些小tips