この質問を作成したシナリオ:
別のパッケージの依存関係であるパッケージがあります。「親」パッケージに変更を加えると、依存パッケージが無効になることがありますが、そうでない場合もあります。
それは以前に私たちを驚かせました。
無効化の原因を簡単に理解して、それを予測/計画できるようにすることは非常に役立ちます。
この質問を作成したシナリオ:
別のパッケージの依存関係であるパッケージがあります。「親」パッケージに変更を加えると、依存パッケージが無効になることがありますが、そうでない場合もあります。
それは以前に私たちを驚かせました。
無効化の原因を簡単に理解して、それを予測/計画できるようにすることは非常に役立ちます。
パッケージが依存するオブジェクト (テーブル、ビュー、トリガー、その他のパッケージなど) を変更すると、パッケージは自動的に無効としてマークされます。tuinstoel が前述したように、Oracle はパッケージを最初に使用するときにパッケージを再コンパイルするほどスマートです。
これが心配な場合は、スキーマの変更 (テーブル、ビュー、トリガー、プロシージャなど) を行うたびに、a を実行しDBMS_UTILITY.compile_schema
ます (または DBA に実行してもらいます)。これにより、すべてのパッケージが強制的にコンパイルされ、難しい方法でエラーを見つける前に、どこにエラーがあるか、またはエラーがあるかどうかがわかります。
または、次の表をクエリして、依存関係を確認することもできます
select *
from dba_dependencies
where name = 'YOUR_PACKAGE'
and referenced_owner = 'ANYUSER' --- Comment this out if you are looking for yourself
and owner = USER --- Or can be set to any user
これにより、すべての依存関係が表示されます。オブジェクトに対して、user_dependencies をクエリします。
Thomas Jones-Low の回答に加えて、パッケージ BODY のみを変更すると、依存オブジェクトが無効としてマークされない場合があります。
ただし、パッケージの仕様を変更するとすぐに、それは必ず発生します。