在 PL/SQL 包中声明全局异常

Posted

技术标签:

【中文标题】在 PL/SQL 包中声明全局异常【英文标题】:Declaring global exception in PL/SQL package 【发布时间】:2012-01-15 21:27:17 【问题描述】:

我有一些程序/函数在违反 FOREIGN KEY 约束时捕获 -2291 异常。

我从不同的过程中删除了异常,并在包体中声明它如下:

e_ouder_niet_gevonden EXCEPTION;
PRAGMA EXCEPTION_INIT(e_ouder_niet_gevonden,-2291);

现在当我使用包中的一个程序时没有问题。但是,我想要实现的是任何过程/函数都可以使用该异常。我该怎么做呢?

【问题讨论】:

等等,你的意思是 any 包外的程序,而不仅仅是包内的程序? 是的,这不可能吗?我也觉得这很奇怪,但这是我正在做的任务的一部分,所以我认为这是可能的 据我所知,这是不可能的。您必须在任何地方声明异常,因为您要求 Oracle 根据现有错误创建自定义异常。 如果您找到了解决方案,您应该将其添加为回复,而不是编辑问题。 【参考方案1】:

解决方案: 您需要放入包规范中,而不是将异常放入包体中。如果你想在包外的过程中使用异常,你可以把它放在 EXCEPTION 块中:

WHEN packagename.exception_name THEN

这没有问题。

【讨论】:

如果这是一个解决方案,那么您应该接受您自己的答案,以向其他人表明它已解决。如果您要沿着这条路线走,我建议您有一个单独的包来保存您的异常,这样您就不必记住它们在哪个随机包中。 感谢您重新接受我自己的解决方案的提示。我只能从明天开始接受它。而且我同意将异常放在他们自己的包中会更好,但这只是一个小练习,可以将它放在同一个包中:-)。 Hmm :) 我的(自我)删除的答案提到将它放在包规范中,但我没有考虑过引用 package_name.exception :) Neverethess,好东西。

以上是关于在 PL/SQL 包中声明全局异常的主要内容,如果未能解决你的问题,请参考以下文章

PL/SQL - 全局变量并非在所有会话中都可用

有没有办法在 PLSQL 包中全局处理定义的异常

oracle异常(-)

如何创建一个 Oracle 全局类型并在 PL/SQL 中使用它?

PL/SQL 用户自定义异常操作实例

SpringBoot 处理全局异常