如何检查Exception Block是否可用于主PL SQL块或例程

时间:2012-12-07 04:57:18

标签: oracle plsql oracle10g oracle11g

我试图想一个验证器,它检查PL / SQL块中的异常块或主体的任何例程(以粗体突出显示)。

例如:

DECLARE
some data
      Procedure xyx IS
      BEGIN
      ....
      EXCEPTION
      ..
      END;  

BEGIN
some data
      BEGIN
      ....
      EXCEPTION
      ..
      END;  
**EXCEPTION**
some data
      BEGIN
      ....
      EXCEPTION
      ..
      END; 
END; 

这是一个简单的例子,可以有许多其他场景但我需要找到Exception块可用于PL / SQL代码的主要块。

如果您有任何建议,请告诉我。 谢谢

2 个答案:

答案 0 :(得分:0)

如果你使用的是Unix机器并且存在GNU awk,你可以试试这个:

$ awk '/Procedure/ || p==1{if (/END/)p=0;else p=1;next}/BEGIN/{f++;next}/END/{f--;next}/EXCEPTION/ && f==1{print "Exception present"}' IGNORECASE=1 file.sql

答案 1 :(得分:0)

您确定想要每个程序单元中的异常处理程序吗?

在我看来,最好只处理具有商业意义且有些计划的异常,并让所有其他错误和问题冒出来到应用程序。

考虑使用

  

开始   例外   端

阻止,以便计划异常的异常块具有较小的范围。还要避免在大型程序单元末尾有大的异常块。

我在野外看到的大多数异常块都会进行一些日志记录,或者引发异常或完全吞下它,从而破坏堆栈跟踪或问题本身的发生。

如果您认为必须记录技术异常,请使用dbms_utility.FORMAT_ERROR_STACK并编写有用的内容。