sql >> データベース >  >> RDS >> Oracle

ORA-06508:PL / SQL:呼び出されているプログラム・ユニットが見つかりませんでした

    次のようなスタックの最後のエラーのみを報告していると思われます:

    ORA-04068: existing state of packages has been discarded
    ORA-04061: existing state of package body "schema.package" has been invalidated
    ORA-04065: not executed, altered or dropped package body "schema.package"
    ORA-06508: PL/SQL: could not find program unit being called: "schema.package"
    

    もしそうなら、それはあなたのパッケージがステートフルであるためです:

    パッケージが(仕様または本体のいずれかで)宣言する変数、定数、およびカーソルの値は、そのパッケージ状態を構成します。 。 PL / SQLパッケージが少なくとも1つの変数、定数、またはカーソルを宣言している場合、そのパッケージはステートフルです。;それ以外の場合は、ステートレス

    再コンパイルすると、状態は失われます:

    インスタンス化されたステートフルパッケージの本体が再コンパイルされた場合(明示的に「ALTERPACKAGEステートメント」を使用して、または暗黙的に)、パッケージ内のサブプログラムを次に呼び出すと、Oracle Databaseは既存のパッケージ状態を破棄し、exceptionORA-04068を発生させます。

    PL / SQLで例外が発生した後、パッケージへの参照により、Oracle Databaseはパッケージを再インスタンス化し、再初期化します...

    パッケージに状態がある場合、これを回避することはできません。ただし、パッケージがステートフルである必要があることはかなりまれだと思います。そのため、パッケージで宣言したものはすべて、関数またはプロシージャの外で、そのレベルで本当に必要かどうかを確認する必要があります。ただし、10gを使用しているため、変数やカーソルだけでなく、定数も含まれます。

    ただし、引用されたドキュメントの最後の段落は、次に同じセッションでパッケージを参照するときにエラーが発生せず、通常どおりに機能することを意味します(再度コンパイルするまで)。



    1. わずかな予算での高可用性-最小限の2ノードのMySQLGaleraクラスターの導入

    2. 重複する値を日付範囲で折りたたむSQLクエリ

    3. 私のDBAは病気です-SysAdminsのためのデータベースフェイルオーバーのヒント

    4. MySQL:GROUPBYに含まれていません