既存のフィールド記述およびフィールド参照ファイルを使用したデータベース・ファイルの記述

既存のファイルにあるフィールド記述を使用する場合、そのフィールド記述を新しいファイル記述にコピーできます。 また、任意のファイル・グループに必要なフィールド記述を含むフィールド参照ファイルを作成することもできます。

DDS キーワード REF および REFFLD を使用すると、 既存のファイル内のフィールド記述を参照できます。このようにすると、DDS ステートメントをコーディングする手間を省くことができます。また、そのフィールドを使用するすべてのファイルにおいて、 フィールド属性の一貫性が保証されることになります。

さらに、単にフィールド記述を使用する目的だけで 物理ファイルを作成することもできます。つまり、ファイルを作成してもデータを入れずに、別のファイルで フィールド記述を参照するためだけにそれを使用します。このようなタイプのファイルのことを、フィールド参照ファイルといいます。フィールド参照ファイルは、データを含まず、 フィールド記述だけを含む物理ファイルです。

フィールド参照ファイルを使用すると、レコード様式の記述を簡素化すること ができ、一貫したフィールド記述が保証されることになります。フィールド参照ファイルを作成するには、 DDS および物理ファイルの作成 (CRTPF) コマンドを使用します。

フィールド参照ファイルを作成した後は、各ファイルの個々のフィールドの 特性を記述しなくても、このフィールド参照ファイルから物理ファイルの レコード様式を作成することができます。物理ファイルを作成する際に必要なことは、 (REF キーワードおよび REFFLD キーワードを用いて) フィールド参照ファイルを参照し、 変更内容を指定することだけです。新しいファイルで指定するフィールド記述とキーワードへの変更内容により、 フィールド参照ファイル内の記述が一時変更されます。

以下の例では、DSTREFP という名前のフィールド参照ファイルが配布アプリケーション用に 作成されます。以下の例は、DSTREFP の記述に必要とされた DDS を示します。

