2.5.11 複数レコードの検索【4V FMB】
複数レコードの検索とは,ルートレコード以下のすべてのレコードを検索し,データ格納エリアに一括して取得する機能です。レコードを一括して検索することによって,レコードを1件ずつ検索するよりも,検索時のオーバヘッドを抑えることができます。
複数レコードの検索は,4V FMBのSDBデータベースの場合に実行できます。
複数レコードの検索の概要を次の図に示します。
- 〈この項の構成〉
(1) 複数レコードの検索の詳細
複数レコードの検索の詳細を次に示します。
-
複数レコードの検索は,ルートレコードから開始し,レコード型を一筆書き順に検索します。レコード型の一筆書き順については,「11.5.1(3) 定義句の指定順序」の「図11-11 RECORD句およびSET句の指定順序(一筆書き順)の規則」を参照してください。
-
検索するルートレコードの条件を指定すると,検索する範囲を限定できます。
-
取得したレコードは,データ格納エリアにまとめて格納されます。
-
複数レコードの検索は,ファミリ単位で行われます。1ファミリの検索が完了すると,データ格納エリアに未使用領域があっても,検索を継続しないでUAPにリターンします。
-
1ファミリの検索中であっても,データ格納エリアが満杯になると検索を中断して,UAPにリターンします。
-
複数レコードの検索時は,データ格納エリアに対するレコードの格納形式が異なります。レコードを取り出す際には,複数レコードの検索時のレコードの格納形式に従って取り出します。複数レコードの検索時の,データ格納エリアに対するレコードの格納形式については,「付録M 複数レコードの検索時の,データ格納エリアに対するレコードの格納形式【4V FMB】」を参照してください。
(2) 検索時の動作と指示コードの指定
複数レコードを検索するAPIでは,検索時の動作を指示コードで指定できます。
複数レコードの検索で指定する指示コードと検索時の動作を次の表に示します。
項番 |
指示コード |
検索時の動作 |
---|---|---|
1 |
'F' |
条件式で指定されたルートレコードから検索を開始します。 |
2 |
'N' |
前回,複数レコードの検索で検索したレコードの,次のレコードから検索を開始します。 |
3 |
'S' |
前回,複数レコードの検索で検索したファミリの,次のファミリ(次のルートレコード)から検索を開始します。 |
(3) 複数レコードの検索の流れ
複数レコードの検索の流れを次に示します。実際のAPIの指定方法については,マニュアル「TP1/Financial Service Platform プログラム作成の手引」を参照してください。
-
複数レコードの検索専用オプションを指定して,個別開始を実行します。
-
指示コードに'F'を指定して,複数レコードの検索を実行します。
検索するルートレコードの条件を指定すると,検索する範囲を限定できます。条件を指定しない場合はすべてのレコードが検索対象となります。
-
必要に応じて,データ格納エリアからデータを取り出します。
-
2.の複数レコードの検索の状態によって,次のどちらかの検索を実行します。
- 1ファミリのレコードをすべて検索した場合
-
指示コードに'N',または'S'を指定して,再度複数レコードの検索を実行し,次のルートレコードのファミリを検索します。
- 1ファミリの検索の途中でデータ格納エリアが満杯になった場合
-
現在検索しているファミリを継続して検索する場合は,指示コードに'N'を指定して,再度複数レコードの検索を実行します。
現在検索しているファミリの検索を中断して,次のファミリを検索する場合は,指示コードに'S'を指定して,再度複数レコードの検索を実行します。
-
検索対象がなくなり,検索結果がNOT FOUNDになるまで4.を繰り返します。
(5) 複数レコード検索時の留意事項
複数レコード検索時の留意事項を次に示します。
(a) データ格納エリアの領域長の指定
レコードを取得するデータ格納エリアのサイズは,SDBデータベースを操作するAPIでユーザが指定します。データ格納エリアが小さ過ぎると,ファミリの検索中に領域が満杯になります。そのため,1ファミリの取得に必要となる,複数レコード検索の実行回数が増加し,処理性能が低下するおそれがあります。
逆に,データ格納エリアが大き過ぎると,レコードの格納に使用されない余分な領域が確保されることによって,処理性能が低下するおそれがあります。
これらを回避するため,複数レコードの検索時のレコードの格納形式,およびUAP統計レポートに出力される「複数レコードの検索時のデータ格納エリアの余り領域長」の情報を参考にして,データ格納エリアのサイズに適切な領域長を指定してください。
複数レコードの検索時の,データ格納エリアに対するレコードの格納形式については,「付録M 複数レコードの検索時の,データ格納エリアに対するレコードの格納形式【4V FMB】」を参照してください。また,UAP統計レポートについては,「16.5.5 UAP統計レポート機能」を参照してください。
(b) 個別開始中の複数レコードの検索以外の,SDBデータベースの操作禁止
複数レコードの検索をする個別開始では,複数レコードの検索と個別終了しかできません(複数レコードの検索以外のSDBデータベースの操作はできません)。
(6) 複数レコードの検索例
複数レコードの検索例を次に示します。
なお,ここでは,ルートレコードA0のファミリをファミリA0と表記します。以降の例に使用するSDBデータベースには,ファミリA0,ファミリA1,ファミリA2,ファミリA3の4つのファミリがあるものとします。
(a) 検索例1(検索範囲の指定と指示コード'F'および'N'の指定)
- [説明]
-
-
検索を開始するルートレコードを指定する条件を付加し,指示コードに'F'を指定して複数レコードの検索を実行します。
ファミリA1はデータ格納エリアより大きなデータで構成されているため,この場合,ファミリA1の検索の途中でデータ格納エリアが満杯になります。
-
データ格納エリアからデータを取り出します。
-
ファミリA1の残りのレコードを取得するため,指示コードに'N'を指定して複数レコードの検索を実行します。
- 参考
-
ファミリの検索途中で指示コードに'F'を再度指定すると,検索途中であっても,それまでの検索過程は無効となり,指定された条件に従って再度ルートレコードから検索を開始します。
-
データ格納エリアからファミリA1の残りのデータを取り出します。
-
次のファミリを検索するため,指示コードに'N'を指定して複数レコードの検索を実行します。
ファミリA2はデータ格納エリアにすべて格納できるため,1回の検索ですべてのレコードを取得できます。
-
データ格納エリアからデータを取り出します。
-
指示コードに'S'を指定して複数レコードの検索を実行します。
1つのファミリの検索が終了している状態で,指示コードに'S'を指定して複数レコードの検索を実行すると,次のファミリのルートレコードから検索を開始します。
なお,指示コードに'S'を指定して複数レコードの検索を実行すると,ファミリの検索途中であっても,次のファミリのルートレコードから検索を開始します。
ファミリA3はデータ格納エリアにすべて格納できるため,1回の検索ですべてのレコードを取得できます。
-
データ格納エリアからデータを取り出します。
-
次のファミリを検索するため,指示コードに'N'を指定して複数レコードの検索を実行します。
次のファミリは存在しないので,検索結果としてNOT FOUNDが返却され,検索が終了します。
-
(b) 検索例2(検索範囲の指定と指示コード'F'および'S'の指定)
- [説明]
-
-
検索を開始するルートレコードを指定する条件を付加し,指示コードに'F'を指定して複数レコードの検索を実行します。
ファミリA1はデータ格納エリアより大きなデータで構成されているため,この場合,ファミリA1の検索の途中でデータ格納エリアが満杯になります。
-
データ格納エリアからデータを取り出します。
-
ファミリA1の残りのレコードの検索を中断して,次のファミリから検索を開始します(指示コードに'S'を指定して複数レコードの検索を実行します)。
ファミリA2はデータ格納エリアにすべて格納できるため,1回の検索ですべてのレコードを取得できます。
-
データ格納エリアからデータを取り出します。
-
検索条件を変更し,指示コードに'F'を指定して複数レコードの検索を実行します。
この場合,指定された条件に従って再度検索を開始するため,ルートレコードのレコード実現値がA0のファミリを検索します。
ファミリA0はデータ格納エリアにすべて格納できるため,1回の検索ですべてのレコードを取得できます。
-
データ格納エリアからデータを取り出します。
-
次のファミリを検索するため,指示コードに'N'を指定して複数レコードの検索を実行します。
検索条件に該当するファミリは存在しないので,検索結果としてNOT FOUNDが返却され,検索が終了します。
-