WEB开发网
开发学院数据库Oracle PL/SQL异常处理初步 阅读

PL/SQL异常处理初步

 2006-12-30 11:51:53 来源:WEB开发网   
核心提示: 常用异常处理方法除了标准异常外,用户可以声明自己的已命名异常,PL/SQL异常处理初步(5),比如商业规则错误,或者将自定义异常与一个数据库号相联系,最多为2048字节,TRUE和FALSE表示是添加(TRUE)进错误堆(ERROR STACK)还是覆盖(overwrite)错误堆(FAL

常用异常处理方法

除了标准异常外,用户可以声明自己的已命名异常。比如商业规则错误,或者将自定义异常与一个数据库号相联系,甚至可以将数据库错误号赋予自定义异常。PL/SQL的这个性能极大的提高了对异常的管理和处理的能力。

声明自己的异常 

如果你希望声明自己的异常,那么你可以在异常处理器中包括WHEN子句,声明的异常的作用范围与声明的变量相同。声明在外层块的异常能被该块和它的子块访问,但声明在子块的异常不能被父块处理。

例:

 BEGIN
DECLARE
Insufficient_credite EXCEPTION;
BEGIN
RASISE Insufficient_credite;
EXCEPTION
WHEN Insufficient_credite THEN
--可以在此处理异常
   extend_credite(cust_id);
END -嵌套块结束
EXCEPTION
WHEN Insufficient_credite THEN
--超出范围,不能在这里处理异常
 END;

如果声明的异常与内建的异常同名,那么当引用异常将解决你的异常而不是内建的异常。

给数据库错误命名

如果希望处理一个异常,那么异常必须有一个名字,数据库错误有数千个,但是只有不到25个是内建的已命名异常,但需要处理这些未命名的异常时,你可以将一个名字和一个错误号联系在一起,达到这个目的的语句是:PRAGMA EXCEPTION_INIT语句

语法如下:

PRAGMA EXCEPTION_INIT(exception_name,error_number);

执行这个语句之前,必须首先声明异常名。

DECLARE
invald_table_name EXCEPTION;
PRAGMA EXCEPTION_INIT(invald_table_name,-942);
BEGIN
EXCEPTION
WHEN invald_table_name THEN
UTL_FILE.PUT_LINE(file_handle,'user' || UID || 'hit a bad table');
END;

另外一种处理数据库错误的方法是使用内建函数SQLCODE和SQLERRM,这两个函数在包一级声明,SQLCODE将返回现行数据库错误号,这些错误号中除了NO_DATA_FOUND是+100外其他都是负数。SQLERRM返回文本描述的错误信息。为了获得用户自定义异常返回的SQLERRM和SQLCODE,你需要使用RAISE_APPLICATION_ERROR函数给自定义异常标注错误号。

给自定义错误标注号码

RAISE_APPLICATION_ERROR内建函数用于抛出一个异常并给异常赋予一个错误号以及错误信息。自定义异常的缺省错误号是+1,缺省信息是User_Defined_Exception。来自未处理的异常的一般信息对于识别导致错误的原因没有帮助,RAISE_APPLICATION_ERROR函数能够在pl/sql程序块的执行部分和异常部分调用,显式抛出带特殊错误号的命名异常。

RAISE_APPLICATION_ERROR(error_name,error_message[,{TRUE|| FALSE}]);

错误号的范围是-20,999到-20,999。错误信息是文本字符串,最多为2048字节。TRUE和FALSE表示是添加(TRUE)进错误堆(ERROR STACK)还是覆盖(overwrite)错误堆(FALSE)。缺省情况下是FALSE。

IF product_not_found THEN
  RAISE_APPLICATION_ERROR(-20123,'Invald product code' TRUE);
END IF;

访问更多PL/SQL技术应用专题相关文章请点击这里

上一页  1 2 3 4 5 

Tags:PL SQL 异常

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接