|...+....1....+....2....+....3....+....4....+....5....+....6....+....7....+....8
     A* FIELD REFERENCE FILE (DSTREFP)
     A          R DSTREF                    TEXT('Field reference file')
     A
     A* FIELDS DEFINED BY CUSTOMER MASTER RECORD (CUSMST)
     A            CUST           5  0       TEXT('Customer numbers')
     A                                      COLHDG('CUSTOMER' 'NUMBER')
     A            NAME          20          TEXT('Customer name')
     A            ADDR          20          TEXT('Customer address')
     A
     A            CITY          20          TEXT('Customer city')
     A
     A            STATE          2          TEXT('State abbreviation')
     A                                      CHECK(MF)
     A            CRECHK         1          TEXT('Credit check')
     A                                      VALUES('Y' 'N')
     A            SEARCH         6  0       TEXT('Customer name search')
     A                                      COLHDG('SEARCH CODE')
     A            ZIP            5  0       TEXT('Zip code')
     A                                      CHECK(MF)
     A            CUTYPE         15         COLHDG('CUSTOMER' 'TYPE')
     A                                      RANGE(1 5)
     A
     A* FIELDS DEFINED BY ITEM MASTER RECORD (ITMAST)
     A            ITEM           5          TEXT('Item number')
     A                                      COLHDG('ITEM' 'NUMBER')
     A                                      CHECK(M10)
     A            DESCRP        18          TEXT('Item description')
     A            PRICE          5  2       TEXT('Price per unit')
     A                                      EDTCDE(J)
     A                                      CMP(GT 0)
     A                                      COLHDG('PRICE')
     A            ONHAND         5  0       TEXT('On hand quantity')
     A                                      EDTCDE(Z)
     A                                      CMP(GE 0)
     A                                      COLHDG('ON HAND')
     A            WHSLOC         3          TEXT('Warehouse location')
     A                                      CHECK(MF)
     A                                      COLHDG('BIN NO')
     A            ALLOC     R               REFFLD(ONHAND *SRC)
     A                                      TEXT('Allocated quantity')
     A                                      CMP(GE 0)
     A                                      COLHDG('ALLOCATED')
     A
     A* FIELDS DEFINED BY ORDER HEADER RECORD (ORDHDR)
     A            ORDER          5  0       TEXT('Order number')
     A                                      COLHDG('ORDER' 'NUMBER')
     A            ORDATE         6  0       TEXT('Order date')
     A                                      EDTCDE(Y)
     A                                      COLHDG('DATE' 'ORDERED')
     A            CUSORD        15          TEXT('Cust purchase ord no.')
     A                                      COLHDG('P.O.' 'NUMBER')
     A            SHPVIA        15          TEXT('Shipping instructions')
     A            ORDSTS         1          TEXT('Order status code')
     A                                      COLHDG('ORDER' 'STATUS')
     A            OPRNME    R               REFFLD(NAME *SRC)
     A                                      TEXT('Operator name')
     A                                      COLHDG('OPERATOR NAME')
     A            ORDAMT         9  2       TEXT('Total order value')
     A                                      COLHDG('ORDER' 'AMOUNT')
     A            INVNBR         5  0       TEXT('Invoice number')
     A                                      COLHDG('INVOICE' 'NUMBER')
     A            PRTDAT         6  0       EDTCDE(Y)
     A                                      COLHDG('PRINTED' 'DATE')
     A            SEQNBR         5  0       TEXT('Sequence number')
     A                                      COLHDG('SEQ' 'NUMBER')
     A            OPNSTS         1          TEXT('Open status')
     A                                      COLHDG('OPEN' 'STATUS')
     A            LINES          3  0       TEXT('Lines on invoice')
     A                                      COLHDG('TOTAL' 'LINES')
     A            ACTMTH         2  0       TEXT('Accounting month')
     A                                      COLHDG('ACCT' 'MONTH')
     A            ACTYR          2  0       TEXT('Accounting year')
     A                                      COLHDG('ACCT' 'YEAR')
     A
     A* FIELDS DEFINED BY ORDER DETAIL/LINE ITEM RECORD (ORDDTL)
     A            LINE           3  0       TEXT('Line no. this item')
     A                                      COLHDG('LINE' 'NO')
     A            QTYORD         3  0       TEXT('Quantity ordered')
     A                                      COLHDG('QTY' 'ORDERED'
     A                                      CMP(GE 0)
     A            EXTENS         6  2       TEXT('Ext of QTYORD x PRICE')
     A                                      EDTCDE(J)
     A                                      COLHDG('EXTENSION')
     A
     A* FIELDS DEFINED BY ACCOUNTS RECEIVABLE
     A            ARBAL          8  2       TEXT('A/R balance due')
     A                                      EDTCDE(J)
     A
     A* WORK AREAS AND OTHER FIELDS THAT OCCUR IN MULTIPLE PROGRAMS
     A            STATUS        12          TEXT('status description')
     A     A
上記の例の DDS が、 ソース・ファイル FRSOURCE に入力されるとします (メンバー名は DSTREFP)。 フィールド参照ファイルを作成するには、 次のように CRTPF コマンドを使用します。
CRTPF FILE(DSTPRODLB/DSTREFP)
      SRCFILE(QGPL/FRSOURCE) MBR(*NONE)
      TEXT('Distribution field reference file')

パラメーター MBR (*NONE) は、メンバーをファイルに追加しないように システムに指示するためのものです (これは、フィールド参照ファイルには データがなく、メンバーを必要としないからです)。

DSTREFP を参照して物理ファイル ORDHDRP を記述するには、 以下の例のような DDS を使用します。

|...+....1....+....2....+....3....+....4....+....5....+....6....+....7....+....8
     A* ORDER HEADER FILE (ORDHDRP) - PHYSICAL FILE RECORD DEFINITION
     A                                      REF(DSTREFP)
     A          R ORDHDR                    TEXT('Order header record')
     A            CUST      R
     A            ORDER     R
     A            ORDATE    R
     A            CUSORD    R
     A            SHPVIA    R
     A            ORDSTS    R
     A            OPRNME    R
     A            ORDAMT    R
     A            CUTYPE    R
     A            INVNBR    R
     A            PRTDAT    R
     A            SEQNBR    R
     A            OPNSTS    R
     A            LINES     R
     A            ACTMTH    R
     A            ACTYR     R
     A            STATE     R
     A

フィールド記述の基礎とするファイルを指示するために、 DSTREFP (フィールド参照ファイル名) を付けて REF キーワード (45 列から 80 列) を指定しています。各フィールドの 29 列の R は、フィールド記述を参照ファイルから得ることを示します。

ORDHDRP ファイルを作成すると、システムは ORDHDR レコード様式に含める フィールドの属性を判別するために、DSTREFP ファイルを使用します。ORDHDRP ファイルを 作成するには、CRTPF コマンドを使用します。 上記の例の DDS が、 ソース・ファイル QDDSSRC に入力されたとします (メンバー名は ORDHDRP)。
   CRTPF FILE(DSTPRODLB/ORDHDRP)
         TEXT('Order Header physical file')
注: このトピック集内のいくつかの例で使用しているファイルは、このフィールド参照ファイルを参照しています。