Ims-db-data-retrieval
IMS DB-データ検索
IMS DL/I呼び出しで使用されるさまざまなデータ取得方法は次のとおりです-
- GUコール
- GNコール
- コマンドコードの使用
- 複数処理
データ取得関数の呼び出しを理解するために、次のIMSデータベース構造を考えてみましょう-
GUコール
GU呼び出しの基本は次のとおりです-
- GU呼び出しは、Get Unique呼び出しとして知られています。 ランダム処理に使用されます。
- アプリケーションがデータベースを定期的に更新しない場合、またはデータベースの更新回数が少ない場合、ランダム処理を使用します。
- GU呼び出しは、ポインターを特定の位置に配置して、さらに順次検索するために使用されます。
- GU呼び出しは、以前の呼び出しで確立されたポインター位置とは無関係です。
- GU呼び出し処理は、呼び出しステートメントで提供される一意のキーフィールドに基づいています。
- 一意でないキーフィールドを指定すると、DL/Iはキーフィールドの最初のセグメントオカレンスを返します。
CALL 'CBLTDLI' USING DLI-GU
PCB-NAME
IO-AREA
LIBRARY-SSA
BOOKS-SSA
ENGINEERING-SSA
IT-SSA
上記の例は、修飾されたSSAの完全なセットを提供することによりGU呼び出しを発行することを示しています。 ルートレベルから取得するセグメントオカレンスまでのすべてのキーフィールドが含まれます。
GU呼び出しの考慮事項
呼び出しで修飾されたSSAの完全なセットを提供しない場合、DL/Iは次のように動作します-
- GU呼び出しで非修飾SSAを使用すると、DL/Iは、指定した基準を満たすデータベース内の最初のセグメントオカレンスにアクセスします。
- SSAなしでGU呼び出しを発行すると、DL/Iはデータベース内でルートセグメントの最初の発生を返します。 *中間レベルの一部のSSAが呼び出しで言及されていない場合、DL/Iは、セグメントの非修飾SSAの確立された位置またはデフォルト値を使用します。
状態コード
次の表は、GU呼び出し後の関連するステータスコードを示しています-
S.No | Status Code & Description |
---|---|
1 |
成功した呼び出し |
2 |
GE DL/Iは、呼び出しで指定された基準を満たすセグメントを見つけることができませんでした |
GNコール
GNコールの基本は次のとおりです-
- GNコールはGet Nextコールとして知られています。 基本的な順次処理に使用されます。
- データベース内のポインタの初期位置は、最初のデータベースレコードのルートセグメントの前です。
- データベースポインターの位置は、GN呼び出しが成功した後、シーケンス内の次のセグメントが発生する前です。
- GN呼び出しは、以前の呼び出しで確立された位置からデータベースを介して開始されます。
- GNコールが非修飾の場合、そのタイプに関係なく、データベース内の次のセグメントオカレンスを階層順に返します。 *GN呼び出しにSSAが含まれる場合、DL/Iは、指定されたすべてのSSAの要件を満たすセグメントのみを取得します。
CALL 'CBLTDLI' USING DLI-GN
PCB-NAME
IO-AREA
BOOKS-SSA
上記の例は、レコードを順番に読み取るための開始位置を提供するGN呼び出しを発行することを示しています。 BOOKSセグメントの最初の出現をフェッチします。
状態コード
次の表は、GNコール後の関連するステータスコードを示しています-
S.No | Status Code & Description |
---|---|
1 |
成功した呼び出し |
2 |
GE DL/Iは、呼び出しで指定された基準を満たすセグメントを見つけることができませんでした。 |
3 |
GA 修飾されていないGN呼び出しは、セグメントをフェッチするためにデータベース階層内で1レベル上に移動します。 |
4 |
GB データベースの終わりに達し、セグメントが見つかりません。 |
GK 修飾されていないGN呼び出しは、取得したセグメント以外の特定のタイプのセグメントを取得しようとしますが、同じ階層レベルのままです。 |
コマンドコード
コマンドコードは、セグメントオカレンスをフェッチする呼び出しで使用されます。 呼び出しで使用されるさまざまなコマンドコードを以下に説明します。
Fコマンドコード
注意点-
- Fコマンドコードが呼び出しで指定されると、呼び出しはセグメントの最初の出現を処理します。
- Fコマンドコードは、シーケンシャルに処理するときに使用でき、GNコールおよびGNPコールで使用できます。
- GU呼び出しでFコマンドコードを指定した場合、GU呼び出しはデフォルトで最初のセグメントオカレンスをフェッチするため、意味はありません。
Lコマンドコード
注意点-
- Lコマンドコードが呼び出しで指定されると、呼び出しはセグメントの最後の発生を処理します。
- Lコマンドコードは、シーケンシャルに処理する場合に使用でき、GNコールおよびGNPコールで使用できます。
Dコマンドコード
注意点-
- Dコマンドコードは、1回の呼び出しで複数のセグメントを取得するために使用されます。
- 通常、DL/IはSSAで指定された最低レベルのセグメントで動作しますが、多くの場合、他のレベルのデータも必要です。 そのような場合、Dコマンドコードを使用できます。
- Dコマンドコードを使用すると、セグメントのパス全体を簡単に取得できます。
Cコマンドコード
注意点-
- Cコマンドコードは、キーを連結するために使用されます。
- フィールド名、関係演算子、検索値を指定する必要があるため、関係演算子の使用は少し複雑です。 代わりに、Cコマンドコードを使用して連結キーを提供できます。
次の例は、Cコマンドコードの使用を示しています-
01 LOCATION-SSA.
05 FILLER PIC X(11) VALUE ‘INLOCSEG*C(‘.
05 LIBRARY-SSA PIC X(5).
05 BOOKS-SSA PIC X(4).
05 ENGINEERING-SSA PIC X(6).
05 IT-SSA PIC X(3)
05 FILLER PIC X VALUE ‘)’.
CALL 'CBLTDLI' USING DLI-GU
PCB-NAME
IO-AREA
LOCATION-SSA
Pコマンドコード
注意点-
- GUまたはGN呼び出しを発行すると、DL/Iは取得された最低レベルのセグメントで親子関係を確立します。
- Pコマンドコードを含めると、DL/Iは、階層パスの上位レベルセグメントで親子関係を確立します。
Uコマンドコード
注意点-
- GN呼び出しの非修飾SSAでUコマンドコードが指定されている場合、DL/Iはセグメントの検索を制限します。
- Uコマンドコードは、修飾されたSSAで使用される場合、無視されます。
Vコマンドコード
注意点-
- VコマンドコードはUコマンドコードと同様に機能しますが、特定のレベルおよび階層の上のすべてのレベルでセグメントの検索を制限します。
- Vコマンドコードは、修飾されたSSAで使用されると無視されます。
Qコマンドコード
注意点-
- Qコマンドコードは、アプリケーションプログラム専用のセグメントをエンキューまたは予約するために使用されます。
- Qコマンドコードは、別のプログラムがセグメントに変更を加える可能性がある対話型環境で使用されます。
複数処理
プログラムは、IMSデータベース内で複数処理と呼ばれる複数の位置を持つことができます。 複数の処理は2つの方法で行うことができます-
- 複数のPCB
- 複数の位置決め
複数のPCB
単一のデータベースに対して複数のPCBを定義できます。 複数のPCBがある場合、アプリケーションプログラムは異なるビューを持つことができます。 複数の処理を実装するこの方法は、余分なPCBによって課せられるオーバーヘッドのために非効率的です。
複数の位置決め
プログラムは、単一のPCBを使用してデータベース内の複数の位置を維持できます。 これは、階層パスごとに異なる位置を維持することで実現されます。 複数の位置決めを使用して、2つ以上のタイプのセグメントに同時に順次アクセスします。