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