问题描述
我们有一个遗留数据库模式,它有一个自定义的应用程序编写,该应用程序将被支持到生命的尽头,希望在不久的将来。
我们不希望经历准备它的过程,因此对其模式进行了定义。
(更改用户 ** schema_name ** 启用版本;)
我们确实有一些对PL/SQL对象 (函数,过程) 的调用,我们的ORACLE EBS实例架构 (应用程序) 在同一数据库已经升级,现在正在进行编辑。
这些遗留的pl/sql对象调用收到编译错误 (PLS-00754),它们无法引用已编辑的对象。
我们发现我们可以修改遗留应用程序以使用EXECUTE IMMEDIATE语句,并且避免了编辑的编译限制。
我的问题是,这是短期/长期的合理方法吗?
我们需要编辑遗留数据库模式吗?
如果我们不希望 (承包商在旧版应用程序上工作的努力和可用性) 或无法编辑自定义架构,是否有针对这种情况的行业最佳实践?
非常感谢。
我们不希望经历准备它的过程,因此对其模式进行了定义。
(更改用户 ** schema_name ** 启用版本;)
我们确实有一些对PL/SQL对象 (函数,过程) 的调用,我们的ORACLE EBS实例架构 (应用程序) 在同一数据库已经升级,现在正在进行编辑。
这些遗留的pl/sql对象调用收到编译错误 (PLS-00754),它们无法引用已编辑的对象。
我们发现我们可以修改遗留应用程序以使用EXECUTE IMMEDIATE语句,并且避免了编辑的编译限制。
我的问题是,这是短期/长期的合理方法吗?
我们需要编辑遗留数据库模式吗?
如果我们不希望 (承包商在旧版应用程序上工作的努力和可用性) 或无法编辑自定义架构,是否有针对这种情况的行业最佳实践?
非常感谢。
专家解答
我不明白您为什么要对模式进行编辑-请您澄清一下您的推理吗?
对于背景:
基于版本的重新定义是一项功能,可帮助您在应用程序停机时间为零的情况下进行数据库架构和PL/SQL更改。我看不出你的用例与此有何关系。
关于使用立即执行:
这是您要避免的事情。幸运的是,我认为这没有必要。
你遇到了PLS-00754的错误,因为你有不可编辑的对象 (你只能有一个副本的东西),引用可编辑的对象 (你可以有很多副本的东西)。有几种方法可以解决这个问题:
版本启用所有涉及的模式。
或者
声明您访问的特定对象为不可编辑:
create or replace noneditionable type ...
如果您提供更多的背景知识,说明为什么要使用版本来支持您的模式以及希望通过这样做获得的收益,我们可能会提供更多帮助。
对于背景:
基于版本的重新定义是一项功能,可帮助您在应用程序停机时间为零的情况下进行数据库架构和PL/SQL更改。我看不出你的用例与此有何关系。
关于使用立即执行:
这是您要避免的事情。幸运的是,我认为这没有必要。
你遇到了PLS-00754的错误,因为你有不可编辑的对象 (你只能有一个副本的东西),引用可编辑的对象 (你可以有很多副本的东西)。有几种方法可以解决这个问题:
版本启用所有涉及的模式。
或者
声明您访问的特定对象为不可编辑:
create or replace noneditionable type ...
如果您提供更多的背景知识,说明为什么要使用版本来支持您的模式以及希望通过这样做获得的收益,我们可能会提供更多帮助。
文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。