我有一个相当简单的问题:是否可以在包级别进行异常处理?如果是的话,如何实施呢?
我的包中有程序和函数,如果是,NO_DATA_FOUND我想在我的所有程序和函数中做同样的事情.
所以我的问题是:我可以写
WHEN NO_DATA_FOUND THEN
Run Code Online (Sandbox Code Playgroud)
只需一次,并NO_DATA_FOUND在我的所有过程/函数中使用相同的行作为异常,或者我必须在每个过程/函数中编写该异常处理程序.
不,您无法在包中的所有过程/函数中全局处理异常.
异常处理程序文档说:
异常处理程序处理引发的异常.异常处理程序出现在匿名块,子程序,触发器和包的异常处理部分中.
这听起来像你可以; 但那里的'包'引用是指create package body声明的初始化部分:
但是该部分"初始化变量并执行任何其他一次性设置步骤",并且每次会话运行一次,此时首次调用包中的函数或过程.它的异常处理程序不做任何其他事情.
如果你真的想要类似的行为,那么你可以把它放到它自己的(可能是私有的)过程中,并从每个过程/函数的异常处理程序调用它.如果您尝试记录错误,可能会节省一些打字但可能会掩盖真正发生的事情.具体的异常处理可能会更简单,更好,即使这会导致一些重复.