Hitachi

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


2.5.12 SDBデータベースの操作と位置指示子の関係

SDBデータベースの操作と位置指示子の関係を,それぞれの操作ごとに説明します。

以降の例で使用するSDBデータベースを次の図に示します。

図2‒39 SDBデータベースの操作と位置指示子の関係の説明で使用するSDBデータベース

[図データ]

〈この項の構成〉

(1) 個別開始

個別開始時(SDBデータベース単位の操作開始時)に,レコード型,親子集合型ごとに位置指示子が生成され,空値が設定されます。

この例では,レコード型A,レコード型B,および親子集合型ABに対して,位置指示子が生成されます。

図2‒40 個別開始

[図データ]

(2) ルートレコードの検索

ルートレコードを検索する時点で,位置指示子にレコードが位置づけられている必要はありません。

ルートレコードA1を検索すると,次の位置指示子にルートレコードA1が位置づけられます(ルートレコードA1の位置が位置指示子に保持されます)。

ルートレコードA1を検索した場合の例を次に示します。

図2‒41 ルートレコードの検索

[図データ]

(3) 子レコードの検索(親子集合型内の検索)

子レコードB2を検索する場合,次の位置指示子にルートレコードA1が位置づけられている必要があります。

つまり,子レコードB2を検索する前に,親レコードであるルートレコードA1を検索して,レコードを位置づけておく必要があります。

子レコードB2を検索すると,次の位置指示子に子レコードB2が位置づけられます。

子レコードB2を検索した場合の例を次に示します。

図2‒42 子レコードの検索

[図データ]

(4) 子レコードの検索(レコード型内の検索)【SD FMB】

レコードを検索する時点で,位置指示子にレコードが位置づけられている必要はありません。

レコードB2を検索すると,次の位置指示子にレコードB2が位置づけられます(レコードB2の位置が位置指示子に保持されます)。

また,親子集合型ABの親子集合位置指示子の親にレコードB2の親レコードのA1が位置づけられます(レコードA1の位置が位置指示子に保持されます)。

なお,レコードAのレコード位置指示子は変化しません。

子レコードB2を検索した場合の例を次に示します。

図2‒43 子レコードの検索

[図データ]

(5) 位置指示子の位置づけ(レコード型内の検索)【SD FMB】

位置指示子にレコードが位置づけられている必要はありません。

ルートレコードA1を走査し,レコードが特定されると,次の位置指示子にルートレコードA1が位置づけられます(ルートレコードA1の位置が位置指示子に保持されます)。

ルートレコードA1を検索した場合の例を次に示します。

図2‒44 ルートレコードの走査

[図データ]

(6) 位置指示子の位置づけ(位置指示子指定の検索)【SD FMB】

親子集合型ABを指定した場合,親子集合型ABの親子集合位置指示子の親が位置づけられている必要があります。

親子集合型ABの親子集合位置指示子の親にA1が位置づけられている場合の更新結果を次に示します。

DML実行後の状態を次に示します。

図2‒45 位置指示子の位置づけ(位置指示子指定の検索)

[図データ]

(7) ルートレコードの格納(ルートレコードの追加)

ルートレコードを格納する時点で,位置指示子にレコードが位置づけられている必要はありません。

ルートレコードA4を格納すると,次の位置指示子にルートレコードA4が位置づけられます。

ルートレコードA4を格納した場合の例を次に示します。

図2‒46 ルートレコードの格納(ルートレコードの追加)

[図データ]

(8) 子レコードの格納(子レコードの追加)

子レコードB4を格納する場合,次の位置指示子にルートレコードA1が位置づけられている必要があります。

つまり,子レコードB4を格納する前に,親レコードであるルートレコードA1を検索して,レコードを位置づけておく必要があります。

子レコードB4を格納すると,次の位置指示子に子レコードB4が位置づけられます。

子レコードB4を格納した場合の例を次に示します。

図2‒47 子レコードの格納(子レコードの追加)

[図データ]

(9) 子レコードの更新

子レコードB2の値を更新する場合,次の位置指示子にルートレコードA1が位置づけられている必要があります。

また,次の位置指示子に子レコードB2が位置づけられている必要があります。

つまり,子レコードB2の値を更新する前に,子レコードB2を検索して,レコードを位置づけておく必要があります。

子レコードB2のレコード実現値を更新した場合の例を次に示します。

図2‒48 子レコードの更新

[図データ]

(10) ルートレコードの削除

ルートレコードA1を削除する場合,次の位置指示子にルートレコードA1が位置づけられている必要があります。

ルートレコードA1の値を削除する前に,ルートレコードA1を位置づけておく必要があります。

また,4V FMBのSDBデータベースの場合,検索条件にルートレコードA1の=条件(構成要素名にDBKEYを指定した=条件)を指定した検索で位置づけておく必要があります。

ルートレコードA1を削除すると,レコード位置指示子Aは空値となります。また,ルートレコード型Aの下位のレコード型のレコード位置指示子,親子集合位置指示子も空値となります。

ルートレコードA1を削除した場合の例を次に示します。

図2‒49 ルートレコードA1を削除した場合の例

[図データ]

(11) 子レコードの削除

子レコードB2を削除する場合,次の位置指示子にルートレコードA1が位置づけられている必要があります。

また,次の位置指示子に子レコードB2が位置づけられている必要があります。

つまり,子レコードB2の値を削除する前に,子レコードB2を検索して,レコードを位置づけておく必要があります。

子レコードB2を削除すると,親子集合位置指示子には,削除した子レコードB2の前後のレコードが位置づけられ,親子集合位置指示子は複合状態になります。また,レコード型Bのレコード位置指示子は空値となります。

子レコードB2を削除した場合の例を次に示します。

図2‒50 子レコードの削除

[図データ]

(12) 複数レコードの検索【4V FMB】

複数レコードの検索をする場合,検索時点で位置指示子にレコードが位置づけられている必要はありません。

指定したルートレコード以下のすべてのレコードを検索しても,位置指示子は空値のままとなります。

複数レコードの検索した場合の例を次に示します。

図2‒51 複数レコードの検索

[図データ]

(13) 個別終了およびトランザクションの終了

個別終了時(SDBデータベース単位の操作終了時)およびトランザクションの終了時に,位置指示子は消滅します。

図2‒52 個別終了およびトランザクションの終了

[図データ]