2.5.5 レコードの検索【SD FMB】
SDBデータベース中のレコードを検索し,データ格納エリアまたは埋込み変数にレコードを取り出します。検索されたレコードに対してはレコードの位置づけが行われます。
(1) 検索の種類
検索には,次の2つがあります。
-
レコード型内の検索
レコード位置指示子を使用した検索です。常にインデクスを使用した検索となります。ルートレコード,および二次インデクスを定義したレコードに対して実行できます。
-
親子集合型内の検索
親子集合位置指示子を使用した検索です。特定の親レコード実現値配下の子レコードを検索します。常にポインタを使用した検索となります。子レコードに対して実行できます。
(2) SDBデータベースのアクセス例
データベースを階層順に従ってアクセスする例を説明します。
レコードの検索,格納,および位置指示子の位置づけを行うと,レコードの位置づけが行われ,そのレコードの子レコードに対してアクセスができるようになります。
同一レコード型の別レコードに対してレコードの位置づけを行うと,前回アクセスしたレコードの子レコードに対してはアクセスできなくなり,今回アクセスしたレコードの子レコードに対してアクセスできるようになります。
SD FMBのSDBデータベースのアクセス例を次の図に示します。この図では,レコードA1→B1→B2→A1の順序で検索しています。
|
- 注
-
COBOLのUAPからDMLを実行した場合,上記の図中の個別開始はシステムが内部的に実行します。
- ポイント
-
HiRDB/SDでは,レコードの検索や格納などを行うと,そのレコードの位置情報を保持します。この情報を位置指示子といいます。HiRDB/SDは,位置指示子を使用してSDBデータベースにアクセスします。位置指示子については,「2.5.3 位置指示子」を参照してください。
なお,検索結果がNOT FOUND(SQLCODE=100)となった場合,対象レコードのレコード位置指示子は空値になります。
(3) 検索の順序,開始位置および方向
検索は順序,開始位置および方向を決定してレコードを検索します。
順序,開始位置および方向については,「17.3.3 検索の順序,開始位置および方向」を参照してください。
(4) レコードの特定方法
レコードの検索では,次の方法でレコードを特定します。
-
DMLの内容および,位置指示子の状態から検索の順序,開始位置および方向を決定します。順序,開始位置および方向については,「17.3.3 検索の順序,開始位置および方向」を参照してください。
-
条件が指定されていない場合は,開始位置のレコードを検索結果とします。条件が指定されている場合は,開始位置から順序に従いレコードデータを評価し,最初に条件が真となるレコードを検索結果とします。
(5) レコードの位置づけ
レコード型内の検索時は,レコードに位置指示子を位置づけておく必要はありません。親子集合型内の検索時は,親子集合位置指示子の親レコードを位置づけておく必要があります。レコードの位置づけについては,「2.5.3(1) レコードの位置づけ」を参照してください。