11

この質問を作成したシナリオ:

別のパッケージの依存関係であるパッケージがあります。「親」パッケージに変更を加えると、依存パッケージが無効になることがありますが、そうでない場合もあります。

それは以前に私たちを驚かせました。

無効化の原因を簡単に理解して、それを予測/計画できるようにすることは非常に役立ちます。

4

6 に答える 6

15

パッケージが依存するオブジェクト (テーブル、ビュー、トリガー、その他のパッケージなど) を変更すると、パッケージは自動的に無効としてマークされます。tuinstoel が前述したように、Oracle はパッケージを最初に使用するときにパッケージを再コンパイルするほどスマートです。

これが心配な場合は、スキーマの変更 (テーブル、ビュー、トリガー、プロシージャなど) を行うたびに、a を実行しDBMS_UTILITY.compile_schema ます (または DBA に実行してもらいます)。これにより、すべてのパッケージが強制的にコンパイルされ、難しい方法でエラーを見つける前に、どこにエラーがあるか、またはエラーがあるかどうかがわかります。

于 2009-03-09T14:46:01.923 に答える
6

または、次の表をクエリして、依存関係を確認することもできます

   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 をクエリします。

于 2009-07-08T07:12:39.157 に答える
2

Thomas Jones-Low の回答に加えて、パッケージ BODY のみを変更すると、依存オブジェクトが無効としてマークされない場合があります。

ただし、パッケージの仕様を変更するとすぐに、それは必ず発生します。

于 2009-03-09T14:50:12.193 に答える