4.2 DECLARE CURSORカーソルの宣言

<この節の構成>
(1) 機能
(2) 形式
(3) 共通規則
(4) 注意事項
(5) 使用例

(1) 機能

問合せ指定の検索結果をFETCH文で1行ずつ取り出すために,カーソルを宣言します。

(2) 形式

カーソル宣言::=DECLARE カーソル名 CURSOR FOR カーソル指定

(a) カーソル名

カーソルの名称を指定します。

(3) 共通規則

  1. 宣言したカーソルは,閉じた状態になります。
  2. DECLARE CURSOR中のカーソル指定で指定した埋め込み変数の値は,カーソルを開いてからカーソルを閉じるまで,このカーソルのOPEN文を実行したときの値が有効です。値を変更する場合は,いったんカーソルを閉じてから,再度開いてください。
  3. 1個のUAPでは,最大1023個のカーソルを宣言できます。

(4) 注意事項

  1. カーソル名は,埋め込み変数名と同様に,コンパイル単位のモジュール内で有効な名前です。同じカーソルに対する複数のSQLを,複数のモジュールにわたって使用できません。したがって,SQL中にカーソル名を指定している場合は,そのカーソル名をプリプロセスするUAPソース中で宣言する必要があります。
  2. カーソル宣言は,この宣言で使用したカーソル名を参照するどのSQL文よりも先行して記述する必要があります。
  3. DECLARE CURSORを実行しても,SQLCODEにリターンコードは返されません。したがって,リターンコードの判定はしないでください。

(5) 使用例

(例1)
在庫表(ZAIKO)から,行を1行ずつ取り出すためにカーソル(CR1)を宣言します。

DECLARE CR1 CURSOR FOR
   SELECT SCODE,SNAME,COL,TANKA,ZSURYO
       FROM ZAIKO

(例2)
在庫表(ZAIKO)から,単価(TANKA)が5000円以上の行を1行ずつ取り出すためにカーソル(CR1)を宣言します。

DECLARE CR1 CURSOR FOR
   SELECT * FROM ZAIKO
       WHERE TANKA >= 5000

(例3)
カーソル(CR1)を使用して在庫表(ZAIKO)のすべての行を検索中に,カーソルを使用しないで,直接,商品名(SNAME)がセーターの行を削除します。

DECLARE CR1 CURSOR FOR
   SELECT * FROM ZAIKO
OPEN CR1
FETCH CR1 INTO <各列を取り出す変数名>
DELETE FROM ZAIKO
   WHERE SNAME='セーター'
CLOSE CR1