Hitachi

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


4.2.1 ALLOCATE CURSOR文 形式1の形式と規則

〈この項の構成〉

(1) 機能

PREPARE文で前処理したSELECT文(動的SELECT文)に対してカーソルを定義して割当てます。

(2) 使用権限

なし。

(3) 形式1<PREPARE文で前処理したSELECT文(動的SELECT文)に対するカーソル割当て>

 ALLOCATE 拡張カーソル名 CURSOR 〔WITH HOLD〕FOR 拡張文名

(4) オペランド

(a) 拡張カーソル名

割当てるカーソルの拡張カーソル名を指定します。

拡張カーソル名については,「拡張カーソル名」を参照してください。

(b) 〔WITH HOLD〕

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

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

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

  • リストを介した検索

  • ON COMMIT DELETE ROWSを指定して定義した一時表に対する問合せ

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

注※

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

(c) 拡張文名

有効範囲内で,PREPARE文で前処理したSELECT文を識別する拡張文名を指定します。

拡張文名については,「拡張文名」を参照してください。

(5) 共通規則

  1. 割当てられたカーソルは,閉じた状態になります。

  2. 同じSELECT文を識別する拡張文名に対して,複数のカーソルを割当てた場合,WITH HOLD指定のあるカーソル割当てと,WITH HOLD指定のないカーソル割当てを混在させることはできません。

(6) 留意事項

  1. 指定した拡張カーソル名が既にその有効範囲内で割当てられている場合はエラーとなります。

(7) 使用例

  1. 在庫表(ZAIKO)から,行を1行ずつ取り出すためにカーソル(拡張カーソル名cr(有効範囲:GLOBAL))を割当てます。

    PREPARE GLOBAL :sel FROM ‘SELECT * FROM ZAIKO’
    ALLOCATE GLOBAL :cr CURSOR FOR GLOBAL :sel
  2. 在庫表(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