2.5.4 レコードの検索
SDBデータベース中のレコードを検索し,データ格納エリアまたは埋込み変数にレコードを取り出します。検索されたレコードに対してはレコードの位置づけが行われます。
- 〈この項の構成〉
(1) レコードのアクセス順序
レコードのアクセス順序について,SDBデータベース種別ごとに説明します。
(a) 4V FMBまたはSD FMBのSDBデータベースの場合
4V FMBまたはSD FMBのSDBデータベースの場合,データベースが階層構造を持つため,レコードへのアクセスもルートレコードから階層順に行う必要があります(「図2-28 4V FMBまたはSD FMBのSDBデータベースのアクセス順序の概要」の場合,レコードA1→C1の順にアクセスしたり,レコードC1に直接アクセスしたりすることはできません)。
レコードの検索,格納,および位置指示子の位置づけを行うと,レコードの位置づけが行われ,そのレコードの子レコードに対してアクセスができるようになります。
同一レコード型の別レコードに対してレコードの位置づけを行うと,前回アクセスしたレコードの子レコードに対してはアクセスできなくなり,今回アクセスしたレコードの子レコードに対してアクセスできるようになります。
4V FMBまたはSD FMBのSDBデータベースのアクセス順序の概要を次の図に示します。この図では,レコードA1→B1→B2→A1の順序で検索します。
- 注
-
SD FMBのSDBデータベースの場合,上記の図中の個別開始はシステムが内部的に実行します。
- ポイント
-
HiRDB/SDでは,レコードの検索や格納などを行うと,そのレコードの位置情報を保持します。この情報を位置指示子といいます。HiRDB/SDは,位置指示子を使用してSDBデータベースにアクセスします。位置指示子については,「2.5.3 位置指示子」を参照してください。
(b) 4V AFMのSDBデータベースの場合
4V AFMのSDBデータベースの場合,データベースが階層構造を持たないため,指定したレコードに直接アクセスできます。
- 参考
-
4V AFMのSDBデータベースでは仮想ルートレコード型を定義して,仮想親子集合を構成しますが,レコードへのアクセス時に仮想ルートレコードを意識する必要はありません。
(2) 検索の基点となるレコードと検索の方向
SDBデータベースでは,レコードに設定されたポインタに従ってレコードの格納順にレコードを検索します。そのため,レコードを検索する場合は,検索の基点となるレコードと検索の方向を指定します。
(a) 検索の基点となるレコード
検索の基点となるレコードをAPIまたはDMLの指示コードで指定します。指定できる指示コードと検索の基点となるレコードを次の表に示します。
指示コード |
検索の基点となるレコード |
説明 |
|
---|---|---|---|
APIの場合 |
DMLの場合 |
||
F |
FIRST |
先頭のレコード(FIRSTポインタ) |
|
L |
LAST |
最後のレコード(LASTポインタ) |
|
U |
− |
USERポインタが指すレコード |
|
N |
NEXT |
位置づけされているレコードの次のレコード(NEXTポインタ) |
|
P |
PRIOR |
位置づけされているレコードの1つ前のレコード(PRIORポインタ) |
|
(3) レコードの検索範囲
検索の基点となるレコードと検索の方向の組み合わせによって,レコードの検索範囲が決定します。レコードと検索の方向の組み合わせを次の図に示します。
- 注意事項
-
4V FMBまたは4V AFMのSDBデータベースの場合,SDBデータベース種別やルートレコード・子レコードによって実行できない組み合わせがあります。詳細については,マニュアル「TP1/Financial Service Platform 使用の手引」の「SDBハンドラ機能」の「レコード検索範囲」を参照してください。
また,レコードの特定方法によっては,レコードの検索範囲は無視されます。
(4) レコードの特定方法
レコードの検索では,次のどれかの方法でレコードを特定します。
-
特定位置のレコード(FIRSTポインタ,LASTポインタ,またはUSERポインタが指すレコード)を対象とする。
-
検索条件(DMLの場合はキーの条件)に該当する最初のレコードを対象とする。
-
前回検索したレコードの前後のレコードを対象とする。
(5) レコードの位置づけ
ルートレコードの検索(FETCH)時,または位置指示子の位置づけ(FIND)時は,レコードに位置指示子を位置づけておく必要はありません。
子レコードの検索時は,位置指示子を親レコードに位置づけておく必要があります。ただし,4V AFMのSDBデータベースの場合は,位置指示子を親レコードに位置づけておく必要はありません(親レコードになる仮想ルートレコードの検索と位置づけをHiRDB/SDが内部的に行います)。
レコードの位置づけについては,「2.5.3(1) レコードの位置づけ」を参照してください。
(6) 個別開始/終了一括要求オプションを指定したレコードの検索
4V FMBまたは4V AFMのSDBデータベースを操作するAPIで個別開始/終了一括要求オプションを指定すると,UAPから個別開始および個別終了の要求を行わなくてもレコードを検索できます。個別開始/終了一括要求オプションの指定方法については,マニュアル「TP1/Financial Service Platform 使用の手引」の「SDBハンドラ機能」の「個別開始/終了一括要求」を参照してください。
なお,SD FMBのSDBデータベースを操作するDMLでは,個別開始/終了一括要求オプションは指定できません。
(a) レコードの検索処理の流れ
個別開始/終了一括要求オプションを指定した場合のレコードの検索処理の流れを次の図に示します。
個別開始/終了一括要求オプションを指定しない場合のレコードの検索処理の流れを次の図に示します。
(b) 個別開始/終了一括要求オプションの適用基準
個別開始後,レコードの検索を1回だけ実行して個別終了を要求するような場合,個別開始/終了一括要求オプションを指定すると,UAPからの個別開始および個別終了の要求が不要になるため,個別開始と個別終了によるUAPとHiRDB間の処理のオーバーヘッドがなくなり,性能が向上します。
ただし,個別開始/終了一括要求オプションを指定した場合,レコードの検索後に個別終了が実行されるため,次のようなレコードの位置づけを目的としたレコード検索はできません。
-
レコードの更新や削除をするためのレコードの検索
-
次のレコードの検索要求で,検索の基点とするためのレコードの検索
また,レコードの位置づけを目的としないレコードの検索の場合でも,同じSDBデータベースに対して複数回レコードの検索を行う際に,このオプションを指定すると,レコードの検索を行うごとに個別開始および個別終了処理が実行されるため,性能低下の原因になるおそれがあります。
(c) 留意事項
-
個別開始/終了一括要求オプションを指定した場合,UAPからの個別開始および個別終了の要求は不要になります。しかし,個別開始および個別終了の処理は実行されるため,個別開始および個別終了の要求を実行したものとしてメモリ所要量を見積もってください。
-
同一トランザクション内で,個別開始/終了一括要求オプションを指定したレコードの検索と,個別開始の要求を行うSDBデータベースの操作を混在して実行できます。
-
個別開始/終了一括要求オプションを指定した場合,オプションを指定しない場合に比べて次の点が異なります。
-
排他自動解除機能を使用している場合,検索したレコード実現値の格納ページに対する排他は解除されます。
-
個別開始/終了一括要求オプションを指定して検索したレコード実現値を,同一トランザクション内で再度検索したり,一括削除したりしてもアクセス競合のエラーは発生しません。
-