我收到了一个大型的Oracle9i计划,我应该把它转换成Oracle11g。不幸的是,它在函数、过程和包中使用了许多逻辑上无效的sql语句“级命令兄弟”,这不是Oracle9i拒绝的,而是在Oracle11g中导致解析器错误。
我想要实现的是,最简单的方法是在不手工修补包和过程的情况下替换无效语句,或者在生产服务器上的某个时候禁用此错误的解析器行为,然后手动修复所有此类错误。
它能以某种“自动”的方式完成吗?
提前感谢!
好的,这是查询本身的示例。请注意,查询没有语法错误。区别在于Oracle9i和Oracle11g以及更高的用户在检查ligocal相关性验证规则时的行为。
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此查询将由Oracle9i和更少执行,并在大于9i时抛出错误ORA-00976。按级别排序是没有意义的,因为在分层查询中,默认情况下,所有节点都已按级别进行排序。因此,对于这样愚蠢的查询,9i更自由,但11g则不然。
发布于 2013-11-11 09:38:39
一般来说,你不按等级订货,那样会弄脏它。只是按属性排序-它命令大小保持水平。逐级排序对“兄弟姐妹”来说是没有意义的。在11G中,它被验证并得到一个错误,但是在9i中,这会被忽略并破坏兄弟姐妹的级别。
https://stackoverflow.com/questions/19899713
复制相似问题