カーソルを開いて閉じるのを忘れた場合、そのカーソルは Oracle にどのくらいの期間存在しますか?
カーソルの有効期間を構成するための設定はありますか?
カーソルを開いて閉じるのを忘れた場合、そのカーソルは Oracle にどのくらいの期間存在しますか?
カーソルの有効期間を構成するための設定はありますか?
DCookieの答えと同様:
カーソルの寿命の一般的なパターンは次のとおりです。
OPEN
BIND
EXECUTE
FETCH...FETCH...FETCH
BIND
EXECUTE
FETCH...FETCH...FETCH
...
CLOSE
つまり、新しい変数をカーソルにバインドして再実行することで、カーソルを再利用できます。
PL/SQL は、セッション レベルでカーソルのキャッシュも保持し、最近閉じたカーソルを再度開くオーバーヘッドを回避します。そのため、プログラムで閉じたカーソルがまだ開いている可能性があります。オラクルは、必要に応じてバックグラウンドでそれらを閉じます。
カーソルが範囲外になった場合は、閉じることができます。つまり、呼び出しまたはプロシージャが次のような場合です。
DECLARE
CURSOR c_1 IS SELECT ....;
BEGIN
OPEN c_1;
FETCH c_1 INTO...;
END;
実行が完了すると、c_1 はスコープ外になり (物理的に再度呼び出すことはできません)、閉じることができます。これは、例外が発生する可能性があり、プロシージャから飛び出し、すべての 'CLOSE c_1;' をバイパスする可能性があるため、例外処理に特に役立ちます。コード。スコープ外のカーソルを閉じることで、そのために例外処理コードを追加することを心配する必要がなくなります。
カーソルにセッション スコープがある場合 (たとえば、PL/SQL パッケージ仕様または本体のグローバル レベルで定義されているか、ref カーソルを介してクライアントに返されている)、このようにスコープ外になることはありません。セッションが切断された場合、または DBMS_SESSION.MODIFY_PACKAGE_STATE(DBMS_SESSION.FREE_ALL_RESOURCES) を使用した場合。
あなたのセッションがなくなるか閉じるまで、それは生きていると思います。
使い終わったらカーソルを閉じることで、カーソルの寿命を設定できます;-)
真剣に、カーソルを閉じる設定に依存すると、問題が隠され、怠惰なプログラミングが促進されるだけです。また、カーソルを長時間開いたままにしておく必要があるプロセスに悪影響を与える可能性もあります。