4.23.1 FETCH文 形式2の形式と規則
- 〈この項の構成〉
(1) 機能
検索結果中の1行,又は複数行を,SQL記述領域に指定した受け取り領域に読み込みます。
(2) 使用権限
なし。
(3) 形式2 <検索結果中の1行,又は複数行を,SQL記述領域に指定した受け取り領域に読み込む>
FETCH {カーソル名|拡張カーソル名} USING DESCRIPTOR 〔:〕SQL記述領域名 〔CHARACTER_SET〔:〕文字集合名記述領域名〕 〔BY :埋込み変数〔ROWS〕〕
(4) オペランド
(a) {カーソル名|拡張カーソル名}
- カーソル名
-
検索結果を取り出すカーソルの名称を指定します。
- 拡張カーソル名
-
検索結果を取り出すカーソルを識別する拡張カーソル名を指定します。
拡張カーソル名については,「拡張カーソル名」を参照してください。
(b) 〔:〕SQL記述領域名
検索結果を受け取るために必要な情報を設定したSQL記述領域の名称を指定します。
(c) 〔CHARACTER_SET〔:〕文字集合名記述領域名〕
検索結果の文字集合名を受け取るために必要な情報を設定した文字集合名記述領域の名称を指定します。
(d) 〔BY :埋込み変数〔ROWS〕〕
SQL記述領域に設定された配列を使用して,FETCH用の領域の大きさを要素数で設定した埋込み変数を指定します。SMALLINT型の埋込み変数を指定してください。設定値は1〜30,000の範囲にしてください。0及び負の値を設定した場合はエラーとなります。また,バージョン05-03より前のクライアントライブラリを使用した場合には,動作が保証されません。
(5) 共通規則
-
FETCH文で指定するカーソルは,ALLOCATE CURSOR文 形式2(結果集合カーソルの割当て)で割り当てた場合以外は,OPEN文で開いておいてください。
-
UAPがFETCH文を実行するときに必要な情報は,SQL記述領域名で指定したSQL記述領域中に設定しておいてください。SQL記述領域については,マニュアル「HiRDB UAP開発ガイド」を参照してください。
-
取り出す行がない場合,次のリターンコードが設定されます。
-
SQL連絡領域のSQLCODE領域に100
-
SQLCODE変数に100
-
SQLSTATE変数に’02000’
ただし,リストを介した検索でリスト作成時にあった行が削除された場合,又は属性値が削除,更新された場合,それぞれ110,110,’R2000’が設定されます。
-
-
SQL記述領域で指定する受取り領域のデータ型は,対応する検索項目のデータ型と変換できるデータ型です。
-
検索結果が文字データ型で,検索結果の文字集合が文字集合名記述領域に指定した文字集合と異なる場合,自動的に文字集合名記述領域に指定した文字集合に変換します。
-
BY :埋込み変数〔ROWS〕を指定する場合,SQL記述領域のSQLSYSにデータ型に対応した値を設定しておく必要があります。
-
可変長文字列(VARCHAR,NVARCHAR,又はMVARCHAR)の場合
文字列の長さを格納する領域と,境界調整によって生じる要素間のギャップも含めた1要素分の値を設定してください。
例えば,次のようなVARCHAR型の配列変数の場合は,SQLSYSに設定する値はsizeof(vchr[0])となります。
struct { short len; char str[257]; } vchr[128];
-
ほかのデータ型の場合
0を設定してください。
-
(6) 留意事項
-
カーソル名は,埋込み変数名と同様に,コンパイル単位のモジュール内で有効な名前であり,同じカーソルに対する複数のSQLを,複数のモジュールにわたって使用できません。
(7) 使用例
カーソル(CR2)による在庫表の検索結果を,SQL記述領域に指定した受け取り領域に読み込みます。
FETCH CR2 USING DESCRIPTOR SQLDA