データ記述仕様 (DDS) を使用すると、オペレーティング・システムに対してフィールド・レベルでファイルを記述することができます。 DDS では、外部記述ファイル内の各レコード・フォーマットは、固有のレコード・フォーマット名で識別されます。
レコード・フォーマット仕様は、レコード内のフィールド、およびレコード内のフィールドの位置を記述します。フィールドは、レコード内に DDS で指定された順に配置されています。一般にフィールド記述に含まれるのは、フィールド名、フィールド・タイプ (文字、バイナリー、外部 10 進、内部 10 進、内部浮動小数点)、およびフィールド長 (数値フィールド内の小数点以下の桁数を含む) です。フィールド属性は、物理ファイルまたは論理ファイルのレコード・フォーマットで指定するのではなく、フィールド参照ファイルに定義することができます。(図 93 を参照。)
レコード・フォーマットのキーは、DDS で指定されます。形式 2 の COPY ステートメントを使用した場合は、フォーマットのキーを DDS に定義する方法を示したソース・プログラム・リストに、コメントのテーブルが生成されます。
さらに、DDS キーワードを使用して以下を行うことができます。
データベース・ファイルに対して有効な DDS キーワードの詳細リストについては、 Web サイト http://www.ibm.com/eserver/iseries/infocenter にある iSeries Information Center の 「プログラミング」カテゴリーを参照してください。
....+....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 に示されています) によって使用されるフィールドの定義を示しています。フィールド参照ファイルには通常、他のファイルが使用するフィールドの定義も含まれています。以下で、このフィールド参照ファイルのエントリーの一部について説明します。
形式 2 の COPY ステートメントをコーディングすると、ファイル記述をプログラムに組み込むことができます。 外部記述ファイルからの情報は ILE COBOL コンパイラーによって取り出され、ILE COBOL データ構造が生成されます。
以下のページでは、DDS の使用例と、形式 2 の COPY ステートメントを使用した結果生成される ILE COBOL コードを示します。(形式 2 の COPY ステートメントの詳細については、「WebSphere Development Studio: ILE COBOL 解説書」を参照してください。)
....+....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
図 93 は、データベース・ファイルで使用されるフィールドの属性を定義するフィールド参照ファイルの例を示しています。
ソ ー ス 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
....+....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
ソ ー ス 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 から外部ファイル記述を利用する方法を示しています。
外部記述ファイルの記述には、ファイルからレコードを取り出す方法を記述するアクセス・パスが含まれます。レコードは、到着順 (非キー順) アクセス・パス、またはキー順アクセス・パスに基づいて取り出されます。外部記述データベース・ファイルのアクセス・パスの詳細については、 Web サイト http://www.ibm.com/eserver/iseries/infocenter にある iSeries Information Center の「データベース」カテゴリーを参照してください。
到着順アクセス・パスは、レコードがファイルに保管された順序に基づいています。 レコードは、ファイルの末尾にのみ追加されます。
キー順アクセス・パスの場合、ファイルからレコードを取り出す順序は、DDS でファイルに対して定義されているキー・フィールドの内容に基づいています。例えば、図 94 に示されている DDS では、CUST がキー・フィールドとして定義されています。キー順アクセス・パスは、レコードが追加または削除されたとき、あるいはキー・フィールドの内容が変化したときに更新されます。 キー順アクセス・パスの場合、1 つ以上のフィールドを DDS に定義して、レコード・フォーマットのキー・フィールドとして使用することができます。ファイル内のすべてのレコード・フォーマットが同じキー・フィールドを持つ必要はありません。例えば、注文ヘッダー・レコードの ORDER フィールドはキー・フィールドとして定義し、オーダー明細レコードの ORDER および LINE フィールドはキー・フィールドとして定義することができます。
入出力操作に対してフォーマットを指定しなかった場合、ファイルのキーは、そのファイル内のレコード・フォーマットの有効なキーによって決定されます。 ファイルのキーは、以下のようにして決定されます。
この場合、ファイルのキーは、すべてのレコード・フォーマットに共通のキー・フィールドであるフィールド A です。
ILE COBOL では、処理するレコードを識別するのに、索引付きファイルに RECORD KEY を指定する必要があります。 ILE COBOL は、キー値をファイルまたはレコードのキーと比較して、キーが RECORD KEY 値に一致するレコードに対して指定された操作を処理します。
RECORD KEY IS EXTERNALLY-DESCRIBED-KEY が指定されている場合は、以下のようになります。
ILE COBOL プログラムが外部記述ファイルを使用している場合、オペレーティング・システムは、レベル検査関数 (LVLCHK) を提供します。この関数は、ファイルのフォーマットがコンパイル以降変更されていないことを保証します。
外部記述ファイルが使用されている場合 (すなわち、レコード記述が形式 2 の COPY ステートメントを使用してファイルに定義されていた場合)、コンパイラーは常にレベル検査に必要な情報を提供します。レベル検査されるのは、形式 2 の COPY ステートメントによってファイルの FD の項目にコピーされたフォーマットだけです。レベル検査関数は、実行時に、ファイルの作成、変更、または指定変更コマンドに対して行われた選択に基づいて開始されます。 ファイル作成コマンドのデフォルトでは、レベル検査が要求されます。レベル検査が要求されていた場合は、ファイルが開かれたときにレベル検査がレコード・フォーマット・ベースで検査が行われます。レベル検査エラーが発生した場合、ILE COBOL はファイル状況を 39 に設定します。
CRTxxxF、CHGxxxF、または OVRxxxF CL コマンドに対して LVLCHK(*NO) が指定されており、既存のフォーマットを使用してファイルが再作成された場合、そのフォーマットを使用している既存の ILE COBOL プログラムは、フォーマットの変更内容によっては再コンパイルしないと動作しない可能性があります。
レベル検査を行わないで ILE COBOL プログラムでファイルを使用する場合には、十分に注意する必要があります。レベル検査または再コンパイルを行わないで ILE COBOL プログラムを使用すると、プログラムが失敗し、データが破壊される危険性があります。
レベル検査の詳細については、Web サイト http://www.ibm.com/eserver/iseries/infocenter にある iSeries Information Center の 「データベース」カテゴリーを参照してください。
(C) Copyright IBM Corporation 1992, 2006. All Rights Reserved.