このトピックでは、データベースの入出力のみに関連した DL/I の概念を取り上げます。
DL/I 呼び出しは、端末およびプログラム間通信を処理するために IMS™ でも使用されます。
『Using non-database PCBs in DL/I
programming』を参照してください。
次の用語および概念は、DL/I データベース・プログラムを開発するうえで必要不可欠です。
- セグメント
- DL/I データベース中のデータの基本単位はセグメントです。セグメントはレコードに似ています。
セグメントとは、複数のデータ・フィールドに分けられた単一のデータ・ブロックです。
- データベース階層
- 1 つのデータベースは多くのタイプのセグメントを含むことができます。これらのセグメントは階層型 (トップダウン型) の関係で配置されています。階層の最上部にあるセグメントは、ルート・セグメントと呼ばれます。
各セグメントには、これに関連する 1 つ以上の従属セグメントが階層の下のレベルにあります。
従属セグメントを持つセグメントは、従属セグメントの親と呼ばれます。
従属セグメントは子セグメントと言います。
データベース内の各セグメントには、ルート・セグメントを除き、ただ 1 つの親があります。
ルート・セグメントには親がありません。
- シーケンス・フィールド
- データベース中の各セグメントは、シーケンス・フィールドとして設計されたそのフィールドの 1 つを持つことができます。
シーケンス・フィールドの値は、セグメントが保管され、データベースから取り込まれる順番を決定します。
シーケンス・フィールドが子セグメントに定義されている場合、DL/I はその子の親の下のシーケンス・フィールド順で同じ子セグメントの複数の出現箇所を保管します。
- プログラム仕様ブロック (PSB)
- PSB は、プログラムがアクセスできる、階層データベース構造の正式な DL/I 記述です。
PSBRecord 型の EGL レコード・パーツには、ご使用のプログラムが DL/I PSB と対話するために必要な情報が含まれています。PSB は様々なセグメント・タイプ間に存在する階層関係を示します。
- プログラム連絡ブロック (PCB)
- PCB は PSB の入り口です。各データベースの PCB は、プログラムが使用できる 階層データ構造を 1 つ記述します。
データ構造は物理的または論知的 DL/I データベースの構造に直接対応する場合もあり、また、2 次索引によるアクセスを通じてデータベース構造を反転させる場合もあります。
- DL/I 呼び出し
- DL/I 呼び出しは、プログラムによる DL/I の呼び出しです。データベース呼び出しのために渡されるパラメーター・リストは、DL/I に次の情報を提供します。
- 機能コード
- DL/I がデータベースよりセグメントを get、insert、replace、または delete するかどうかを示す。
- データベース識別子
- DL/I が呼び出しの際にアクセスするデータベースを識別する、プログラム連絡ブロック (PCB) を指す。
- 入出力域アドレス
- データベースからの読み取り後、またはデータベースへの書き込み前のセグメントを含む、バッファーのアドレスを識別する。
- セグメント検索引数 (SSA) リスト
- DL/I がデータベースから検索するセグメントを選択したり、データベースへ挿入するセグメントの位置を指定したりできるようにする、一連の検索基準をリストする。
COBOL や PL/I などの DL/I プログラムを
コーディングする場合は、DL/I パラメーター・リストを直接コーディングするか、CICS® のコマンド・レベルのインターフェースを
使用して DL/I パラメーター・リストを作成します。
EGL は、PSB の入出力オプションおよび入出力オブジェクトの位置に基づき、
ユーザー用の DL/I パラメーター・リストを作成します。
ユーザーは関数について作成された DL/I 呼び出しを表示することができます。また、DL/I 呼び出しを変更して新たな DL/I 関数を使用することもできます。
- データベース位置
- プログラムの実行中、DL/I は各 PCB の位置ポインターをプログラム PSB 中で維持しています。
ポインターは、SCAN 関数 (DL/I の get next 関数) が取り込むセグメントの検索を開始する、データベース中の場所を指します。
位置ポインターは正常な DL/I 呼び出しが行われると設定され、呼び出しにより最後にアクセスされたセグメントに続くセグメントを指します。
呼び出しが発行されない場合は、現在の位置はデータベースの開始点を示します。
データベース条件の終わりまでいくと、現在位置がデータベースの開始点になります。
DL/I は SSA リスト基準を満たすセグメントを求めてデータベースのスキャンを続けながら、各ルート・セグメントに、データベースに現れる順番でアクセスします。
DL/I がルート・セグメントを発見すると、次のルート・セグメントをスキャンする前にすべての従属セグメントにアクセスします。
DL/I が従属セグメントをスキャンするとき、まず最初に次に低いレベルの次のセグメントを読み取ろうとします。
低いレベルがない場合は、同じレベルの次のセグメントを読み取ります。
現在のレベルにそれ以上のセグメントがない場合は、前のレベルに戻って次のセグメントを検索します。
この処理は「上から下、左から右」検索順と呼ばれます。
関連概念
DL/I データベース・サポート