16.20 - カーソルとストアド プロシージャ - 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

一般ルール

1つのストアド プロシージャで同時に開けるカーソルの最大数は15です。

カーソル名は、次のリストにある有効な文字で作成します。
  • 英大文字
  • 英小文字
  • $
  • @
  • #
  • 数字
  • 下線
ストアド プロシージャでは、オープン カーソルを使用した以下の文は許可されていません。
  • POSITION
  • REWIND
  • SQLトランザクション文

DECLARE CURSOR文およびFOR文のカーソル

  • DECLARE CURSOR文またはFORループ制御文のカーソルを削除できます。
  • FOR文またはDECLARE CURSOR (ストアド プロシージャ形式)文で指定したSELECT文は、カーソル指定と呼ばれます。
  • ストアド プロシージャでは、定位置カーソルと非定位置カーソルの両方を使用できます。
  • FOR文で宣言されるカーソルとDECLARE CURSOR文で宣言されるカーソルには、次のような違いがあります。
FORループ カーソル DECLARE CURSORカーソル
カーソルの有効範囲は、それが定義されているFOR文に限定されます。

FORループ カーソル内の列名またはその相関名の有効範囲は、FOR文の本体のみに制限されます。

FOR文が入れ子になっている場合、外側のFOR文で指定したカーソル名は、内側のFOR文内の文で参照できます。

カーソルの有効範囲は、そのカーソルが宣言されたBEGIN…END複合文内になります。

カーソルの有効範囲は、複合文とその入れ子の複合文(存在する場合)です。

複合文が入れ子になっている場合、外側の複合文で指定したカーソルの有効範囲には、内側の複合文がすべて含まれます。

定位置DELETE文かUPDATE文でカーソルを参照すると、カーソルは更新可能になります。 FOR UPDATEオプションの使用によって、カーソルは更新可能になります。
OPEN、FETCH、およびCLOSEは、FORループ実行の一部として暗黙的に行われます。

FOR文では、繰返しごとに(存在すれば)次の行をオープン カーソルのために取り出します。

OPEN、FETCH、またはCLOSEを明示的に指定する必要があります。

結果セット カーソルにCLOSEを指定すると、結果セットが返されなくなります。

カーソルが宣言されているFOR文にはラベルを付けることができます。 DECLARE CURSOR文にはラベルを付けることができません。
FOR cursor_name文は、カーソル指定として指定したSELECT文のカーソルを暗黙的に開きます。 OPEN cursor_name文は、カーソル指定として指定したSELECT文のカーソルを開きます。

カーソルのサポート

サポートは、カーソルがFORループ文によって開かれたのか、DECLARE CURSOR文で宣言したカーソルによって開かれたのかによって多少異なります。

FORループ カーソルのサポート

FORループ文の場合、次に示すダミーの繰返し文によって指定したカーソル用にカーソルを開きます。

FOR  for_loop_variable  AS [cursor_name  CURSOR FOR]  cursor_specification  DO  statement 
END FOR;

ここでcursor_specificationは1つのSELECT文、statementは1つまたは複数のSQL制御文またはDML文です。

FOR文は次のように実行されます。
  1. 結果セットから1つのデータ行を取り出して、各繰返しのfor_loop_variableに置く。
  2. (存在する場合)次の行データを取り出して、各繰返しのカーソルを増分する。
    DELETEおよびUPDATEのWHERE CURRENT OFフォームは次のように機能します。
    • DELETE…WHERE CURRENT OF cursor_nameは、現在取り出されている行をその実テーブルから削除します。
    • UPDATE…WHERE CURRENT OF cursor_nameは、現在取り出されている行をその実テーブルで更新します。

DECLARE CURSORカーソルのサポート

DECLARE CURSOR文で定義したカーソルの場合、OPEN cursor_nameおよびFETCH cursor_nameの各文を明示的に実行する必要があります。

結果セット カーソルにCLOSEを指定すると、結果セットが返されないようになるので注意してください。

関連トピック

ストアド プロシージャでのカーソルの使用の詳細については、DECLARE CURSOR (ストアド プロシージャ形式)カーソル、およびFORを参照してください。