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

ORA-04061:パッケージ本体PACKAGE.NAMEの既存の状態が無効化されたままです

    PL / SQLパッケージを再コンパイルすると、使用中のセッション変数が無効になるため、Oracleはこれを行います。

    これを回避するためにできることは、適切な展開方法を使用する以外に、多くはありません。データベースの使用中は変更を展開しないでください。すべての接続が適切に切断されていることを確認してください。CI/CDのこの時代、ダウンタイムゼロ、その他のエキサイティングなイノベーションよりも簡単に言えます。

    したがって、ロッカーの裏側には、pragma serially_reusable;というものが1つあります。 。この命令は、パッケージの状態が単一のサーバー呼び出しの間維持されることを意味します。 。たとえば、SRプロシージャを3回呼び出すPL / SQLブロックがある場合、そのプロシージャによって変更された変数は、3回の呼び出しにわたって値をメインにします。ただし、次に同じセッションでブロックを実行すると、変数は開始値にリセットされます。

    シリアルに再利用可能なPL/SQLにはいくつかの制限があります。たとえば、SQLクエリでは使用できません。しかし、あなたの観点からの大きな魅力は、ORA-04068またはORA-04061エラーではありません。セッション状態はなく、無効にするものもありません。

    pragma serially_reusable パッケージレベルで、本体と仕様で宣言する必要があります。したがって、パッケージ化されたプロシージャのいずれも、サーバー呼び出し全体で状態を維持する必要がないことを確認する必要があります。



    1. 有害で広範囲にわたるSQLServerのパフォーマンスの神話

    2. SQLServerテーブルを別のファイルグループに移動する

    3. WHERE句を使用したSQLLIMIT

    4. Nvarchar(Max)の場合、TSQLで4000文字しか取得できませんか?