我收到了一个大型 Oracle9i 方案,我应该将其转换为 Oracle11g。不幸的是,它在函数、过程和包中使用了大量逻辑上无效的sql语句“按级别排序兄弟”,Oracle9i没有拒绝,但在Oracle11g中会导致解析器错误。
我想要实现的是最简单的方法来替换无效语句,而无需手动修补程序包和过程,或者在我手动修复所有此类错误之前,在生产服务器上以某种方式禁用此错误的解析器行为一段时间。
可以以某种“自动”方式完成吗?
提前致谢!
PS 好的,这是查询本身的示例。请注意,查询没有语法错误。区别在于 Oracle9i 和 Oracle11g 及更高版本在检查逻辑正确性的验证规则时的行为方式。
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 则不然。