スケーラブルデータベースサーバ HiRDB Version 8 SQLリファレンス

[目次][索引][前へ][次へ]

DECLARE CURSOR 形式2(カーソル宣言

機能

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

形式2では,PREPARE文で前処理したSELECT文(動的SELECT文)に対するカーソルの宣言をします。

使用権限

なし。

形式2 <PREPARE文で前処理したSELECT文(動的SELECT文)に対するカーソルの宣言>

 
 DECLARE カーソル名 CURSOR
   〔WITH HOLD〕〔{WITH RETURN | WITHOUT RETURN}〕 FOR SQL文識別子
 

オペランド

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

UAP中で指定する場合は,SQLの予約語と同じ名称でも,引用符(")で囲まないでください。ただし,SQLの予約語と同じ名称を手続き中に指定する場合は,引用符(")で囲んでください。

カーソル名については,「1.1.7 名前の指定」を参照してください。

ホールダブルカーソルを使用する場合に指定します。ただし,次の場合,ホールダブルカーソルは使用できません。

なお,ホールダブルカーソルについては,マニュアル「HiRDB Version 8 UAP開発ガイド」を参照してください。

SQL手続き中のカーソル宣言で,そのカーソルの結果集合の返却可能性を指定します。WITH RETURNを指定して宣言したカーソルを結果集合カーソルといいます。SQL手続き中で宣言された結果集合カーソルを,開いた状態のまま手続きを終了すると,カーソルの結果集合を手続きの呼出し元に返却できます。返却した結果集合の使用方法については,「1.9.3 結果集合返却機能」を参照してください。

PREPARE文で前処理したSELECT文に付けられたSQL文識別子を指定します。

共通規則

  1. 宣言したカーソルは,閉じた状態になります。
  2. 宣言したカーソルを,UPDATE文,又はDELETE文で使用できません。
  3. 同じ名前のSQL文識別子に対して,複数のカーソル宣言をした場合,他RDノードを参照するカーソルは開けません。
  4. 同じ名前のSQL文識別子に対して,複数のカーソル宣言をした場合,WITH HOLD指定のあるカーソル宣言とないカーソル宣言を混在させることはできません。
  5. 外部表,又は外部表を基表とするビュー表を指定したSQL文では,カーソルを使用した更新及び削除はできません。

参照制約に関する規則

  1. ホールダブルカーソルを使用して,外部キーの定義されている表を検索している場合,検索中の表が検査保留状態となったときは,カーソルは閉じた状態になります。

留意事項

  1. カーソル名は,埋込み変数名と同様に,コンパイル単位のモジュール内で有効な名前であり,同じカーソルに対する複数のSQLを,複数のモジュールにわたって使用できません。
  2. 対応するPREPARE文は,カーソル宣言より先に記述してください。
  3. カーソル宣言は,この宣言で使用したカーソル名を参照するどのSQL文よりも先に記述する必要があります。
  4. DECLARE CURSORは実行文ではないため,SQLCODEにリターンコードは返されません。したがって,リターンコードの判定はしないでください。
  5. SQL最適化オプションの更新SQLの作業表作成抑止を適用して,更にインデクスキー値無排他機能を使用すると,FOR UPDATE又はFOR UPDATE OFを指定しないカーソルの使用中に,行の更新,追加,又は削除ができます。

使用例

前処理したSELECT文(SQL文識別子:SEL)によって指定した行を1行ずつ取り出すために,カーソル(CR1)を宣言します。

 
DECLARE CR1 CURSOR FOR SEL