4.2.1 ALLOCATE CURSOR文 形式1の形式と規則
- 〈この項の構成〉
(1) 機能
PREPARE文で前処理したSELECT文(動的SELECT文)に対してカーソルを定義して割当てます。
(2) 使用権限
なし。
(3) 形式1<PREPARE文で前処理したSELECT文(動的SELECT文)に対するカーソル割当て>
ALLOCATE 拡張カーソル名 CURSOR 〔WITH HOLD〕FOR 拡張文名
(4) オペランド
(b) 〔WITH HOLD〕
ホールダブルカーソルとして割当てる場合に指定します。ただし,次の場合,ホールダブルカーソルは使用できません。
-
FROM句に,ホールダブルカーソルに未対応のプラグイン※を使用した抽象データ型を含む表を指定した場合
-
ホールダブルカーソルに未対応のプラグイン※を使用した関数呼出しを指定して導出した,名前付きの導出表に対する問合せ
-
リストを介した検索
-
ON COMMIT DELETE ROWSを指定して定義した一時表に対する問合せ
なお,ホールダブルカーソルについては,マニュアル「HiRDB UAP開発ガイド」を参照してください。
- 注※
-
プラグインのホールダブルカーソルへの対応状況については,ディクショナリ表SQL_PLUGINSのPLUGIN_HOLDABLE列で確認できます。ディクショナリ表SQL_PLUGINSについては,マニュアル「HiRDB UAP開発ガイド」を参照してください。
(5) 共通規則
-
割当てられたカーソルは,閉じた状態になります。
-
同じSELECT文を識別する拡張文名に対して,複数のカーソルを割当てた場合,WITH HOLD指定のあるカーソル割当てと,WITH HOLD指定のないカーソル割当てを混在させることはできません。
(6) 留意事項
-
指定した拡張カーソル名が既にその有効範囲内で割当てられている場合はエラーとなります。
(7) 使用例
-
在庫表(ZAIKO)から,行を1行ずつ取り出すためにカーソル(拡張カーソル名cr(有効範囲:GLOBAL))を割当てます。
PREPARE GLOBAL :sel FROM ‘SELECT * FROM ZAIKO’ ALLOCATE GLOBAL :cr CURSOR FOR GLOBAL :sel
-
在庫表(ZAIKO)から,カーソル(拡張カーソル名:cr(有効範囲:GLOBAL,値:’CR1’))を使用してすべての行を検索しながら,動的にカーソル位置の行の単価(TANKA)を1割引に更新します。
<埋込み変数selに任意の名称を設定> PREPARE GLOBAL :sel FROM ‘SELECT * FROM ZAIKO FOR UPDATE’ <埋込み変数crに’CR1’を設定> ALLOCATE GLOBAL :cr CURSOR FOR GLOBAL :sel PREPARE PRE1 FROM ‘UPDATE SET TANKA = <単価の1割引の値> WHERE CURRENT OF GLOBAL CR1’ OPEN GLOBAL :cr FETCH GLOBAL :cr INTO <各列を取り出す変数名> EXECUTE PRE1 CLOSE GLOBAL :cr DEALLOCATE PREPARE GLOBAL :sel