17.4.3 FIND文
- 〈この項の構成〉
(1) 機能
レコードを検索して,レコード実現値に位置指示子を位置づけます。
位置づけには,次の3つの検索があります。
-
レコード型内の検索
レコード位置指示子を使用した検索です。常にインデクスを使用した検索となります。
-
親子集合型内の検索
親子集合位置指示子を使用した検索です。特定の親レコード実現値配下の子レコードを検索します。常にポインタを使用した検索となります。
-
位置指示子指定の検索
DMLに指定した位置指示子が指すレコードを検索します。
レコード型内の検索と親子集合型内の検索は,順序,開始位置,および検索方向を決定してレコードを検索します。詳細については,「17.3.3 検索の順序,開始位置および方向」を参照してください。
(2) 形式
-
レコード型内の検索,親子集合型内の検索
FIND 〔FOR UPDATE〕 {FIRST|NEXT|LAST|PRIOR} レコード名〔WITHIN 親子集合型名〕 〔WHERE (探索条件)〕
-
位置指示子指定の検索
FIND 〔FOR UPDATE〕 CURRENT OWNER OF 親子集合型名
(3) オペランドの説明
- ●FOR UPDATE
-
位置づけたレコードを更新(ERASE,MODIFY)するかどうかを指定します。
位置づけたレコードを更新する場合は,FOR UPDATEを指定してください。
位置づけたレコードを更新しない場合は,FOR UPDATEを省略してください。
- ●{FIRST|NEXT|LAST|PRIOR}
-
レコード走査の開始位置となるレコードとレコード走査の方向を示す指示コードを指定します。
FIRST:先頭から順方向に検索します。
NEXT:位置づけされているレコードから順方向に検索します。
LAST:最後から逆順方向に検索します。
PRIOR:位置づけされているレコードから逆順方向に検索します。
LASTおよびPRIORは親子集合型内の検索のときだけ指定できます。
検索の開始位置,方向については,「17.3.3 検索の順序,開始位置および方向」を参照してください。
- ●レコード名
-
〜<識別子>((1〜30バイト))
位置づけるレコード名を指定します。
- 注意事項
-
-
レコード名に英小文字を使用している場合は,レコード名を引用符(")で囲んでください。引用符で囲まないと,英小文字は英大文字と見なされます。
-
レコード名に空白またはハイフン(-)を使用している場合は,レコード名を引用符(")で囲んでください。
-
- ●WITHIN 親子集合型名
-
〜<識別子>((1〜30バイト))
親子集合型内の検索を行う場合に指定します。
- 注意事項
-
-
親子集合型名に英小文字を使用している場合は,親子集合型名を引用符(")で囲んでください。引用符で囲まないと,英小文字は英大文字と見なされます。
-
親子集合型名に空白またはハイフン(-)を使用している場合は,親子集合型名を引用符(")で囲んでください。
-
- ●WHERE (探索条件)
-
位置づけるレコードの条件を指定します。探索条件が真になるレコードが位置づけ対象になります。探索条件は,レコード型内の位置づけの際に指定できます。
探索条件については,「17.3.1 探索条件の指定」を参照してください。
- ●CURRENT OWNER OF 親子集合型名
-
位置指示子指定の検索の場合に指定します。
検索対象の親子集合型名を指定します。
指定された親子集合型の位置指示子の親レコードを検索対象とし,関連する位置指示子を更新します。
(4) 共通規則
-
HiRDB/SDデータベースアクセスユティリティ(pdsdbexe)のDMLコマンドでは実行できません。
-
レコード型内の位置づけは,インデクスを使用します。インデクスが定義されていないレコードは,レコード型内の位置づけは実行できません。インデクス選択規則については,「17.3.2 インデクス選択規則」を参照してください。
-
親子集合型内の検索の場合,検索対象のレコードの親レコードを次のどれかのDMLで位置づけておく必要があります。
-
FIND文
-
FETCH文
-
STORE文
-
-
位置指示子指定の検索で,検索対象レコードがルートレコードではない場合,SDBデータベース格納定義の検索対象レコードが子レコードである親子集合のMEMBER POINTER FOR句にOWNERを指定しておく必要があります。例を次に示します。
DML
FIND CURRENT OWNER OF "SETBC"
SDBデータベース定義
[説明]
-
DMLには親子集合SETBCが指定されています。
-
DMLの検索対象レコードはRECB(SETBCの親レコード)です。
-
RECBは親子集合SETABの子レコードとして定義されています。そのため,SETABのSDBデータベース格納定義のMEMBER POINTER FOR句にOWNERを指定しておく必要があります。
-
-
位置指示子指定の検索の場合,指定した親子集合位置指示子の親レコードを次のどれかのDMLで位置づけておく必要があります。
-
FIND文
-
FETCH文
-
STORE文
-
-
位置指示子指定の検索を実行すると,対象レコードの検索状態は無効になります。
(5) 使用例
- 例1
-
レコード型内の検索で,レコード実現値を更新するための位置づけを行います。
FIND FOR UPDATE FIRST "RECA" WHERE("KEYDATA"=:WKEYDATA)
- 例2
-
レコード型内の検索で,レコードを検索するための位置づけを行います。
FIND FIRST "RECA" WHERE("KEYDATA"='0001')
- 例3
-
親子集合型内の検索で,レコードを検索するための位置づけを行います。
FIND FIRST "RECB" WITHIN SET1
- 例4
-
位置指示子指定の検索例です。
ここでは,RECA(ルートレコード),RECB(子レコード),SETAB(RECAとRECBの親子集合型名)とします。
-
レコード型内の検索で,RECB(子レコード)の位置づけを行います。
FIND FIRST "RECB"
この検索では,RECBのレコード位置指示子,SETABの親子集合位置指示子の子および親が位置づけられます。
-
位置指示子指定の検索で,RECA(親レコード)の位置づけを行います。
FIND CURRENT OWNER OF "SETAB"
-