您现在的位置: 天极网 > 开发频道 > PL/SQL异常处理初步
全文

PL/SQL异常处理初步

2002-08-06 09:31作者:crystal编译出处:yesky责任编辑:方舟

  常用异常处理方法

  除了标准异常外,用户可以声明自己的已命名异常。比如商业规则错误,或者将自定义异常与一个数据库号相联系,甚至可以将数据库错误号赋予自定义异常。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;
共2页。 9 1 2

软件资讯·软件下载尽在天极软件

共2页。 首页 上一页 1 2
相关搜索:
相关文章及软件
关注此文读者还看过
热门关注
特别推荐
网友关注
软件下载
娱乐下载
驱动下载
文章排行
本周
本月
最近更新
关于我们|About us|网站律师|天极服务|电子杂志|RSS订阅|加入我们|网站地图
TMG
Copyright (C) 1999-2009 Chinabyte.com, All Rights Reserved 版权所有 天极网络
商务联系、网站内容、合作建议:010-82657868
版权声明 在线提交意见反馈 渝ICP证B2-20030003号
经营性网站备案信息 网警备案 中国网站排名
天极传媒:天极网|比特网|IT专家网|IT商网|52PK游戏网|IT分众