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) 共通規則
-
宣言したカーソルは,閉じた状態になります。
-
宣言したカーソルを,UPDATE文,又はDELETE文で使用できません。
-
同じ名前のSQL文識別子に対して,複数のカーソル宣言をした場合,WITH HOLD指定のあるカーソル宣言と,WITH HOLD指定のないカーソル宣言を混在させることはできません。
(6) 参照制約に関する規則
-
ホールダブルカーソルを使用して,外部キーの定義されている表を検索している場合,検索中の表が検査保留状態となったときは,カーソルは閉じた状態になります。
(7) 留意事項
-
カーソル名は,埋込み変数名と同様に,コンパイル単位のモジュール内で有効な名前であり,同じカーソルに対する複数のSQLを,複数のモジュールにわたって使用できません。
-
対応するPREPARE文は,カーソル宣言より先に記述してください。
-
カーソル宣言は,この宣言で使用したカーソル名を参照するどのSQL文よりも先に記述する必要があります。
-
DECLARE CURSORは実行文ではないため,SQLCODEにリターンコードは返されません。したがって,リターンコードの判定はしないでください。
-
SQL最適化オプションの更新SQLの作業表作成抑止を適用して,更にインデクスキー値無排他機能を使用すると,FOR UPDATE又はFOR UPDATE OFを指定しないカーソルの使用中に,行の更新,追加,又は削除ができます。
(8) 使用例
前処理したSELECT文(SQL文識別子:SEL)によって指定した行を1行ずつ取り出すために,カーソル(CR1)を宣言します。
DECLARE CR1 CURSOR FOR SEL