CLOSE
CLOSE ステートメントは、カーソルをクローズします。カーソルのオープン時に結果表が作成された場合は、その表は破棄されます。
呼び出し
このステートメントは、アプリケーション・プログラムに組み込んで使用します。それ以外の使用法はありません。 これは実行可能ステートメントですが、動的に準備することはできません。Java™ では指定できません。
権限
権限は不要です。 カーソルの使用に必要な権限については、DECLARE CURSORを参照してください。
説明
- cursor-name
- クローズするカーソルを識別します。DECLARE CURSOR ステートメントの項で説明されているように、 cursor-name は、宣言されたカーソルを指定しなければなりません。 CLOSE ステートメントは、オープン状態にあるカーソルに対して実行しなければなりません。
注
暗黙的なカーソル・クローズ: 以下の時点では、 プログラム内のすべてのカーソルはクローズ状態にあります。
- プログラムが呼び出されたとき。
- CLOSQLCSR(*ENDPGM) が指定されている場合、プログラムが呼び出されるたびに、すべてのカーソルがクローズ状態になります。
- CLOSQLCSR(*ENDSQL) が指定されている場合、1 つの SQL プログラムが呼び出しスタックに残っている間は、プログラムが初めて呼び出されるときに限って、すべてのカーソルがクローズ状態になります。
- CLOSQLCSR(*ENDJOB) が指定されている場合、ジョブ内でプログラムが最初に呼び出されたときに限って、すべてのカーソルがクローズ状態になります。
- CLOSQLCSR(*ENDMOD) が指定されている場合、モジュールが開始されるたびに、すべてのカーソルがクローズ状態になります。
- CLOSQLCSR(*ENDACTGRP) が指定されている場合、活動化グループ内で、プログラム中のモジュールが最初に開始されたときに、すべてのカーソルがクローズ状態になります。
- HOLD オプションの指定がない COMMIT または ROLLBACK ステートメントを実行して、プログラムから新規の作業単位を開始したとき。 HOLD オプションを指定して宣言されたカーソルは、COMMIT ステートメントではクローズされません。
注: DB2® for i データベース・マネージャーは、照会をインプリメントするためにファイルをオープンします。
このファイルのクローズは、SQL CLOSE ステートメントとは
別に行うことができます。
詳しくは、「SQL プログラミング」を参照してください。
パフォーマンスのためのカーソルのクローズ: カーソルを、 できるだけ早い時機に明示的にクローズすることによって、パフォーマンスを向上させることができます。
プロシージャーに関する考慮事項: クローズされずに呼び出し側プログラムに戻ったプロシージャー内のカーソルには、 特殊な規則が適用されます。 詳しくは、CALLを参照してください。
例
COBOL プログラムでカーソル C1 を使用し、EMPPROJACT 表の最初の 4 つの 列から一度に 1 行ずつ値を取り出して、その値を次のホスト変数に入れます。
- EMP (CHAR(6))
- PRJ (CHAR(6))
- ACT (SMALLINT)
- TIM (DECIMAL(5,2))
最後にカーソルをクローズします。
EXEC SQL BEGIN DECLARE SECTION END-EXEC.
77 EMP PIC X(6).
77 PRJ PIC X(6).
77 ACT PIC S9(4) BINARY.
77 TIM PIC S9(3)V9(2) PACKED-DECIMAL.
EXEC SQL END DECLARE SECTION END-EXEC.
.
.
.
EXEC SQL DECLARE C1 CURSOR FOR
SELECT EMPNO, PROJNO, ACTNO, EMPTIME
FROM EMPPROJACT END-EXEC.
EXEC SQL OPEN C1 END-EXEC.
EXEC SQL FETCH C1 INTO :EMP, :PRJ, :ACT, :TIM END-EXEC.
IF SQLSTATE = '02000'
PERFORM DATA-NOT-FOUND
ELSE
PERFORM GET-REST-OF-ACTIVITY UNTIL SQLSTATE IS NOT EQUAL TO '00000'.
EXEC SQL CLOSE C1 END-EXEC.
GET-REST-OF-ACTIVITY
EXEC SQL FETCH C1 INTO :EMP, :PRJ, :ACT, :TIM END-EXEC.
.
.
.