Hitachi

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


2.5.4 レコードの検索【4V FMB,4V AFM】

SDBデータベース中のレコードを検索し,データ格納エリアまたは埋込み変数にレコードを取り出します。検索されたレコードに対してはレコードの位置づけが行われます。

〈この項の構成〉

(1) レコードのアクセス順序

レコードのアクセス順序について,SDBデータベース種別ごとに説明します。

(a) 4V FMBのSDBデータベースの場合

4V FMBのSDBデータベースの場合,データベースが階層構造を持つため,レコードへのアクセスもルートレコードから階層順に行う必要があります(「図2-31 4V FMBのSDBデータベースのアクセス順序の概要」の場合,レコードA1→C1の順にアクセスしたり,レコードC1に直接アクセスしたりすることはできません)。

レコードの検索,格納,および位置指示子の位置づけを行うと,レコードの位置づけが行われ,そのレコードの子レコードに対してアクセスができるようになります。

同一レコード型の別レコードに対してレコードの位置づけを行うと,前回アクセスしたレコードの子レコードに対してはアクセスできなくなり,今回アクセスしたレコードの子レコードに対してアクセスできるようになります。

4V FMBのSDBデータベースのアクセス順序の概要を次の図に示します。この図では,レコードA1→B1→B2→A1の順序で検索します。

図2‒31 4V 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の指示コードで指定します。指定できる指示コードと検索の基点となるレコードを次の表に示します。

表2‒14 指示コードと検索の基点となるレコード

指示コード

検索の基点となるレコード

説明

APIの場合

DMLの場合

F

FIRST

先頭のレコード(FIRSTポインタ)

  • ルートレコードの場合は,シーケンシャルインデクスのキー値の最小値を持つレコードが検索の基点となります。

  • 子レコードの場合は,親レコードのFIRSTポインタが指すレコードが検索の基点となります。

L

LAST

最後のレコード(LASTポインタ)

  • 子レコードの場合は,親レコードのLASTポインタが指すレコードが検索の基点となります。

  • ルートレコードの場合は指定できません。

U

USERポインタが指すレコード

  • 子レコードの場合は,親レコードのUSERポインタが指すレコードが検索の基点となります。

  • ルートレコードの場合は指定できません。

N

NEXT

位置づけされているレコードの次のレコード(NEXTポインタ)

  • ルートレコードの場合は,位置づけされたレコードの次のレコード(レコード位置指示子が指すレコードの,シーケンシャルインデクスのキー値の次のキー値を持つレコード)が検索の基点となります。

  • 子レコードの場合は,位置づけされているレコードの次のレコード(親子集合位置指示子の子レコードが指すレコードの,NEXTポインタが指すレコード)が検索の基点となります。

    なお,親子集合位置指示子が空値の場合は,親レコードのFIRSTポインタが指すレコードが検索の基点となります。

P

PRIOR

位置づけされているレコードの1つ前のレコード(PRIORポインタ)

  • 子レコードの場合は,位置づけされているレコードの1つ前のレコード(親子集合位置指示子の子レコードが指すレコードの,PRIORポインタが指すレコード)が検索の基点となります。

    なお,親子集合位置指示子が空値の場合は,親レコードのLASTポインタが指すレコードが検索の基点となります。

  • ルートレコードの場合は指定できません。

(凡例)

−:該当する指示コードはありません。

(b) 検索の方向

4V FMBのSDBデータベースを操作する場合,USERポインタを基点とした検索の方向を,APIの検索コードで指定します。昇順・降順の順序性は,ユーザキーを持つ場合はユーザキー,持たない場合は一連番号に従います。

表2‒15 検索コードと検索の方向

検索コード

説明

N

NEXTポインタに従って検索します。

P

PRIORポインタに従って検索します。

なお,4V AFMのSDBデータベースを操作する場合は,検索コードは指定できません。

(3) レコードの検索範囲

