Hitachi

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


4.24.1 FETCH文 形式3の形式と規則

〈この項の構成〉

(1) 機能

検索結果中の複数行を,INTO句で指定した埋込み変数に一度に読み込みます。

(2) 使用権限

なし。

(3) 形式3 <検索結果中の複数行を,INTO句で指定した埋込み変数に一度に読み込む>

 FETCH {カーソル名|拡張カーソル名}  INTO :埋込み変数配列〔:標識変数配列〕
           〔,:埋込み変数配列〔:標識変数配列〕〕…

(4) オペランド

(a) {カーソル名|拡張カーソル名}

カーソル名

検索結果を取り出すカーソルの名称を指定します。

拡張カーソル名

検索結果を取り出すカーソルを識別する拡張カーソル名を指定します。

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

(b) :埋込み変数配列〔:標識変数配列〕〔,:埋込み変数配列〔:標識変数配列〕〕…

埋込み変数配列

ナル値以外の列の値を読み込むための配列変数(配列形式で宣言した埋込み変数)を指定します。ナル値を含む列の値を受け取る場合は,埋込み変数と標識変数を指定します。

標識変数配列

埋込み変数配列に読み込まれる列の値がナル値かどうかを示す値が返される標識変数(配列形式で宣言した標識変数)を指定します。

(5) 共通規則

  1. FETCH文で指定するカーソルは,ALLOCATE CURSOR文 形式2(結果集合カーソルの割当て)で割り当てた場合以外は,OPEN文で開いておいてください。

  2. 埋込み変数配列,及び標識変数配列の配列の要素数は,すべて同じ大きさにしてください。異なっている場合,取り出す行数は指定された配列の中で最も小さい配列の要素数に合わせます。

  3. 実際に取り出した行の累積行数は,SQL連絡領域のSQLERRD2(C言語の場合),又はSQLERRD(3)(COBOL言語の場合)に設定されます。

  4. 配列を使用したFETCHは,手続きの中では使えません。

  5. 配列を使用したFETCHでは,LOBデータは扱えません。

  6. 配列を使用したFETCHでは,ブロック転送の指定は無効です。

  7. 取り出し中に取り出す行がなくなった場合,次のリターンコードが設定されます。この場合,なくなる直前までの行のデータは返されます。

    • SQL連絡領域のSQLCODE領域に100

    • SQLCODE変数に100

    • SQLSTATE変数に’02000’

    また,リストを介した検索で,リスト作成時にあった行が削除された場合,又は属性値が削除,更新された場合,それを示すリターンコードは設定されません。この場合,無視して検索が継続されます。

  8. 取り出したどれかの行で警告する必要がある事象が発生した場合,SQL連絡領域のSQLWARNに警告情報が設定されます。

  9. 取り出した行のどれかの行でエラーが発生した場合,その行までのデータは返されます。

  10. 配列を使用したFETCHは,添字なし繰返し列の検索には使用できません。

(6) 留意事項

  1. 検索結果の列の値がナル値の場合は,それに対応する埋込み変数配列の要素の値は保証しません。

  2. 配列でない変数と配列型の変数は混在できません。

  3. SQL記述領域は指定できません。

  4. カーソルはFETCHをした最後の行に位置づけられます。カーソルを使用した更新を実行すると,FETCHをした最後の行が更新されます。

(7) 使用例

カーソル(CR3)による在庫表の検索結果を,C言語の配列変数に読み込みます。

EXEC  SQL  BEGIN  DECLARE  SECTION;
  long    XSCODE[50];
  short   ISCODE[50];
  char    XSNAME[50][17];
  short   ISNAME[50];
EXEC  SQL  END  DECLARE  SECTION;
 
EXEC  SQL  FETCH  CR3
    INTO   :XSCODE  :ISCODE,
             :XSNAME  :INAME;