Oracle 如何检查异常块是否可用于主PLSQL块或例程

Oracle 如何检查异常块是否可用于主PLSQL块或例程,oracle,plsql,oracle10g,oracle11g,Oracle,Plsql,Oracle10g,Oracle11g,我试图考虑一个验证器,它检查PL/SQL块中的异常块或主体的任何例程(以粗体突出显示) 例如: 这是一个简单的例子,可以有许多其他场景,但我需要id来找到异常块对于PL/SQL代码的主块是可用的 如果你有任何建议,请告诉我。 谢谢如果您使用的是Unix设备并且有GNU awk,您可以尝试以下方法: $ awk '/Procedure/ || p==1{if (/END/)p=0;else p=1;next}/BEGIN/{f++;next}/END/{f--;next}/EXCEPTION/ &

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

例如:

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

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

如果您使用的是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

您确定要在每个程序单元中使用异常处理程序吗

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

考虑使用

开始 例外情况 结束

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

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


如果您认为必须记录技术异常,请使用dbms\u utility.FORMAT\u ERROR\u堆栈并编写一些有用的内容。

我不确定是否理解这个问题。您正在尝试编写PL/SQL解析器吗?为什么要检查特定块是否有异常处理程序?大多数街区都不应该。这只是为了检查那个街区。这只是一种验证。谢谢,我正在寻找一个sql查询或pl sql代码来实现同样的功能。
$ 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