17.4.2 FETCH文
- 〈この項の構成〉
(1) 機能
レコードを検索して,レコード実現値を取得します。また,検索したレコードに対して位置づけを行います。
検索には,次の2つがあります。
-
レコード型内の検索
レコード位置指示子を使用した検索です。常にインデクスを使用した検索となります。
-
親子集合型内の検索
親子集合位置指示子を使用した検索です。特定の親レコード実現値配下の子レコードを検索します。常にポインタを使用した検索となります。
検索は順序,開始位置,および検索方向を決定してレコードを検索します。詳細については,「17.3.3 検索の順序,開始位置および方向」を参照してください。
(2) 形式
(a) UAPに記述するFETCH文
FETCH 〔FOR UPDATE〕 {FIRST|NEXT|LAST|PRIOR} レコード名 〔INDEXED BY インデクス名〕 INTO :埋込み変数 〔WITHIN 親子集合型名〕 〔WHERE (探索条件)〕
(b) DMLコマンドで記述するFETCH文
FETCH 〔FOR UPDATE〕 {FIRST|NEXT|LAST|PRIOR} レコード名 〔INDEXED BY インデクス名〕 〔WITHIN OWNER〕 〔WHERE (探索条件)〕
(3) オペランドの説明
- ●FOR UPDATE
-
検索したレコードを更新(ERASE,MODIFY)するかどうかを指定します。
検索したレコードを更新する場合は,FOR UPDATEを指定してください。
検索したレコードを更新しない場合は,FOR UPDATEを省略してください。
- ●{FIRST|NEXT|LAST|PRIOR}
-
検索の開始位置となるレコードと,検索の方向を示す指示コードを指定します。
FIRST:先頭から順方向に検索します。
NEXT:位置づけされているレコードから順方向に検索します。
LAST:最後から逆順方向に検索します。
PRIOR:位置づけされているレコードから逆順方向に検索します。
LASTおよびPRIORは親子集合型内の検索のときだけ指定できます。
検索の開始位置,方向については,「17.3.3 検索の順序,開始位置および方向」を参照してください。
- ●レコード名
-
〜<識別子>((1〜30バイト))
検索対象のレコード名を指定します。
- 注意事項
-
-
レコード名に英小文字を使用している場合は,レコード名を引用符(")で囲んでください。引用符で囲まないと,英小文字は英大文字と見なされます。
-
レコード名に空白またはハイフン(-)を使用している場合は,レコード名を引用符(")で囲んでください。
-
- ●INDEXED BY インデクス名
-
〜<識別子>((1〜30バイト))
検索で使用するインデクスを明示する場合に指定します。
レコード型内の検索で指定できます。インデクス名には,検索対象のレコードに定義されたインデクスの名称を指定してください。
- 注意事項
-
-
インデクス名に英小文字を使用している場合は,インデクス名を引用符(")で囲んでください。引用符で囲まないと,英小文字は英大文字と見なされます。
-
インデクス名に空白またはハイフン(-)を使用している場合は,インデクス名を引用符(")で囲んでください。
-
- ●INTO :埋込み変数
-
検索したレコード実現値を読み込むための埋込み変数を指定します。
埋込み変数の宣言方法については,マニュアル「HiRDB 構造型データベース機能(UAP開発編)」の「UAPの作成」の「埋込み変数の宣言」を参照してください。
- ●WITHIN 親子集合型名
-
〜<識別子>((1〜30バイト))
親子集合型内の検索を行う場合に指定します。
- 注意事項
-
-
親子集合型名に英小文字を使用している場合は,親子集合型名を引用符(")で囲んでください。引用符で囲まないと,英小文字は英大文字と見なされます。
-
親子集合型名に空白またはハイフン(-)を使用している場合は,親子集合型名を引用符(")で囲んでください。
-
- ●WITHIN OWNER
-
親子集合型内の検索を行う場合に指定します。
- ●WHERE (探索条件)
-
検索するレコードの条件を指定します。探索条件が真になるレコードが検索対象になります。
探索条件については,「17.3.1 探索条件の指定」を参照してください。
(4) 共通規則
-
レコード型内の検索は,インデクスを使用した検索となります。インデクスが定義されていないレコードは,レコード型内の検索を実行できません。インデクス選択規則については,「17.3.2 インデクス選択規則」を参照してください。
-
親子集合型内の検索の場合,検索対象のレコードの親レコードを次のどれかのDMLで位置づけておく必要があります。
-
FIND文
-
FETCH文
-
STORE文
-
(5) 使用例
- 例1
-
ルートレコードRECAをレコード型内の検索で検索します。
条件値に埋込み変数を指定します。
FETCH FOR UPDATE FIRST "RECA" INTO :WRECA WHERE("KEYDATA"=:WKEYDATA)
- 例2
-
ルートレコードRECAをレコード型内の検索で検索します。
条件値に構成要素に対応する値を指定します。
FETCH FOR UPDATE FIRST "RECA" INTO :WRECA WHERE("KEYDATA"='0001')
- 例3
-
ルートレコードRECAをレコード型内の検索で検索します。
条件値に構成要素に対応する値を複数指定します。
FETCH FOR UPDATE FIRST "RECA" INTO :WRECA WHERE("KEYDATA"=('FS','aa'))
- 例4
-
子レコードCHILD_RECBを親子集合型内の検索で検索します。
FETCH FOR UPDATE FIRST "CHILD_RECB" INTO :WCHILD_RECB WITHIN "SET_AB"
- 例5
-
子レコードCHILD_RECBをレコード型内の検索で検索します。
FETCH FOR UPDATE FIRST "CHILD_RECB" INTO :WCHILD_RECB
- 例6
-
DMLコマンドでルートレコードRECAをレコード型内の検索で検索します。
FETCH FOR UPDATE FIRST "RECA" WHERE("KEYDATA"='0001')
- 例7
-
DMLコマンドで子レコードCHILD_RECBを親子集合型内の検索で検索します。
FETCH FOR UPDATE FIRST "CHILD_RECB" WITHIN OWNER
- 例8
-
DMLコマンドで子レコードCHILD_RECBをレコード型内の検索で検索します。
FETCH FOR UPDATE FIRST "CHILD_RECB"