【发布时间】:2012-06-18 01:17:19
【问题描述】:
Oracle 中有没有办法确定一个包是有状态还是无状态?我不知道包含该信息的数据字典中的任何视图。
“ORA-04068:包字符串的现有状态已被丢弃”错误相当烦人。它可以通过从包中删除包变量来消除。 11g 引入了一个特性,一个包含所有编译时常量的变量的包将被视为无状态。
我可以有两个会话,在一个会话中编译包并在另一个中调用它,看看它是否引发异常,但这需要调用包中的一个过程,这可能是不可取的。
【问题讨论】:
-
在我回答之前,你能解释一下你为什么想知道吗?不要试图成为一个痛苦,只是试图了解你到底想做什么。为什么知道包是否有状态对您很重要?此外,您是否只是想知道一个包是否有状态,因此是否可能在某个时候遇到 ORA-4068?或者,对于有状态的包,您是否有兴趣了解包的当前状态是有效、无效还是未初始化?
-
有状态的包可能很烦人,因为如果在会话打开时进行更改,可能会导致用户出错。我有一个包有这个问题,我正在重构它以使其成为无状态并遇到一些麻烦(这将是未来 SO 问题的主题),所以有一种简单的方法来判断包是无状态的还是不是。此外,数据库中的哪些其他包是有状态的,也可能导致此问题。
标签: oracle oracle11g package state