Hitachi

ノンストップデータベース HiRDB Version 10 構造型データベース機能


2.5.11 複数レコードの検索【4V FMB】

複数レコードの検索とは,ルートレコード以下のすべてのレコードを検索し,データ格納エリアに一括して取得する機能です。レコードを一括して検索することによって,レコードを1件ずつ検索するよりも,検索時のオーバヘッドを抑えることができます。

複数レコードの検索は,4V FMBのSDBデータベースの場合に実行できます。

複数レコードの検索の概要を次の図に示します。

図2‒38 複数レコードの検索の概要

[図データ]

〈この項の構成〉

(1) 複数レコードの検索の詳細

複数レコードの検索の詳細を次に示します。

(2) 検索時の動作と指示コードの指定

複数レコードを検索するAPIでは,検索時の動作を指示コードで指定できます。

複数レコードの検索で指定する指示コードと検索時の動作を次の表に示します。

表2‒16 複数レコードの検索で指定する指示コードと検索時の動作

項番

指示コード

検索時の動作

1

'F'

条件式で指定されたルートレコードから検索を開始します。

2

'N'

前回,複数レコードの検索で検索したレコードの,次のレコードから検索を開始します。

3

'S'

前回,複数レコードの検索で検索したファミリの,次のファミリ(次のルートレコード)から検索を開始します。

(3) 複数レコードの検索の流れ

複数レコードの検索の流れを次に示します。実際のAPIの指定方法については,マニュアル「TP1/Financial Service Platform プログラム作成の手引」を参照してください。

  1. 複数レコードの検索専用オプションを指定して,個別開始を実行します。

  2. 指示コードに'F'を指定して,複数レコードの検索を実行します。

    検索するルートレコードの条件を指定すると,検索する範囲を限定できます。条件を指定しない場合はすべてのレコードが検索対象となります。

  3. 必要に応じて,データ格納エリアからデータを取り出します。

  4. 2.の複数レコードの検索の状態によって,次のどちらかの検索を実行します。

    1ファミリのレコードをすべて検索した場合

    指示コードに'N',または'S'を指定して,再度複数レコードの検索を実行し,次のルートレコードのファミリを検索します。

    1ファミリの検索の途中でデータ格納エリアが満杯になった場合

    現在検索しているファミリを継続して検索する場合は,指示コードに'N'を指定して,再度複数レコードの検索を実行します。

    現在検索しているファミリの検索を中断して,次のファミリを検索する場合は,指示コードに'S'を指定して,再度複数レコードの検索を実行します。

  5. 検索対象がなくなり,検索結果がNOT FOUNDになるまで4.を繰り返します。

(4) レコードの位置づけ

複数レコードの検索時は,レコードに位置指示子を位置づけておく必要はありません。

レコードの位置づけについては,「2.5.3(1) レコードの位置づけ」を参照してください。

(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'の指定)

[図データ]

[説明]
  1. 検索を開始するルートレコードを指定する条件を付加し,指示コードに'F'を指定して複数レコードの検索を実行します。

    ファミリA1はデータ格納エリアより大きなデータで構成されているため,この場合,ファミリA1の検索の途中でデータ格納エリアが満杯になります。

  2. データ格納エリアからデータを取り出します。

  3. ファミリA1の残りのレコードを取得するため,指示コードに'N'を指定して複数レコードの検索を実行します。

    参考

    ファミリの検索途中で指示コードに'F'を再度指定すると,検索途中であっても,それまでの検索過程は無効となり,指定された条件に従って再度ルートレコードから検索を開始します。

  4. データ格納エリアからファミリA1の残りのデータを取り出します。

  5. 次のファミリを検索するため,指示コードに'N'を指定して複数レコードの検索を実行します。

    ファミリA2はデータ格納エリアにすべて格納できるため,1回の検索ですべてのレコードを取得できます。

  6. データ格納エリアからデータを取り出します。

  7. 指示コードに'S'を指定して複数レコードの検索を実行します。

    1つのファミリの検索が終了している状態で,指示コードに'S'を指定して複数レコードの検索を実行すると,次のファミリのルートレコードから検索を開始します。

    なお,指示コードに'S'を指定して複数レコードの検索を実行すると,ファミリの検索途中であっても,次のファミリのルートレコードから検索を開始します。

    ファミリA3はデータ格納エリアにすべて格納できるため,1回の検索ですべてのレコードを取得できます。

  8. データ格納エリアからデータを取り出します。

  9. 次のファミリを検索するため,指示コードに'N'を指定して複数レコードの検索を実行します。

    次のファミリは存在しないので,検索結果としてNOT FOUNDが返却され,検索が終了します。

(b) 検索例2(検索範囲の指定と指示コード'F'および'S'の指定)

[図データ]

[説明]
  1. 検索を開始するルートレコードを指定する条件を付加し,指示コードに'F'を指定して複数レコードの検索を実行します。

    ファミリA1はデータ格納エリアより大きなデータで構成されているため,この場合,ファミリA1の検索の途中でデータ格納エリアが満杯になります。

  2. データ格納エリアからデータを取り出します。

  3. ファミリA1の残りのレコードの検索を中断して,次のファミリから検索を開始します(指示コードに'S'を指定して複数レコードの検索を実行します)。

    ファミリA2はデータ格納エリアにすべて格納できるため,1回の検索ですべてのレコードを取得できます。

  4. データ格納エリアからデータを取り出します。

  5. 検索条件を変更し,指示コードに'F'を指定して複数レコードの検索を実行します。

    この場合,指定された条件に従って再度検索を開始するため,ルートレコードのレコード実現値がA0のファミリを検索します。

    ファミリA0はデータ格納エリアにすべて格納できるため,1回の検索ですべてのレコードを取得できます。

  6. データ格納エリアからデータを取り出します。

  7. 次のファミリを検索するため,指示コードに'N'を指定して複数レコードの検索を実行します。

    検索条件に該当するファミリは存在しないので,検索結果としてNOT FOUNDが返却され,検索が終了します。