16.20 - CLOSE - Teradata Vantage NewSQL Engine

Teradata Vantage™ SQL ストアド プロシージャおよび埋め込みSQL

prodname
Teradata Database
Teradata Vantage NewSQL Engine
vrm_release
16.20
category
プログラミング リファレンス
featnum
B035-1148-162K-JPN

目的

オープン カーソルをクローズし、カーソルがオープンしていた間に保持していたリソースをリリースします。

呼び出し

実行可能形式。

ストアド プロシージャおよび埋め込みSQL。

構文



cursor_name
閉じる対象である、開いているカーソルの名前。

ANSI準拠

ANSI/ISO SQL:2011準拠。

許可

なし。

ルール

結果セット カーソルは、CLOSEしてはいけません。ストアド プロシージャで結果セット カーソルを閉じると、その結果セットは削除され、返されなくなります。

cursor_nameで識別されるカーソルは、事前に宣言しておく必要があります。

cursor_nameで識別されるカーソルが開いていなければなりません。

ストアド プロシージャ内でCLOSEが実行依頼される時点でcursor_nameがオープンしていない場合、次の実行時例外が発生します。
  • SQLCODEは7631に設定される
  • SQLSTATEは‘24501’に設定される

複合ストアド プロシージャ文から制御が渡されると、その複合文の本体の中で宣言されているすべてのオープン カーソルは、ストアド プロシージャによって暗黙的に閉じられます。

CLOSEを動的SQL文として実行することはできません。

例: カーソルを開く

次に示すCLOSEの例では、カーソル名projcursorで識別されるカーソルをOPENしてからCLOSEしているため有効です。

CREATE PROCEDURE sp1 (OUT par1 INTEGER, OUT Par2 CHAR(30))
BEGIN
  DECLARE projcursor CURSOR FOR
    SELECT *
    FROM project
    ORDER BY projid;
  OPEN projcursor;
  Label1:
  LOOP:
    FETCH projcursor INTO par1, par2;
    IF (SQLSTATE = '02000') THEN
      LEAVE label1;
    END IF;
  END LOOP label1;
  CLOSE projcursor;
END;

例: カーソルを閉じる

次に示す例のCLOSEでは、明示的にprojcursorを閉じています。empcursorカーソルには、OPENはありますが明示的なCLOSEはありません。この場合のempcursorは、ストアド プロシージャが終了するときに暗黙的に閉じられます。

CREATE PROCEDURE sp1 (IN par1 CHAR(5))
BEGIN
  DECLARE projcursor CURSOR FOR
    SELECT *
    FROM project
    ORDER BY projid;
  DECLARE empcursor CURSOR FOR
    SELECT *
    FROM employee
    WHERE dept_code = par1;
  OPEN projcursor;
  OPEN empcursor;
  CLOSE projcursor;
END;

関連トピック

次の文の詳細については、以下のトピックを参照してください。
  • CLOSEの場合は、OPEN (埋め込みSQL形式)およびOPEN (ストアド プロシージャ形式)を参照してください。
  • 開いているカーソルを閉じるCOMMITとROLLBACKの文については、<Teradata Vantage™ SQLデータ操作言語、B035-1146>を参照してください。
  • ストアド プロシージャおよび埋め込みSQLアプリケーションで使用する他のDML文については、<Teradata Vantage™ SQLデータ操作言語、B035-1146>を参照してください。