iSeriesC ターゲット環境でネイティブ・データベース・ファイルに使用する EGL プログラムとデータを準備する際には検討すべき事項が多数あります。
EGL プログラムは、EGL ファイル I/O ステートメントを実装するために IBM® i ファイル・システムを使用します。IBM i ファイル・システムでは、物理ファイルおよび単純論理ファイルがサポートされています。物理ファイル には、システムに格納されている実際のデータが含まれています。単純論理ファイル には、物理ファイルのデータのビューが含まれています。 下の表に、ファイル入出力ステートメントをサポートする EGL レコード・ステレオタイプと対応する iSeriesC ファイル・タイプを示します。 開発するプログラムに最適な EGL レコード・ステレオタイプを選択してください。 物理ファイルと論理ファイルの使用法について詳しくは、IBM i の資料を参照してください。
| EGL レコード・ステレオタイプ | iSeries® ファイル・タイプ |
|---|---|
| IndexedRecord | 物理ファイルまたは論理ファイル |
| RelativeRecord | 物理ファイル |
| SerialRecord | 物理ファイル |
EGL では、プログラムがアクセスするすべてのファイルが、これらのファイルに対して EGL I/O ステートメントを使用する前に、システムに存在している必要があります。ファイル I/O ステートメントでは、プログラム・ユーザーのためのファイルは作成されません。
生成時に、プログラムが使用するファイルの名前をシステム・リソース名として指定します。ファイルのデフォルト・システム・リソース名は、レコード定義時に割り当てた名前です。このデフォルト名を他の名前に変更できます。 また、書式ライブラリー/ファイル名を使用して、ライブラリー名を追加してファイル名を明示的に修飾することもできます。ファイル名を明示的に修飾しない場合、iSeriesC 環境でのプログラムの実行時に、EGL はライブラリー・リスト (*LIBL) 内でファイルを検索します。
EGL がシリアル・レコード定義、索引付きレコード定義、または相対レコード定義に基づいてデータ記述仕様 (DDS) 情報を生成するようにするには、genDDSFile ビルド記述子オプションを YES に設定します。
物理ファイルを作成するには、物理ファイル作成 (CRTPF) コマンドを使用します。EGL 相対レコード・ステレオタイプおよびシリアル・レコード・ステレオタイプを持つ物理ファイルを作成できます。このファイルは、DDS ソース情報を使用するか、またはこの情報を使用せずに作成できます。相対レコード・ステレオタイプまたはシリアル・レコード・ステレオタイプのファイルは、到着順ファイルと呼ばれます。DDS ソース情報を使用せずにこれらのファイルを作成する場合は、CRTPF コマンドの RCDLEN パラメーターを使用してファイルのレコード長を指定する必要があります。
EGL 索引付きレコード・ステレオタイプの物理ファイルまたは論理ファイルを作成するには、EGL が提供する DDS ソース情報を使用してください。物理ファイルを作成するには物理ファイル作成 CRTPF コマンドを使用し、論理ファイルを作成するには論理ファイル作成 CRTLF コマンドを使用してください。索引付きレコード・ステレオタイプのファイルはキー・シーケンス・ファイルです。DDS ソース情報により、キー・フィールドを指定できます。
EGL プログラムは、別のプログラムまたは同一ジョブ内のプログラムと、ファイルのレコード位置やポインターを共有できます。ファイルを共有するには、[[[IBM i]]]] CREATE、CHANGE、または OVERRIDE ファイル・コマンドで SHARE(*YES) パラメーターを使用します。 SHARE(*NO) を指定すると、ファイルにアクセスするプログラムごとに、ファイル内でのレコード位置の独立性が維持されます。
EGL 相対レコード・ステレオタイプに対応するファイル・メンバーを使用する前に、このファイル・メンバーを初期化します。iSeriesC 環境では、相対レコード・ファイルは、レコードが相対レコード番号により取得および操作される物理ファイルによって表されます。相対ファイル・メンバーにレコードを追加またはレコードを更新する場合、メンバー内にそのレコード用の場所が確保されている必要があります。更新の場合、その場所は有効な既存のレコードでなければなりません。新規レコードの場合、その場所は削除済みレコードでなければなりません。相対ファイル・メンバーのレコードを初期化するには、物理ファイル・メンバー初期化 (INZPFM) コマンドを使用します。
EGL get...forUpdate ステートメントはファイルからレコードを読み取り、そのレコードに 読み取り可排他 ロックを施行します。つまり、レコードをロックしたユーザーが、get...forUpdate 以外の I/O ステートメントを使用してそのレコードを解放するまでは、他のユーザーはそのレコードを更新できません。あるユーザーが更新のために既にロックしているレコードを別のユーザーが更新しようとすると、EGL deadlock エラーが発生します。
genDDSFile ビルド記述子オプションを YES に設定すると、EGL は、ファイル I/O ステートメントに使用される EGL レコード定義から DDS 情報を生成します。
EGL により生成される DDS 情報は、IBM i システム管理者およびプログラム開発者に対してのみ有用な情報です。システム管理者は DDS ソース・メンバーまたはその変更バージョンを使用して、iSeriesC 環境にまだ存在していないファイルを作成できます。DDS ソース情報を使用して作成されたファイルは、IBM i データ管理機能 (キー・フィールド、固有キー、および論理ファイルの指定など) に使用できます。
ファイルを作成する際に DDS ソース情報を使用する必要はありません。これは、EGL ではプログラムがアクセスするファイルが外部で記述されている必要があるという要件はないためです。EGL は、レコードの構造に、*PGM オブジェクトとして作成されるレコード定義を使用します。ただし、DDS 情報を使用すると、プログラムがレコード構造を定義する方法と、レコード・データが iSeriesC 環境で保存される方法が対応します。
EGL では、使用するレコード・フォーマットが 1 つのみの単純論理ファイルがサポートされています。DDS ソース情報では、PFILE キーワードに 1 つのファイルのみが指定されます。DDS キーワードの使用法について詳しくは、i5/OS™ インフォメーション・センターを参照してください。