0

我正在尝试考虑一个验证器来检查 PL/SQL 块中可用的异常块或主体的任何例程(以粗体突出显示)。

例如:

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

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

这是一个简单的示例,可以有许多其他场景,但我需要 id 来发现异常块可用于 PL/SQL 代码的主块。

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

4

2 回答 2

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
于 2012-12-07T08:07:58.087 回答
0

您确定在每个程序单元中都有一个异常处理程序吗?

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

考虑使用

开始异常结束

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

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

如果您认为必须记录技术异常,请使用 dbms_utility.FORMAT_ERROR_STACK 并写一些有用的东西。

于 2013-04-03T13:31:41.427 回答