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

PL/SQL的异常处理机制的初步探讨

 2007-05-12 12:24:06 来源:WEB开发网   
核心提示: 如果从FORMAT_XXX_STACK输出一个很大的值,那么使用DBMS_OUTPUT或UTL_FILE显示错误或调用堆的异常部分自身也会抛出异常,PL/SQL的异常处理机制的初步探讨(5),这两个堆常规下最多能返回2000字节,但utl_file.put_line被限制在1000字节以内

如果从FORMAT_XXX_STACK输出一个很大的值,那么使用DBMS_OUTPUT或UTL_FILE显示错误或调用堆的异常部分自身也会抛出异常,这两个堆常规下最多能返回2000字节,但utl_file.put_line被限制在1000字节以内,而dbms_output.put_line限制在512字节内。如果使用前面的代码并且不允许这种可能性,那么在异常处理器中将抛出一个未处理的异常。

GOTO语句不能用于将控制从执行部分传递到异常部分或反之。

已命名异常

在PL/SQL块的异常部分只有已命名的异常才能被WHEN子串处理,ORACLE包含了一系列已命名的异常,这些异常都声明在STANDARD包中,这些内建异常在这里就不一一讲述,有兴趣的读者可以查阅有关资料。

常用异常处理方法

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

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

上一页  1 2 3 4 5 

Tags:PL SQL 异常

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