当引发异常时,PL/SQL块或子程序的正常执行将停止,并将控制传输到其异常处理程
序,其格式如下:
EXCEPTION
WHEN exception1 THEN -- 处理异常exception1
处理语句序列1
WHEN exception2 THEN -- 处理另一个异常exception2
处理语句序列2
GBase 8s PL/SQL手册
南大通用数据技术股份有限公司
- 129 -
...
WHEN OTHERS THEN -- 处理所有其它异常
处理语句序列3
END;
要捕获引发的异常,请编写异常处理程序。每个处理程序都包含一个WHEN子句,该
子句指定一个异常,然后是引发该异常时要执行的一系列语句。这些语句执行完之后,执
行控制权不返回抛出异常的位置。换言之,您不能在异常中断的地方继续处理。
可选的OTHERS异常处理程序(始终是块或子程序中的最后一个处理程序)充当所有
未明确命名的异常的处理程序。因此,一个块或子程序只能有一个OTHERS处理程序。使
用OTHERS处理程序可以保证不会出现未处理的异常。
如果希望两个或多个异常执行相同的语句序列,请在WHEN子句中列出异常名称,并
用关键字OR分隔它们,如下所示:
EXCEPTION
WHEN over_limit OR under_limit OR VALUE_ERROR THEN
-- 处理这些异常
如果引发列表中的任何异常,则执行相关的语句序列。关键字OTHERS不能出现在异
常名称列表中;它必须自己出现。可以有任意数量的异常处理程序,每个处理程序都可以
将异常列表与一系列语句相关联。但是,异常名称只能在PL/SQL块或子程序的异常处理部
分出现一次。
PL/SQL变量的通常作用域规则适用,因此您可以在异常处理程序中引用本地和全局变
量。但是,当在cursor FOR循环中引发异常时,在调用处理程序之前会隐式关闭游标。因
此,显式游标属性的值在处理程序中不可用。