検索の基点となるレコードと検索の方向の組み合わせによって,レコードの検索範囲が決定します。レコードと検索の方向の組み合わせを次の図に示します。

図2‒32 検索の基点となるレコードと検索の方向の組み合わせと検索範囲

[図データ]

[図データ]

注意事項

SDBデータベース種別やルートレコード・子レコードによって実行できない組み合わせがあります。詳細については,マニュアル「TP1/Financial Service Platform 使用の手引」の「SDBハンドラ機能」の「レコード検索範囲」を参照してください。

また,レコードの特定方法によっては,レコードの検索範囲は無視されます。

(4) レコードの特定方法

レコードの検索では,次のどれかの方法でレコードを特定します。

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

ルートレコードの検索(FETCH)時,または位置指示子の位置づけ(FIND)時は,レコードに位置指示子を位置づけておく必要はありません。

子レコードの検索時は,位置指示子を親レコードに位置づけておく必要があります。ただし,4V AFMのSDBデータベースの場合は,位置指示子を親レコードに位置づけておく必要はありません(親レコードになる仮想ルートレコードの検索と位置づけをHiRDB/SDが内部的に行います)。

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

(6) 個別開始/終了一括要求オプションを指定したレコードの検索

SDBデータベースを操作するAPIで個別開始/終了一括要求オプションを指定すると,UAPから個別開始および個別終了の要求を行わなくてもレコードを検索できます。個別開始/終了一括要求オプションの指定方法については,マニュアル「TP1/Financial Service Platform 使用の手引」の「SDBハンドラ機能」の「個別開始/終了一括要求」を参照してください。

(a) レコードの検索処理の流れ

個別開始/終了一括要求オプションを指定した場合のレコードの検索処理の流れを次の図に示します。

図2‒33 レコードの検索処理の流れ(個別開始/終了一括要求オプションを指定した場合)

[図データ]

個別開始/終了一括要求オプションを指定しない場合のレコードの検索処理の流れを次の図に示します。

図2‒34 レコードの検索処理の流れ(個別開始/終了一括要求オプションを指定しない場合)

[図データ]

(b) 個別開始/終了一括要求オプションの適用基準

個別開始後,レコードの検索を1回だけ実行して個別終了を要求するような場合,個別開始/終了一括要求オプションを指定すると,UAPからの個別開始および個別終了の要求が不要になるため,個別開始と個別終了によるUAPとHiRDB間の処理のオーバーヘッドがなくなり,性能が向上します。

ただし,個別開始/終了一括要求オプションを指定した場合,レコードの検索後に個別終了が実行されるため,次のようなレコードの位置づけを目的としたレコード検索はできません。

  • レコードの更新や削除をするためのレコードの検索

  • 次のレコードの検索要求で,検索の基点とするためのレコードの検索

また,レコードの位置づけを目的としないレコードの検索の場合でも,同じSDBデータベースに対して複数回レコードの検索を行う際に,このオプションを指定すると,レコードの検索を行うごとに個別開始および個別終了処理が実行されるため,性能低下の原因になるおそれがあります。

(c) 留意事項

  • 個別開始/終了一括要求オプションを指定した場合,UAPからの個別開始および個別終了の要求は不要になります。しかし,個別開始および個別終了の処理は実行されるため,個別開始および個別終了の要求を実行したものとしてメモリ所要量を見積もってください。

  • 同一トランザクション内で,個別開始/終了一括要求オプションを指定したレコードの検索と,個別開始の要求を行うSDBデータベースの操作を混在して実行できます。

  • 個別開始/終了一括要求オプションを指定した場合,オプションを指定しない場合に比べて次の点が異なります。

    • 排他自動解除機能を使用している場合,検索したレコード実現値の格納ページに対する排他は解除されます。

    • 個別開始/終了一括要求オプションを指定して検索したレコード実現値を,同一トランザクション内で再度検索したり,一括削除したりしてもアクセス競合のエラーは発生しません。