4.22.1 FETCH文 形式1の形式と規則
(1) 機能
取り出す行を示すカーソルの位置を次の行に進め,その1行の列の値をINTO句で指定した埋込み変数に読み込みます。
(2) 使用権限
なし。
(3) 形式1 <検索結果中の1行を変数に読み込む>
FETCH {カーソル名|拡張カーソル名} INTO {:埋込み変数〔:標識変数〕 |〔文ラベル.〕SQL変数名 |〔〔認可識別子.〕ルーチン識別子.〕SQLパラメタ名 |〔文ラベル.〕SQL変数名..属性名〔..属性名〕… |〔〔認可識別子.〕ルーチン識別子.〕SQLパラメタ名..属性名〔..属性名〕…} 〔,{:埋込み変数〔:標識変数〕 |〔文ラベル.〕SQL変数名 |〔〔認可識別子.〕ルーチン識別子.〕SQLパラメタ名 |〔文ラベル.〕SQL変数名..属性名〔..属性名〕… |〔〔認可識別子.〕ルーチン識別子.〕SQLパラメタ名 ..属性名〔..属性名〕…}〕…
(4) オペランド
(a) {カーソル名|拡張カーソル名}
- カーソル名
-
検索結果を取り出すカーソルの名称を指定します。
- 拡張カーソル名
-
検索結果を取り出すカーソルを識別する拡張カーソル名を指定します。
拡張カーソル名については,「拡張カーソル名」を参照してください。
(b) :埋込み変数〔:標識変数〕
- 埋込み変数
-
ナル値以外の列の値を読み込むための埋込み変数を指定します。
ナル値を含む列の値を受け取る場合は,埋込み変数と,標識変数を指定します。
- 標識変数
-
埋込み変数に読み込まれる列の値がナル値かどうかを示す値が返される標識変数を指定します。
(c) 〔文ラベル.〕SQL変数名
SQL手続き中で列の値を受け取るために,SQL変数を指定します。
(d) 〔〔認可識別子.〕ルーチン識別子.〕SQLパラメタ名
SQL手続き中で列の値を受け取るために,SQLパラメタを指定します。
パブリック手続き定義のSQL手続き文中で認可識別子を指定する場合は,認可識別子にPUBLICを指定してください。
(e) 〔文ラベル.〕SQL変数名..属性名〔..属性名〕…
SQL手続き中で,列中の属性の値を受け取るために指定します。
(f) 〔〔認可識別子.〕ルーチン識別子.〕SQLパラメタ名..属性名〔..属性名〕…
SQL手続き中で,列中の属性の値を受け取るために指定します。
パブリック手続き定義のSQL手続き文中で認可識別子を指定する場合は,認可識別子にPUBLICを指定してください。
(5) 共通規則
-
FETCH文で指定するカーソルは,ALLOCATE CURSOR文 形式2(結果集合カーソルの割当て)で割り当てた場合以外は,OPEN文で開いておいてください。
-
検索結果の列の個数(カーソル宣言,又はALLOCATE CURSOR文に指定したSELECT文で指定した選択式の個数)と,FETCH文のINTO句で指定した埋込み変数,SQL変数,又はSQLパラメタの個数は同じにしてください。個数が異なる場合は,個数が少ない方に合わせて列の値を埋込み変数に読み込みます。このとき,SQL連絡領域のSQLWARN3領域に警告フラグ(W)が設定されます。
-
INTO句で指定する埋込み変数のデータ型は,対応する検索項目のデータ型,又は変換できるデータ型にしてください。
-
埋込み変数が既定文字集合の文字データ型で,かつ検索結果がその埋込み変数の文字集合と異なる文字データ型の場合,自動的に埋込み変数の文字集合に変換します。
-
固定長文字列(各国文字列,及び混在文字列を含む)の埋込み変数に取り出すデータが,検索項目の長さより短い場合は,左詰めに挿入され,余りの部分に空白が設定されます。
-
取り出す行がない場合,次のリターンコードが設定されます。
-
SQL連絡領域のSQLCODE領域に100
-
SQLCODE変数に100
-
SQLSTATE変数に’02000’
ただし,リストを介した検索でリスト作成時にあった行が削除された場合,又は属性値が削除,更新された場合,それぞれ110,110,’R2000’が設定されます。
-
(6) 留意事項
-
検索結果の列の値がナル値の場合は,対応する埋込み変数の値は保証しません。
-
カーソル名は,埋込み変数名と同様に,コンパイル単位のファイル内で有効な名前であり,同じカーソルに対する複数のSQLを,複数のファイルにわたって使用できません。
(7) 使用例
カーソル(CR1)による在庫表(ZAIKO)の検索結果を商品コード(SCODE)列,商品名(SNAME)列,色(COL)列,単価(TANKA)列,在庫量(ZSURYO)列に対応する埋込み変数,及び標識変数に読み込みます。
<埋込み変数を指定した場合>
FETCH CR1 INTO :XSCODE,:XSNAME,:XCOL, :XTANKA,:XZSURYO
<埋込み変数,標識変数を指定した場合>
FETCH CR1 INTO :XSCODE:ISCODE, :XSNAME:ISNAME, :XCOL:ICOL, :XTANKA:ITANKA, :XZSURYO:IZSURYO