我试图想一个验证器,它检查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代码的主要块。
如果您有任何建议,请告诉我。 谢谢
答案 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并编写有用的内容。