データ記述仕様 (DDS) を使用したファイルの記述

データ記述仕様 (DDS) を使用すると、オペレーティング・システムに対してフィールド・レベルでファイルを記述することができます。 DDS では、外部記述ファイル内の各レコード・フォーマットは、固有のレコード・フォーマット名で識別されます。

レコード・フォーマット仕様は、レコード内のフィールド、およびレコード内のフィールドの位置を記述します。フィールドは、レコード内に DDS で指定された順に配置されています。一般にフィールド記述に含まれるのは、フィールド名、フィールド・タイプ (文字、バイナリー、外部 10 進、内部 10 進、内部浮動小数点)、およびフィールド長 (数値フィールド内の小数点以下の桁数を含む) です。フィールド属性は、物理ファイルまたは論理ファイルのレコード・フォーマットで指定するのではなく、フィールド参照ファイルに定義することができます。(図 93 を参照。)

レコード・フォーマットのキーは、DDS で指定されます。形式 2 の COPY ステートメントを使用した場合は、フォーマットのキーを DDS に定義する方法を示したソース・プログラム・リストに、コメントのテーブルが生成されます。

さらに、DDS キーワードを使用して以下を行うことができます。

データベース・ファイルに対して有効な DDS キーワードの詳細リストについては、 Web サイト http://www.ibm.com/eserver/iseries/infocenter にある iSeries Information Center の 「プログラミング」カテゴリーを参照してください。

