論理ファイルのアクセス・パスは、いくつかの方法で指定することができます。
v キー順アクセス・パス仕様。最後のレコードまたはフィールド・レベル仕様の後にキー・フィールドを 指定します。レコード様式にはキー・フィールド名がなければなりません。結合論理ファイルの場合、
キー・フィールドは最初または基本の物理ファイルからのものでなければなりません。
|...+....1....+....2....+....3....+....4....+....5....+....6....+....7....+....8
A R CUSRCD PFILE(CUSMSTP)
A K ARBAL
A K CRDLMT
A
v エンコード・ベクトル・アクセス・パス仕様。コード化ベクトル・アクセス・パスは、SQL CREATE
INDEX ステートメントを使用して定義します。
v 到着順アクセス・パス仕様。キー・フィールドは指定しません。PFILE キーワードには物理ファイルを 1 つのみ指定することができます (論理ファイルのメンバーを追加するときは、物理ファイルのメンバー の中の 1 つのみ指定することができます)。
|...+....1....+....2....+....3....+....4....+....5....+....6....+....7....+....8
A R CUSRCD PFILE(CUSMSTP)
v 事前に定義されたキー順アクセス・パス仕様 (単一および複数様式論理ファイルの場合のみ)。
REFACCPTH キーワードをファイル・レベルで指定して、アクセス・パスおよび選択/除外仕様がこの論
理ファイルにコピーされる、事前に作成されたデータベース・ファイルを識別します。 REFACCPTH キ ーワードで個々のキーまたは選択/除外フィールドを指定することはできません。
注: 指定したファイルのアクセス・パス仕様が使用されたとしても、どのファイルのアクセス・パスを実 際に共用するかは、システムが決定します。 REFACCPTH キーワードが使用されているかどうかを問わ ず、システムは常にアクセス・パスを共用しようとします。
|...+....1....+....2....+....3....+....4....+....5....+....6....+....7....+....8 REFACCPTH(DSTPRODLIB/ORDHDRL)
A R CUSRCD PFILE(CUSMSTP)
別のファイルのアクセス・パスのキー・フィールド仕様を共用する論理ファイルのレコード様式を定義する 場合 (DDS キーワードの REFACCPTH を使用して) には、関連する物理ファイルのレコード様式からどの ようなフィールドでも使用することができます。このようなフィールドは、アクセス・パスを記述するファ イルでは使用する必要はありません。ただし、アクセス・パスを記述するファイルで使用されるキーおよび 選択/除外フィールドはすべて、新しいレコード様式で使用されなければなりません。
関連資料:
CREATE INDEX
論理ファイルのレコードの選択および除外:
論理ファイルのレコードを選択および除外することができます。このことは、処理の便宜上あるいは安全を 目的としてファイルからレコードを除外する際に役立ちます。
レコードの選択と除外の処理は、論理ファイルの DDS 形式の 17 列で識別された比較に基づきます。これ は、高水準言語プログラムでコーディングする一連の比較によく似ています。
たとえば、発注明細レコードを含む論理ファイルでは、注文量が出荷量よりも多いレコードだけを使用する ということを指定できます。その他のレコードはすべてアクセス・パスから除外されます。除外されたレコ ードは物理ファイルに残りますが、論理ファイルのために取り出されません。物理ファイルにレコードを追 加する場合、すべてのレコードが追加されますが、選択/除外基準に適合する選択されたレコードしか、選 択/除外アクセス・パスを用いて取り出すことができません。
DDS で選択または除外を指定するためには、DDS 形式の 17 列に S (選択) または O (除外) を指定しま す。さらに、選択または除外処理で使用されるフィールドの名前を指定します (19 列から 28 列)。45 列 から 80 列には比較を指定します。
注: (キーを指定している場合) 選択/除外の指定は、キー仕様の後に表示されます。
レコードは、以下のようないくつかのタイプの比較によって選択および除外することができます。
v VALUES。フィールドの内容は、100 個以下の値のリストと比較されます。 一致するものが見つかる
と、レコードが選択または除外されます。 次の例では、VALUES キーワードに指定された値の 1 つが
Itmnbr フィールドで見つかれば、レコードが選択されます。
|...+....1....+....2....+....3....+....4....+....5....+....6....+....7....+....8
A S ITMNBR VALUES(301542 306902 382101 422109 +
A 431652 486592 502356 556608 590307)
A
v RANGE。フィールドの内容は、下限値および上限値と比較されます。 内容が下限値以上で、上限値以
下であれば、レコードが選択または除外されます。 次の例では、Itmnbr フィールドが 301000から
599999 の範囲となっているレコードがすべて選択されます。
|...+....1....+....2....+....3....+....4....+....5....+....6....+....7....+....8
A S ITMNBR RANGE(301000 599999)
A
v CMP。 フィールドの内容は、ある値または他のフィールドの内容と比較されます。有効な比較コード
は、EQ、NE、LT、NL、GT、NG、LE、および GE です。比較の条件が満たされると、レコードが選択 または除外されます。次の例では、Itmnbr フィールドが 599999 以下の場合に、レコードが選択されま す。
|...+....1....+....2....+....3....+....4....+....5....+....6....+....7....+....8
A S ITMNBR CMP(LE 599999)
A
CMP、VALUES、または RANGE キーワードが指定された数字フィールドの値は、そのフィールドについ て指定された小数点以下の桁数に基づいて位置合わせされ、必要であればゼロで埋められます。フィールド について小数点以下の桁数が指定されていない場合、小数点は値の右端の数字の右側に置かれます。たとえ ば、長さが 5 で小数点以下の桁数が 2 の数字フィールドでは、値 1.2 は 001.20 として解釈され、値 100 は、100.00 と解釈されます。
レコードの状況は、選択/除外ステートメントを指定した順序で評価することによって判別されます。レコ ードが選択または除外に当てはまると、それ以降のステートメントは無視されます。
通常、選択と除外の比較は相互に独立して取り扱われ、比較は OR の関係にあります。すなわち、選択ま たは除外の比較の条件が満たされると、レコードが選択または除外されます。条件が満たされない場合、シ ステムは次の比較に進みます。比較を接続するためには、DDS 形式の 17 列をスペースにしておきます。
この場合、この形で接続されたすべての比較の条件が満たされなければ、レコードは選択または除外されま せん。すなわち、比較は AND の関係にあります。
比較が少ないほど、作業はより効率的になります。選択/除外の比較をいくつか必要とする場合には、最初 に大半のレコードを選択または除外してしまうような比較を指定するようにします。
以下の例には、選択/除外機能をコーディングする方法が示されています。これらの例では、Rep フィール
ドが JSMITH となっているレコードはほとんどありません。これらの例は、ニューヨーク州の JSMITH と
いう名前の販売担当者についての 1988 年以前のレコードをすべて選択するために DDS を使用する方法を 示しています。すべては同じ結果ですが、効率は異なります。最も効率的な方法は 3 です。
|...+....1....+....2....+....3....+....4....+....5....+....6....+....7....+....8
A S ST CMP(EQ 'NY') 1
A REP CMP(EQ 'JSMITH')
A YEAR CMP(LT 88)
A
|...+....1....+....2....+....3....+....4....+....5....+....6....+....7....+....8
A O YEAR CMP(GE 88) 2
A S ST CMP(EQ 'NY')
A REP CMP(EQ 'JSMITH')
A
|...+....1....+....2....+....3....+....4....+....5....+....6....+....7....+....8
A O REP CMP(NE 'JSMITH') 3
A O ST CMP(NE 'NY')
A S YEAR CMP(LT 88)
A
1 すべてのレコードは、選択フィールドの St、Rep、および Year のすべてと比較された後に、選択 または除外されます。
2 すべてのレコードは Year フィールドと比較され、その後、1988 年以前のレコードが St および Rep フィールドと比較されます。
3 すべてのレコードは Rep フィールドと比較され、その後、JSMITH に関するわずかのレコードが St フィールドと比較されます。さらに、残ったわずかのレコードが Year フィールドと比較されま す。
別の例として、以下の項目を選択したいとします。
v 部門が 12 以外のすべてのレコード。
v 部門が 12 であり、かつ、項目番号が 112505、428707、または 480100 となっているレコード。部門 12 のその他のレコードは選択しない。
前述の例を分類順序表を用いて作成する場合は、比較の前に、選択/除外フィールドが分類表に従って変換 されます。たとえば、大/小文字を共通の等価のものとして使用する分類順序表を用いると、NY と ny は同 等になります。
以下の図は、この例の論理を示しています。
この例では、DDS 選択および除外機能を使用します。
|...+....1....+....2....+....3....+....4....+....5....+....6....+....7....+....8
A S DPTNBR CMP(NE 12)
A S ITMNBR VALUES(112505 428707 480100)
A
アクセス・パスに選択/除外値を付けて、ファイルを到着順に処理することもできます。たとえば、高水準 言語プログラムでは、キー順のアクセス・パスを無視するように指定することができます。この場合、すべ てのレコードが到着順でファイルから読み取られますが、ファイルで指定された選択/除外値を満たすレコ ードだけが高水準言語プログラムに戻されます。
キー・フィールドと選択/除外値が指定されている論理ファイルは、到着順に、または相対レコード番号を 用いてランダムに処理することができます。選択/除外値によって除外されたレコードは処理されません。
すなわち、除外されたレコードが相対レコード番号で要求された場合には、そのレコードは高水準言語プロ グラムに返されません。
論理ファイルを介して追加または変更が行われた場合に、同じ論理ファイルの中でレコードに再びアクセス できるかどうかは、システムによって保証されません。たとえば、論理ファイルの選択値で Fld1 が A と なっているレコードだけが指定されており、プログラムでレコードを更新して Fld1 を B にすると、プロ グラムはこの論理ファイルを使用してそのレコードを再び取り出すことができません。
注: 浮動小数点フィールドの値に基づいて選択あるいは除外を行うことはできません。
選択/除外の操作には 2 種類があります。この 2 種類とは、アクセス・パスの選択/除外と動的選択/除外で す。 省略時値はアクセス・パスの選択/除外です。選択/除外の仕様そのものは各種共通ですが、システム が実際にレコードの選択と除外の処理を行う時点が異なります。
さらに、「Query ファイルのオープン (OPNQRYF)」コマンドを使用してレコードを選択または除外するこ ともできます。
関連概念:
DDS の概念
アクセス・パスの選択/除外:
アクセス・パスの選択/除外操作を使用すると、アクセス・パスには論理ファイルで指定された選択/除外値 を満たすキーだけが含まれます。
論理ファイルにキー・フィールドを指定していた場合には、アクセス・パスはそのファイルに対して保持さ れ、論理ファイルが使用する物理ファイルのレコードをユーザーが追加または変更したときには、システム が保守を行います。アクセス・パス内の索引項目だけが選択/除外値を満たすものになります。
動的選択/除外:
動的選択/除外操作を使用すると、プログラムがファイルからレコードを読み取るときに、システムは選択/
除外値を満たすレコードだけを返します。つまり、実際の選択/除外処理はプログラムがレコードを読み取 るときに行われ、レコードが追加または変更されるときには行われません。
ただし、キー順アクセス・パスには、選択されたレコードからのキーだけでなく、すべてのキーが含まれて います。動的選択/除外を使用するアクセス・パスでは、アクセス・パスの共用がさらに可能になり、これ によってパフォーマンスを向上させることができます。
動的選択/除外を指定するには、動的選択 (DYNSLT) キーワードを使用します。動的選択/除外にはキー・
フィールドは必要ありません。
更新が頻繁であり、読み取りがあまり行われないファイルがある場合には、プログラムがファイルを読み取 るまでは、選択/除外の目的でアクセス・パスを更新する必要はありません。このような場合には、動的選 択/除外を選択すると良いでしょう。このことを示すために、以下のような例を挙げます。
変更の頻度が低いコード・フィールド (A = 活動状態、I = 非活動状態) を使用して、レコードの選択/除 外を行います。プログラムは活動状態のレコードを処理します。レコードの大半 (80% 以上) は活動状態で す。コード・フィールドを変更するときにはアクセス・パスを保守するよりも、 DYNSLT を使用して処理 時にレコードを動的に選択した方がより効率的です。
関連概念:
62ページの『論理ファイル間での既存のアクセス・パスの共用』
2 つ以上の論理ファイルが同一の物理ファイルと同一のキー・フィールドを基礎としており、その順序が同 じ場合には、同じキー順アクセス・パスを自動的に共用します。
「Query ファイルのオープン (OPNQRYF)」コマンドを使用した論理ファイル・レコードの選択および除去
:
DDS を使用する代わりに、「Query ファイルのオープン (OPNQRYF) 」コマンドの QRYSLT パラメータ ーを指定して論理ファイルのレコードを選択および除外することができます。