Hitachi

ノンストップデータベース HiRDB Version 10 SQLリファレンス


4.10.1 DECLARE CURSOR 形式2の形式と規則

〈この項の構成〉

(1) 機能

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

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

(2) 使用権限

なし。

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

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

(4) オペランド

(a) カーソル名

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

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

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

(b) 〔WITH HOLD〕

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

  • ホールダブルカーソルに未対応のプラグインを使用した抽象データ型の列を指定した場合

  • ホールダブルカーソルに未対応のプラグインを使用した関数呼出しを指定した場合

  • ホールダブルカーソルに未対応のプラグインを使用した関数呼出しを指定して導出した,名前付きの導出表に対する問合せを指定した場合

  • リストを介した検索の場合

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

注※

プラグインのホールダブルカーソルへの対応状況については,ディクショナリ表SQL_PLUGINSのPLUGIN_HOLDABLE列で確認できます。ディクショナリ表SQL_PLUGINSについては,マニュアル「HiRDB UAP開発ガイド」を参照してください。

(c) 〔{WITH RETURN | WITHOUT RETURN}〕

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

(d) SQL文識別子

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

(5) 共通規則

  1. 宣言したカーソルは,閉じた状態になります。

  2. 宣言したカーソルを,UPDATE文,又はDELETE文で使用できません。

  3. 同じ名前のSQL文識別子に対して,複数のカーソル宣言をした場合,WITH HOLD指定のあるカーソル宣言と,WITH HOLD指定のないカーソル宣言を混在させることはできません。

(6) 参照制約に関する規則

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

(7) 留意事項

  1. カーソル名は,埋込み変数名と同様に,コンパイル単位のモジュール内で有効な名前であり,同じカーソルに対する複数のSQLを,複数のモジュールにわたって使用できません。

  2. 対応するPREPARE文は,カーソル宣言より先に記述してください。

  3. カーソル宣言は,この宣言で使用したカーソル名を参照するどのSQL文よりも先に記述する必要があります。

  4. DECLARE CURSORは実行文ではないため,SQLCODEにリターンコードは返されません。したがって,リターンコードの判定はしないでください。

  5. SQL最適化オプションの更新SQLの作業表作成抑止を適用して,更にインデクスキー値無排他機能を使用すると,FOR UPDATE又はFOR UPDATE OFを指定しないカーソルの使用中に,行の更新,追加,又は削除ができます。

(8) 使用例

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

DECLARE CR1 CURSOR FOR SEL