17.3.3 検索の順序,開始位置および方向
レコード型内の検索と親子集合型内の検索は,順序,開始位置および方向を決定してレコードを検索します。
順序は,レコードの並び順です。検索結果は,順序に従い検索された結果となります。開始位置は,順序で並んだレコード中の検索の開始位置です。方向は,順序で並んだレコードの検索方向(順方向,または逆順方向)です。
検索ごとの順序,開始位置および方向について説明します。
- 〈この項の構成〉
(1) レコード型内の検索
レコード型内の検索の順序,開始位置,方向は,次の3つの要素によって決定します。
-
DMLの指示コード
FIRSTまたはNEXT
-
レコード位置指示子の状態
有効,または空値
-
検索順序の状態
有効,または無効
前回のDML操作で順序が決定された状態かどうかを指します。検索順序はFETCH文,FIND文の実行時に決定します。
なお,レコード位置指示子が空値の場合,検索順序の状態は無効です。
検索順序が無効になる操作を次に示します。
-
レコード型内の検索以外でレコード位置指示子を位置づけた場合(親子集合型内の検索,位置指示子指定の検索)
-
STORE文の実行時
-
レコード型内の検索での順序,開始位置,方向を次の表に示します。
項番 |
指示コード |
レコード位置指示子の状態 |
検索順序の状態 |
順序 |
開始位置 |
方向 |
---|---|---|---|---|---|---|
1 |
FIRST |
− |
− |
DMLの指定内容に従い検索に使用するインデクスをシステムが選択します。順序はインデクスのキー値の順となります。※1 |
インデクスの先頭のキー値を持つレコード |
インデクスのキー値の順方向 |
2 |
NEXT |
空値 |
− |
DMLの指定内容に従い検索に使用するインデクスをシステムが選択します。順序はインデクスのキー値の順となります。※1 |
インデクスの先頭のキー値を持つレコード |
|
3 |
有効 |
無効 |
DMLの指定内容に従い検索に使用するインデクスをシステムが選択します。順序はインデクスのキー値の順となります。※1 |
位置指示子が示すレコードの1つあとのキー値を持つレコード |
||
4 |
有効 |
検索に使用するインデクスのキー値の順となります。※2 |
位置指示子が示すレコードの1つあとのキー値を持つレコード |
(例)
(2) 親子集合型内の検索
親子集合型内の検索の順序,開始位置,方向は次の2つの要素によって決定します。
-
DMLの指示コード
FIRST,LAST,NEXT,またはPRIOR
-
親子集合位置指示子の子レコードの状態
-
有効,または空値
-
複合状態,または複合状態ではない
-
親子集合型内の検索での順序,開始位置,方向を次の表に示します。
項番 |
指示コード |
親子集合位置指示子の子レコードの状態 |
順序 |
開始位置 |
方向 |
|
---|---|---|---|---|---|---|
1 |
FIRST |
− |
親子集合型のレコード間ポインタの順序 |
親レコードのFIRSTポインタが指すレコード |
NEXTポインタの方向 |
|
2 |
LAST |
− |
親レコードのLASTポインタが指すレコード |
PRIORポインタの方向 |
||
3 |
NEXT |
有効 |
複合状態ではない |
位置指示子の子レコードのNEXTポインタが指すレコード |
NEXTポインタの方向 |
|
4 |
複合状態である |
位置指示子の子1のレコードのNEXTポインタが指すレコード |
||||
5 |
空値 |
親レコードのFIRSTポインタが指すレコード |
||||
6 |
PRIOR |
有効 |
複合状態ではない |
位置指示子の子レコードのPRIORポインタが指すレコード |
PRIORポインタの方向 |
|
7 |
複合状態である |
位置指示子の子2のレコードのPRIORポインタが指すレコード |
||||
8 |
空値 |
親レコードのLASTポインタが指すレコード |