linux中plsql异常中断,Oracle--plsql异常处理

如果在块的执行部分异常被触发,当前的块就会转去执行异常处理部分的相应异常处理机。如果PL/SQL成功处理了异常,就不会把异常传播给外部块或环境,从而,PL/SQL块正常结束。

异常的传播

如果在块的执行部分异常被触发, 然而没有相应的异常处理机,块就会异常终止,而将异常传递给调用环境。

错误引发异常,每当引发异常时,都将控制权传递给异常处理程序,异常处理程序处理异常.

捕获异常:

EXCEPTION

WHEN exception1 [OR exception2 . . .] THEN

statement1;

statement2;

. . .

[WHEN exception3 [OR exception4 . . .] THEN

statement1;

statement2;

. . .]

[WHEN OTHERS THEN

statement1;

statement2;

. . .]

•在异常部分WHEN子句没有数量限制

•WHEN OTHERS是最后一个子句

•异常处理部分从关键字EXCEPTION开始

•当异常抛出后,控制无条件转到异常处理部分

•在离开块之前只能执行一种异常处理

预定义异常:

预定义异常是由 Oracle 为常见错误预先定义的,不需要显式声明。

在相应的异常处理例程中引用错误的标准名来截获一个Oracle 服务器预定义错误。

7a0b1612d821265e957411e747d08541.png

例子:

DECLARE

v_sal       emp.sal%type;

BEGIN

SELECT  sal  INTO v_sal

FROM emp

WHERE empno=999;

EXCEPTION

WHEN NO_DATA_FOUND then

dbms_output.put_line('没有查到数据');

WHEN others then

dbms_output.put_line('其它异常');

END;

要截获Oracle服务器没有预定义的错误,需先声明这个错误或者使用OTHERS处理机。

非预定义异常:

1.  在声明部分声明异常名。

语法:

exception      EXCEPTION;

其中:  exception  异常名

2.  使用PRAGMAEXCEPTION_INIT语句将异常处理名字和Oracle的错误代码关联起来.

语法:

PRAGMA   EXCEPTION_INIT ( exception, error_number ) ;

其中:  exception  先前声明的异常名

error_number  标准Oracle 错误代码3.  在相应的异常处理例程中引用已声明的异常。

关键字 PRAGMA (伪指令pseudoinstructions)表示语句是一个编译指令,在执行PL/SQL块时并不处理该语句。在PL/SQL块中,一个编译指令EXCEPTION_INIT告诉编译器将一个异常处理的名字和一个Oracle错误代码联系起来。

DECLARE

e_emp_cons     EXCEPTION;

PRAGMA EXCEPTION_INIT(e_emp_cons,-00001);

BEGIN

INSERT INTO emp

SELECT * FROM emp;

EXCEPTION

WHEN e_emp_cons   THEN

dbms_output.put_line('违反唯一性约束');

END;

捕获异常的函数:

•SQLCODE

返回Oracle的错误代码

•SQLERRM

返回和错误值相关联的信息

SQLCODE值  说明

0没有异常

100      NO_DATA_FOUND异常负数      其它Oracle错误号

自定义异常:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值