Sql Oracle-避免失效错误

Sql Oracle-避免失效错误,sql,oracle,Sql,Oracle,我注意到,每当我有包级常量(或任何变量),每当我重新编译包时,到数据库的持久连接都会得到一个错误,即“包体的现有状态已失效” 有没有办法避免这种情况?也许是通过同义词?这种情况下的最佳实践是什么?一般来说,您应该避免在实时生产实例中替换代码 如果您真的真的必须24/24 7/7在线,并且您不能安排任何(甚至很小的)停机时间,那么您必须避免包级别的变量,因为重新编译这样的包将触发上述错误 您还可以捕获客户端应用程序中的错误,并决定如何操作。也许您有足够的信息来重新启动客户端正在执行的任何操作 另见

我注意到,每当我有包级常量(或任何变量),每当我重新编译包时,到数据库的持久连接都会得到一个错误,即“包体的现有状态已失效”


有没有办法避免这种情况?也许是通过同义词?这种情况下的最佳实践是什么?

一般来说,您应该避免在实时生产实例中替换代码

如果您真的真的必须24/24 7/7在线,并且您不能安排任何(甚至很小的)停机时间,那么您必须避免包级别的变量,因为重新编译这样的包将触发上述错误

您还可以捕获客户端应用程序中的错误,并决定如何操作。也许您有足够的信息来重新启动客户端正在执行的任何操作

另见 这涉及同一主题


通常,您应该避免替换实时生产实例中的代码

如果您真的真的必须24/24 7/7在线,并且您不能安排任何(甚至很小的)停机时间,那么您必须避免包级别的变量,因为重新编译这样的包将触发上述错误

您还可以捕获客户端应用程序中的错误,并决定如何操作。也许您有足够的信息来重新启动客户端正在执行的任何操作

另见 这涉及同一主题


问题是,如果在上午10:00,会话开始,并且常数设置为“a”,那么在上午11:00,您将其更改为“B”,那么会话将在混乱中“爆炸”

布拉格语可能对你有用。基本上,它不会在调用之间保持状态。因此,在上午11:0,它将开始使用“B”。如果你能百分之百地确定这不会破坏你的代码,它就可以工作。在需要时重新初始化常量可能会带来开销

同时也要注意通话或在适当的时间间隔。这可能会减少错误的数量


你也应该看看新的。这是一个更全面的解决方案,但我想您需要为此进行升级。

问题是,如果在上午10:00,一个会话开始,并且常数设置为“a”,那么在上午11:00,您将其更改为“B”,然后会话在混乱中“爆炸”

布拉格语可能对你有用。基本上,它不会在调用之间保持状态。因此,在上午11:0,它将开始使用“B”。如果你能百分之百地确定这不会破坏你的代码,它就可以工作。在需要时重新初始化常量可能会带来开销

同时也要注意通话或在适当的时间间隔。这可能会减少错误的数量


你也应该看看新的。这是一个更全面的解决方案,但我想您需要为此进行升级。

过去,我通过将所有与状态相关的内容移动到单独的包中来解决这个问题

例如,如果我有一个包“CUSTOMER\u PKG”,我会将所有全局变量移动到一个名为“CUSTOMER\u GLOBALS\u PKG”的规范专用包中


不幸的是,这意味着公开包体中定义的所有私有全局变量。我们必须强制执行一个开发标准,这样CUSTOMER\u GLOBALS\u PKG只允许CUSTOMER\u PKG引用。

过去,我通过将所有与州相关的内容移动到单独的包中来解决这个问题

例如,如果我有一个包“CUSTOMER\u PKG”,我会将所有全局变量移动到一个名为“CUSTOMER\u GLOBALS\u PKG”的规范专用包中

不幸的是,这意味着公开包体中定义的所有私有全局变量。我们必须强制执行一个开发标准,这样CUSTOMER_GLOBALS_PKG只能被CUSTOMER_PKG引用