図 93. フィールド参照ファイルの例
....+....1....+....2....+....3....+....4....+....5....+....6....+....7....+....8
      A**FLDREF    DSTREF     DISTRIBUTION APPLICATION FIELDS REFERENCE
      A          R DSTREF                    TEXT('DISTRIBUTION FIELD REF')
      A* COMMON FIELDS USED AS REFERENCE
    1 A            BASDAT         6  0       EDTCDE(Y)
      A                                      TEXT('BASE DATE FIELD')
      A* FIELDS USED BY CUSTOMER MASTER FILE
    2 A            CUST           5          CHECK(MF)
      A                                      COLHDG('CUSTOMER' 'NUMBER')
      A            NAME          20          COLHDG('CUSTOMER NAME')
    3 A            ADDR      R               REFFLD(NAME)
      A                                      COLHDG('CUSTOMER ADDRESS')
      A            CITY      R               REFFLD(NAME)
      A                                      COLHDG('CUSTOMER CITY')
    2 A            STATE          2          CHECK(MF)
      A                                      COLHDG('STATE')
      A            SRHCOD         6          CHECK(MF)
      A                                      COLHDG('SEARCH' 'CODE')
      A                                      TEXT('CUSTOMER NUMBER SEARCH CODE')
    2 A            ZIP            5  0       CHECK(MF)
      A                                      COLHDG('ZIP' 'CODE')
    4 A            CUSTYP         1  0       RANGE(1 5)
      A                                      COLHDG('CUST' 'TYPE')
      A                                      TEXT('CUSTOMER TYPE 1=GOV 2=SCH 3=B+
      A                                      US 4=PT 5=OTH')
    5 A            ARBAL          8  2       COLHDG('ACCTS REC' 'BALANCE')
      A                                      EDTCDE(J)
    6 A            ORDBAL    R               REFFLD(ARBAL)
      A                                      COLHDG('A/R AMT IN' 'ORDER FILE')
      A            LSTAMT    R               REFFLD(ARBAL)
      A                                      COLHDG('LAST' 'AMOUNT' 'PAID')
    7 A                                      TEXT('LAST AMOUNT PAID IN A/R')
      A            LSTDAT    R               REFFLD(ARBAL)
      A                                      COLHDG('LAST' 'DATE' 'PAID  ')
      A                                      TEXT('LAST DATE PAID IN A/R')
      A            CRDLMT         8  2       COLHDG('CUSTOMER' 'CREDIT' 'LIMIT')
      A                                      EDTCDE(J)
      A            SLSYR         10  2       COLHDG('CUSTOMER' 'SALES' 'THIS YEAR')
      A                                      EDTCDE(J)
      A            SLSLYR        10  2       COLHDG('CUSTOMER' 'SALES' 'LAST YEAR')
      A                                      EDTCDE(J)

このフィールド参照ファイルの例 (図 93) は、CUSMSTL (カスタマー・マスター論理) ファイル (図 94 に示されています) によって使用されるフィールドの定義を示しています。フィールド参照ファイルには通常、他のファイルが使用するフィールドの定義も含まれています。以下で、このフィールド参照ファイルのエントリーの一部について説明します。

 1 
BASDAT フィールドは、キーワード EDTCDE (Y) で示されているように、Y 編集コードで編集されます。このフィールドが ILE COBOL プログラムの外部記述出力ファイルで使用されている場合、COBOL によって生成されたフィールドは、DDS で指定されているデータ型と互換性があります。このフィールドは、レコードが書き込まれると編集されます。このフィールドがプログラム記述出力ファイルで使用されている場合、このファイル内の DDS と互換性を維持するのは、ユーザーの責任です。このファイルの作成時に DDS を使用しない場合は、ILE COBOL プログラム内のフィールドを適切に編集するのもユーザーの責任になります。
 2 
CHECK(MF) 項目は、ディスプレイ・ワークステーションからこの項目を入力する場合は、全桁入力必須フィールドであることを指定します。全桁入力必須とは、フィールドの文字はすべて、ディスプレイ・ワークステーションから入力する必要がある、ということです。
 3 
ADDR および CITY フィールドは、REFFLD キーワードで示されているように、NAME フィールドに指定されているのと同じ属性を共用します。
 4 
RANGE キーワードは CUSTYP フィールドに対して指定されており、ディスプレイ・ワークステーションからこのフィールドに入力できるのは、1 から 5 の範囲の数字だけであることを保証します。
 5 
COLHDG キーワードは、適用業務開発ツール・セットのツールで使用されている場合は、フィールドの列ヘッドを提供します。
 6 
ARBAL フィールドは、キーワード EDTCDE(J) で示されているように、J 編集コードで編集されます。
 7 
テキスト記述 (TEXT キーワード) は、いくつかのフィールドに提供されます。TEXT キーワードは文書化の目的に使用され、さまざまなリストで使用されます。

ILE COBOL プログラムでの外部記述ファイルの使用

形式 2 の COPY ステートメントをコーディングすると、ファイル記述をプログラムに組み込むことができます。 外部記述ファイルからの情報は ILE COBOL コンパイラーによって取り出され、ILE COBOL データ構造が生成されます。

以下のページでは、DDS の使用例と、形式 2 の COPY ステートメントを使用した結果生成される ILE COBOL コードを示します。(形式 2 の COPY ステートメントの詳細については、「WebSphere Development Studio: ILE COBOL 解説書」を参照してください。)

図 94. 論理ファイルのデータ記述仕様の例
....+....1....+....2....+....3....+....4....+....5....+....6....+....7....+....8
    1 A** LOGICAL  CUSMSTL   CUSTOMER MASTER FILE
      A                                    2 UNIQUE
      A        3 R CUSREC                    PFILE(CUSMSTP)
      A                                      TEXT('CUSTOMER MASTER RECORD')
      A            CUST
      A            NAME
      A            ADDR
      A            CITY
      A            STATE
      A            ZIP
      A            SRHCOD
      A            CUSTYP
      A            ARBAL
      A            ORDBAL
      A            LSTAMT
      A            LSTDAT
      A            CRDLMT
      A            SLSYR       5 
      A            SLSLYR
      A        4 K CUST
 1 
カスタマー・マスター物理ファイル (CUSMSTP) を処理するための論理ファイルが定義され、CUSMSTL という名前が付けられています。
 2 
UNIQUE キーワードは、このファイルには重複キー値を使用できないことを示しています。
 3 
CUSMSTL ファイルに 1 つのレコード・フォーマット (CUSREC) が定義されています。このファイルは、物理ファイル CUSMSTP を基にしています。
 4 
CUST ファイルがこのファイルのキー・フィールドとして識別されています。
 5 
論理ファイルに対してフィールド属性 (長さ、データ・タイプ、小数点以下の桁数など) が DDS で指定されていない場合、それらの属性は、物理ファイル内の対応するフィールドから取得されます。論理ファイルの DDS で指定されているフィールド属性はすべて、物理ファイル内のそれに対応するフィールドの属性を指定変更します。物理ファイル内のフィールドの定義は、フィールド参照ファイルを参照することもできます。フィールド参照ファイルとは、フィールド名とその定義 (サイズやタイプなど) で構成されるデータ記述ファイルを指します。 フィールド参照ファイルを使用する場合は、複数のレコード・フォーマットで使用されている同じフィールドは、フィールド参照ファイルに一度だけ定義する必要があります。フィールド参照ファイルの詳細については、Web サイト http://www.ibm.com/eserver/iseries/infocenter にある iSeries Information Center の「データベース」カテゴリーを参照してください。

図 93 は、データベース・ファイルで使用されるフィールドの属性を定義するフィールド参照ファイルの例を示しています。

図 95. 形式 2 の COPY ステートメント (DDS) の結果の例
                                     ソ ー ス

  STMT PL SEQNBR -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN S コピー名   変更日付


    18     000200 01  CUSTOMER-INVOICE-RECORD.
           000210     COPY DDS-CUSREC OF CUSMSTL.
           +000001*    I-O FORMAT:CUSREC     FROM FILE CUSMSTL    OF LIBRARY TESTLIB            CUSREC
           +000002*                          CUSTOMER MASTER RECORD                            CUSREC
           +000003*          USER SUPPLIED KEY BY RECORD KEY CLAUSE                            CUSREC
    19    +000004       05  CUSREC.                                                            CUSREC
    20    +000005           06 CUST                  PIC X(5).                                 CUSREC
          +000006*                  CUSTOMER NUMBER                                            CUSREC
    21    +000007           06 NAME                  PIC X(25).                                CUSREC
          +000008*                  CUSTOMER NAME                                              CUSREC
    22    +000009           06 ADDR                  PIC X(20).                                CUSREC
          +000010*                  CUSTOMER ADDRESS                                           CUSREC
    23    +000011           06 CITY                  PIC X(20).                                CUSREC
          +000012*                  CUSTOMER CITY                                              CUSREC
    24    +000013           06 STATE                 PIC X(2).                                 CUSREC
          +000014*                  STATE                                                      CUSREC
    25    +000015           06 ZIP                   PIC S9(5)       COMP-3.                   CUSREC
          +000016*                  ZIP CODE                                                   CUSREC
    26    +000017           06 SRHCOD                PIC X(6).                                 CUSREC
          +000018*                  CUSTOMER NUMBER SEARCH CODE                                CUSREC
    27    +000019           06 CUSTYP                PIC S9(1)       COMP-3.                   CUSREC
          +000020*                  CUSTOMER TYPE 1=GOV 2=SCH 3=BUS 4=PVT 5=OT                 CUSREC
    28    +000021           06 ARBAL                 PIC S9(6)V9(2)  COMP-3.                   CUSREC
          +000022*                  ACCOUNTS REC. BALANCE                                      CUSREC
    29    +000023           06 ORDBAL                PIC S9(6)V9(2)  COMP-3.                   CUSREC
          +000024*                  A/R AMT. IN ORDER FILE                                     CUSREC
    30    +000025           06 LSTAMT                PIC S9(6)V9(2)  COMP-3.                   CUSREC
          +000026*                  LAST AMT. PAID IN A/R                                      CUSREC
    31    +000027           06 LSTDAT                PIC S9(6)       COMP-3.                   CUSREC
          +000028*                  LAST DATE PAID IN A/R                                      CUSREC
    32    +000029           06 CRDLMT                PIC S9(6)V9(2)  COMP-3.                   CUSREC
          +000030*                  CUSTOMER CREDIT LIMIT                                      CUSREC
    33    +000031           06 SLSYR                 PIC S9(8)V9(2)  COMP-3.                   CUSREC
          +000032*                  CUSTOMER SALES THIS YEAR                                   CUSREC
    34    +000033           06 SLSLYR                PIC S9(8)V9(2)  COMP-3.                   CUSREC
          +000034*                  CUSTOMER SALES LAST YEAR                                   CUSREC
図 96. ALIAS を指定したデータ記述仕様の例
 ....+....1....+....2....+....3....+....4....+....5....+....6....+....7....+....8
      A** LOGICAL  CUSMSTL   CUSTOMER MASTER FILE
      A                                      UNIQUE
      A          R CUSREC                    PFILE(CUSMSTP)
      A                                      TEXT('CUSTOMER MASTER RECORD')
      A            CUST                      ALIAS(CUSTOMER_NUMBER)
      A            NAME                    1 ALIAS(CUSTOMER_NAME)
      A            ADDR                      ALIAS(ADDRESS)
      A            CITY
      A            STATE
      A            ZIP
      A            SRHCOD                    ALIAS(SEARCH_CODE)
      A            CUSTYP                    ALIAS(CUSTOMER_TYPE)
      A            ARBAL                     ALIAS(ACCT_REC_BALANCE)
      A            ORDBAL
      A            LSTAMT
      A            LSTDAT
      A            CRDLMT
      A            SLSYR
      A            SLSLYR
      A          K CUST
 1 
これは、ALIAS キーワードに関連付けられている名前です。この名前は、プログラム内に組み込まれます。別名は DDS ALIAS オプションによって使用可能になる代替名で、この代替名によって最大 30 文字のデータ名を ILE COBOL プログラム内に組み込むことができます。
図 97. ALIAS キーワードを指定した形式 2 の COPY ステートメント (DD) の結果の例
                                     ソ ー ス

  STMT PL SEQNBR -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN S コピー名   変更日付


    18     002000 01  CUSTOMER-INVOICE-RECORD.
           002100     COPY DDS-CUSREC OF CUSMSTL ALIAS.
          +000001*    I-O FORMAT:CUSREC     FROM FILE CUSMSTL    OF LIBRARY TESTLIB            CUSREC
          +000002*                          CUSTOMER MASTER RECORD                             CUSREC
          +000003*          USER SUPPLIED KEY BY RECORD KEY CLAUSE                             CUSREC
    19    +000004       05  CUSREC.                                                            CUSREC
    20    +000005           06 CUSTOMER-NUMBER       PIC X(5).                                 CUSREC
          +000006*                  CUSTOMER NUMBER                                            CUSREC
    21    +000007           06 CUSTOMER-NAME         PIC X(25).                                CUSREC
          +000008*                  CUSTOMER NAME                                              CUSREC
    22    +000009           06 ADDRESS-DDS           PIC X(20).                                CUSREC
          +000010*                  CUSTOMER ADDRESS                                           CUSREC
    23    +000011           06 CITY                  PIC X(20).                                CUSREC
          +000012*                  CUSTOMER CITY                                              CUSREC
    24    +000013           06 STATE                 PIC X(2).                                 CUSREC
          +000014*                  STATE                                                      CUSREC
    25    +000015           06 ZIP                   PIC S9(5)       COMP-3.                   CUSREC
          +000016*                  ZIP CODE                                                   CUSREC
    26    +000017           06 SEARCH-CODE           PIC X(6).                                 CUSREC
          +000018*                  CUSTOMER NUMBER SEARCH CODE                                CUSREC
    27    +000019           06 CUSTOMER-TYPE         PIC S9(1)       COMP-3.                   CUSREC
          +000020*                  CUSTOMER TYPE 1=GOV 2=SCH 3=BUS 4=PVT 5=OT                 CUSREC
    28    +000021           06 ACCT-REC-BALANCE      PIC S9(6)V9(2)  COMP-3.                   CUSREC
          +000022*                  ACCOUNTS REC. BALANCE                                      CUSREC
    29    +000023           06 ORDBAL                PIC S9(6)V9(2)  COMP-3.                   CUSREC
          +000024*                  A/R AMT. IN ORDER FILE                                     CUSREC
    30    +000025           06 LSTAMT                PIC S9(6)V9(2)  COMP-3.                   CUSREC
          +000026*                  LAST AMT. PAID IN A/R                                      CUSREC
    31    +000027           06 LSTDAT                PIC S9(6)       COMP-3.                   CUSREC
          +000028*                  LAST DATE PAID IN A/R                                      CUSREC
    32    +000029           06 CRDLMT                PIC S9(6)V9(2)  COMP-3.                   CUSREC
          +000030*                  CUSTOMER CREDIT LIMIT                                      CUSREC
    33    +000031           06 SLSYR                 PIC S9(8)V9(2)  COMP-3.                   CUSREC
          +000032*                  CUSTOMER SALES THIS YEAR                                   CUSREC
    34    +000033           06 SLSLYR                PIC S9(8)V9(2)  COMP-3.                   CUSREC
          +000034*                  CUSTOMER SALES LAST YEAR                                   CUSREC

形式 2 の COPY ステートメントを使用してプログラム内にファイルの外部記述を配置する以外にも、標準のレコード定義および再定義を使用して、外部ファイルを記述したり、一連のフィールドのグループ定義を提供したりすることもできます。プログラム記述定義がファイルの外部定義と互換性があることを保証するのは、プログラマーの責任です。

図 98 は、ILE COBOL プログラムを iSeries サーバー上のファイルに関連付けて、DDS から外部ファイル記述を利用する方法を示しています。

図 98. ILE COBOL と iSeries ファイルの関連付け方法を示した例
以下では 4 つの場合の例を示しています。
 1 
ILE COBOL プログラムは、オペレーティング・システムに対して定義されているファイルのフィールド・レベル記述を使用します。レコード記述を得るために形式 2 の COPY ステートメントをコーディングします。コンパイラーは、コンパイル時に、外部フィールド・レベルの記述をコピーし、それを構文的に正しい ILE COBOL レコード記述に変換します。このファイルは、コンパイル時に存在している必要があります。
 2 
外部記述ファイルは ILE COBOL プログラムでプログラム記述ファイルとして使用されます。外部記述ファイルのレコード記述全体が ILE COBOL プログラムにコーディングされます。このファイルは、コンパイル時に存在している必要はありません。
 3 
ファイルは、レコード・レベルまでに限り、オペレーティング・システムに対して記述されます。レコード記述全体を ILE COBOL プログラムにコーディングする必要があります。このファイルは、コンパイル時に存在している必要はありません。
 4 
コンパイル時にファイル名を指定できますが、実行時には別のファイル名を指定することができます。ILE COBOL 形式 2 の COPY ステートメントは、コンパイル時にファイルのレコード記述を生成します。実行時は、プログラムが別のファイルにアクセスするよう、別のライブラリー・リストまたはファイル指定変更コマンドを使用することができます。コンパイル時にコピーされたファイル記述は、実行時に使用される入力レコードを記述するために使用されます。
注:
外部記述ファイルの場合、2 つのファイル・フォーマットは同一である必要があります。同一でない場合は、レベル検査エラーが発生します。

非キー順レコード検索とキー順レコード検索の指定

外部記述ファイルの記述には、ファイルからレコードを取り出す方法を記述するアクセス・パスが含まれます。レコードは、到着順 (非キー順) アクセス・パス、またはキー順アクセス・パスに基づいて取り出されます。外部記述データベース・ファイルのアクセス・パスの詳細については、 Web サイト http://www.ibm.com/eserver/iseries/infocenter にある iSeries Information Center の「データベース」カテゴリーを参照してください。

到着順アクセス・パスは、レコードがファイルに保管された順序に基づいています。 レコードは、ファイルの末尾にのみ追加されます。

キー順アクセス・パスの場合、ファイルからレコードを取り出す順序は、DDS でファイルに対して定義されているキー・フィールドの内容に基づいています。例えば、図 94 に示されている DDS では、CUST がキー・フィールドとして定義されています。キー順アクセス・パスは、レコードが追加または削除されたとき、あるいはキー・フィールドの内容が変化したときに更新されます。 キー順アクセス・パスの場合、1 つ以上のフィールドを DDS に定義して、レコード・フォーマットのキー・フィールドとして使用することができます。ファイル内のすべてのレコード・フォーマットが同じキー・フィールドを持つ必要はありません。例えば、注文ヘッダー・レコードの ORDER フィールドはキー・フィールドとして定義し、オーダー明細レコードの ORDER および LINE フィールドはキー・フィールドとして定義することができます。

入出力操作に対してフォーマットを指定しなかった場合、ファイルのキーは、そのファイル内のレコード・フォーマットの有効なキーによって決定されます。 ファイルのキーは、以下のようにして決定されます。

ILE COBOL では、処理するレコードを識別するのに、索引付きファイルに RECORD KEY を指定する必要があります。 ILE COBOL は、キー値をファイルまたはレコードのキーと比較して、キーが RECORD KEY 値に一致するレコードに対して指定された操作を処理します。

RECORD KEY IS EXTERNALLY-DESCRIBED-KEY が指定されている場合は、以下のようになります。

注:
ILE COBOL で処理される複数のキー・フィールドを含むファイルの場合、RECORD KEY IS EXTERNALLY-DESCRIBED-KEY が指定されている場合を除き、ILE COBOL プログラムが使用するレコード・フォーマットでは、キー・フィールドは隣接している必要があります。

外部記述ファイルのレベル検査

ILE COBOL プログラムが外部記述ファイルを使用している場合、オペレーティング・システムは、レベル検査関数 (LVLCHK) を提供します。この関数は、ファイルのフォーマットがコンパイル以降変更されていないことを保証します。

外部記述ファイルが使用されている場合 (すなわち、レコード記述が形式 2 の COPY ステートメントを使用してファイルに定義されていた場合)、コンパイラーは常にレベル検査に必要な情報を提供します。レベル検査されるのは、形式 2 の COPY ステートメントによってファイルの FD の項目にコピーされたフォーマットだけです。レベル検査関数は、実行時に、ファイルの作成、変更、または指定変更コマンドに対して行われた選択に基づいて開始されます。 ファイル作成コマンドのデフォルトでは、レベル検査が要求されます。レベル検査が要求されていた場合は、ファイルが開かれたときにレベル検査がレコード・フォーマット・ベースで検査が行われます。レベル検査エラーが発生した場合、ILE COBOL はファイル状況を 39 に設定します。

CRTxxxF、CHGxxxF、または OVRxxxF CL コマンドに対して LVLCHK(*NO) が指定されており、既存のフォーマットを使用してファイルが再作成された場合、そのフォーマットを使用している既存の ILE COBOL プログラムは、フォーマットの変更内容によっては再コンパイルしないと動作しない可能性があります。

レベル検査を行わないで ILE COBOL プログラムでファイルを使用する場合には、十分に注意する必要があります。レベル検査または再コンパイルを行わないで ILE COBOL プログラムを使用すると、プログラムが失敗し、データが破壊される危険性があります。

注:
ILE COBOL コンパイラーは、プログラム記述ファイルのレベル検査を提供していません。

レベル検査の詳細については、Web サイト http://www.ibm.com/eserver/iseries/infocenter にある iSeries Information Center の 「データベース」カテゴリーを参照してください。