大規模な 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 はそうではありませんでした。