1

大規模な Oracle9i スキームを受け取りました。これを Oracle11g に変換することになっています。残念ながら、関数、プロシージャ、およびパッケージ全体で論理的に無効な SQL ステートメント「LEVELで兄弟を並べ替える」を大量に使用します。これは Oracle9i では拒否されませんが、Oracle11g ではパーサー エラーを引き起こします。

私が達成したいのは、手動でパッケージやプロシージャにパッチを適用せずに無効なステートメントを置き換える最も簡単な方法です。または、このようなエラーをすべて手動で修正する前に、実稼働サーバーでこのエラーのパーサー動作を何らかの形で無効にすることです。

どういうわけか「自動」で行うことはできますか?

前もって感謝します!

PS OK、これはクエリ自体のサンプルです。クエリに構文エラーがないことに注意してください。違いは、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 はそうではありませんでした。

4

1 に答える 1

0

一般に、レベルで注文しないと、めちゃくちゃになります。属性で並べ替えるだけで、レベルを保持したまま SIBILINGS を並べ替えることができます。レベルによる順序は、「兄弟」では意味がありません。11G では検証され、エラーが発生しますが、9i ではこれが見過ごされ、兄弟のレベルが破壊されます。

于 2013-11-11T09:38:39.207 に答える