从Oracle 9i迁移到Oracle 11g时更新过程,包和函数

时间:2013-11-11 05:50:42

标签: oracle11g

我收到了一个大型Oracle9i方案,我应该将其转换为Oracle11g。 不幸的是,它在整个函数,过程和包中使用了许多逻辑上无效的sql语句“从 LEVEL 订购兄弟”,Oracle9i没有拒绝,但导致Oracle11g中的解析器错误。

在我手动修复所有此类错误之前,我想要实现的最简单的方法是在不修补程序包和程序的情况下替换无效语句,或以某种方式在生产服务器上禁用此错误的解析器行为。 / p>

可以以“自动”的方式以某种方式完成吗?

提前致谢!

P.S。 好的,这是查询本身的示例。请注意,查询没有语法错误。区别在于Oracle9i和Oracle11g及更高版本在检查ligocal corretness的验证规则时表现如何。

select version, ord, level as lvl from
(
 select a.key, a.parent_key, a.version, a.ord from b_rds_elem a where a.dict_key = 306350
)
connect by prior key = parent_key
start with parent_key is null
order siblings by level, ord

此查询将由Oracle 9i及更少执行,并将在高于9i时抛出错误ORA-00976。按级别排序兄弟是没有意义的,因为在分层查询中,默认情况下所有节点都已按级别排序。所以,对于这样的愚蠢的查询,9i更自由,但不是11g。

1 个答案:

答案 0 :(得分:0)

一般情况下,你没有按级别订购,这会破坏它。只需按属性排序 - 它命令SIBILINGS保留级别。对于“兄弟姐妹”,逐级排序是没有意义的。在11G中,它被验证并且你得到一个错误,但是在9i中这被忽视并且破坏了兄弟姐妹的等级。