+----------------------------------IBM 拡張----------------------------------+
COPY ステートメント - 形式 2 - DDS 変換 >>-COPY--+-DD-形式名--------+--+-------+--+--------------+------> +-DD-ALL-FORMATS---+ +- -I---+ +- -INDICATOR--+ +-DDR-形式名-------+ +- -O---+ +- -INDICATORS-+ +-DDR-ALL-FORMATS--+ '- -I-O-' '- -INDIC------' +-DDS-形式名-------+ +-DDS-ALL-FORMATS--+ +-DDSR-形式名------+ '-DDSR-ALL-FORMATS-' >--+-OF-+--+-----------------------+--ファイル名--+------+------> '-IN-' | (1) | '-WITH-' '-ライブラリー名- ------' .---------------------------. V | >----+-----------------------+-+--+----------+------------------> +-+-I-FIELDS---+--------+ '-SUPPRESS-' | +-O-FIELDS---+ | | '-I-O-FIELDS-' | +-+-INDICATOR--+--------+ | +-INDICATORS-+ | | '-INDIC------' | +-NULL-MAP--------------+ +-NULL-MAP-ALPHANUM-----+ +-NULL-KEY-MAP----------+ +-PREFIX--BY--リテラル--+ +-ALIAS-----------------+ +-+-------------------+-+ | '-| SUBSTITUTE 句 |-' | '-VLR-------------------' >--+-------------------+--.------------------------------------>< '-REPLACING--| 句 |-' SUBSTITUTE 句: |--SUBSTITUTE--+-----------------------------+------------------| '-ALL--+--------------------+-' '-EXCEPT--リテラル-2-'
注:
関連情報
形式 2 の COPY ステートメント (DD、DDR、DDS、または DDSR オプション) は、 システムに存在するファイルを記述する COBOL データ部ステートメントを作成するために使用できます。 これらの記述は、コンパイル時に存在するファイルのバージョンに基づきます。 これらの記述では、ファイルについての DDS ソース・ステートメントを使用しません。
REPLACE ステートメントが有効である場合、COPY ステートメントはコード行上の最初の項目でなければなりません。また、この行には、少なくとも最初のハイフンまでに、必要なオプションを指定するテキスト語が入っていなければなりません。
DDS は、DBCS の形式 J (DBCS データだけを含めることができるフィールドの場合)、E (DBCS または英数字データのいずれかを含めることができるフィールドの場合)、 または O (DBCS および英数字データの両方を含めることができるフィールドの場合) をサポートします。 また DDS は、形式 G のグラフィック・データ・タイプをサポートします。 *PICGGRAPHIC オプションは、形式 G の DDS 項目に対応する COBOL DBCS データ項目を作成するために使用されます。*PICNGRAPHIC オプションは、UCS-2 の CCSID 13488 を持つ、形式 G の DDS 項目に対応する COBOL NATIONAL データ項目を作成するために使用されます。 その他の環境ではすべて、データの正確なバイト数のデータを保持することのできる英数字データ項目が作成されます。
形式 2 の COPY ステートメントはデータ部でだけ使用でき、ユーザーは ステートメントの前に 05 よりも小さいレベル番号のグループ・レベル項目を 入れなければなりません。
DD オプションまたは ALIAS オプションは、別名 (代替名) を参照するために使用されます。 DDS 内で別名を指定すると、最大 30 文字のデータ名を COBOL プログラムに組み込むことができます。
DD オプションまたは ALIAS オプションが使用されると、存在する別名が対応する DDS フィールド名を置き換えます。 別名の中の下線はすべて、置き換えが行われる前にハイフンに変換されます。
DDR オプションまたは SUBSTITUTE オプションは、DD オプションによって行われることをすべて行います。 さらに、フィールド名 (あるいは、該当する場合は別名) 内の無効な COBOL 文字である @、#、¥、および _ を対応する有効な COBOL 文字 A、N、D、および - に置き換えます。 また、フィールド名の末尾から下線を除去します。
DDS オプションは、指定した DDS 形式の内部 DDS のフィールド名をコピーします。
DDSR オプションは、DDS オプションによって行われることをすべて行います。 さらに、無効な COBOL 文字である @、#、¥、および _ をそれぞれ有効な COBOL 文字 A、N、D、および - に置き換えて、指定した DDS 形式で 内部 DDS のフィールド名をコピーします。 また、フィールド名の末尾から下線を除去します。
形式名は、ILE COBOL データ記述記入項目に変換される DDS レコード形式定義の名前です。 形式名は、ILE COBOL データ名の形成に関する規則に従わなければなりません。
ALL-FORMATS オプションは、データ名の規則に従わない名前を含む、ファイルに定義されたすべての形式を変換します。 そのような形式名を有効なデータ名に変更するには、REPLACING 句を使用しなければなりません。 ただし、REPLACING 句は、EXTERNALLY-DESCRIBED-KEY によって定義された索引付きファイルの FD 記入項目内の形式名を変更する際には使用できません。 このキーを RECORD KEY 文節内でデータ名を使用して定義できない場合は、そのファイルの DDS の指定内の形式名を変更する必要があります。
VLR オプションは変数レコード・ファイルとともに使用する必要があります。 このオプションは、可変長フィールドからのコピーを指定します。 これは、CRTCBLMOD と CRTBNDCBL コマンドの CVTOPT (*VARCHAR) オプションを指定変更します。
PREFIX オプションは、それぞれのフィールド名の前に挿入される接頭部 (リテラル) を指定するのに使用できます。 これを使用すると、フィールドの内容または用途を識別する (つまり、記述する) のに役立ちます。 リテラルは、一組のアポストロフィまたは一組の引用符の中に入れることができます。 リテラルの最大長は 15 文字です。
-I または I-FIELDS も -O または O-FIELDS も指定しないと、-I-O または I-O-FIELDS が想定されます。 -I および O-FIELDS、または -O および I-FIELDS を指定すると、-I-O または I-O-FIELDS が想定されます。
形式名が標識属性なしで指定されており、-I と -O の両方の形式が生成される場合、 それぞれのレコード形式は、生成される最大のレコード形式のサイズとして定義された 05 基本 項目の再定義として生成されます。
ALL-FORMATS が標識属性なしで指定された場合には、 それぞれのレコード形式は、次のいずれかとして定義された 05 基本項目の再定義として生成されます。
標識属性が指定されている場合には、再定義は行われません。 その代わりに、それぞれの形式が別々のデータ構造を生成します。 詳細は 形式 2 の COPY ステートメントの INDICATOR 属性を参照してください。
ファイルがデータベース・ファイルにある場合は、1 つの I-O 様式が生成されます。
その他のすべてのファイル・タイプの場合、生成される記述は次のようになります。
標識属性の使用法については 形式 2 の COPY ステートメントの INDICATOR 属性で説明します。
ファイル名は、iSeries システム・ファイルの名前です。 生成される DDS 記入項目は、ファイル内で定義されたレコード形式 (1 つまたは複数) を表します。 ファイルは、プログラムのコンパイルの前に作成しなければなりません。
ライブラリー名の指定はオプションです。 指定されていない場合は、現行のジョブ・ライブラリー・リストがデフォルト値として使用されます。
SUBSTITUTE 句 - 形式 >>-SUBSTITUTE--+-----------------------------+----------------->< '-ALL--+--------------------+-' '-EXCEPT--リテラル-2-'
SUBSTITUTE 句を使用することによって、プログラムで DDS の使用が可能となり、 下線文字のような特定の文字を保存しておくことができます。 下線文字は、標準の ILE COBOL 文字ではありませんが、ロケール・カテゴリーを指定するのに必要です。 下線文字を、たとえばコピーされた DDS に保存するためには、SUBSTITUTE 句を以下のように使用します。
...SUBSTITUTE ALL EXCEPT '_'.
REPLACING 句は REPLACING 句で説明されています。
関連情報
DDS でフィールドが ALWNULL として定義される場合は、COPY DDS ステ ートメントはそのフィールドをコメント付きでヌル可能と識別します。 たとえば、下記の 2 つの図には、ヌル可能フィールドの入っている DDS ファイル、 およびこのフィールドが ILE COBOL プログラムの FILE-SECTION にコピーされるときにこれに対して作成される結果のコメントが示されています。
....+....1....+....2....+....3....+....4....+....5....+....6....+....7....+.... A* With the following physical file (TESTPF) R TESTING FLD1 5S 0 FLD2 8 ALWNULL FLD3 6 |
図 29. ヌル可能 DDS ファイルの ILE COBOL プログラムへのコピー後の結果
* A COPY DDS-TESTING OF TESTPF. * I-O FORMAT:TESTING FROM FILE TESTPF OF LIBRARY QTEMP * 05 TESTING. 06 FLD1 PIC 9(5). 06 FLD2 PIC X(8). (null-capable field) 06 FLD3 PIC X(6). |
コピーされる DDS ヌル可能レコード形式のヌル・マップおよびヌル・キー・マップを生成するには、WITH NULL-MAP および WITH NULL-KEY-MAP 句 を作業用ストレージ・セクションまたはローカル・ストレージ・セクションで新規 COPY DDS ステートメント上に指定する必要があります。 DDS の形式当たり 1 つだけ NULL-MAP のコピーが生成されます。 たとえば、形式に I (入力のみ) および B (入出力) の両方が含まれる場合、 生成されるヌル・マップのサイズは形式の中で指定されたすべてのフィールドに合うものです。 換言すれば、これには I および B のすべてのフィールドが含まれています。
特定形式用の DDS で定義されたヌル可能フィールドごとに、データ項目定義が生成されます。 生成されるデータ項目は、作業用ストレージ・セクションま たはローカル・ストレージ・セクションで COPY DDS ステートメント上 に NULL-MAP または NULL-MAP-ALPHANUM を指定するかどうかによって異なります。
NULL-MAP を指定した場合は、ヌル・マップが、2 進ゼロ (0) に初期設定される PIC 1 値を指定して作成されます。 以下のステートメントが、ヌル可能フィールドのソースで生成されます。
06 <field-name>-NF PIC 1 VALUE B"0".
フィールドがヌル可能でない場合は、FILLER 項目が生成されます。
NULL-MAP-ALPHANUM を指定した場合は、ヌル・マップが、文字ゼロ (0) に初期設定される PIC X 値を指定して作成されます。 以下のステートメントが、ヌル可能フィールドのソースで生成されます。
06 <field-name>-NF PIC X VALUE ZERO.
フィールドがヌル可能でない場合は、以下のステートメントがソースで生成されます。
06 <field-name>-AN PIC X VALUE ZERO.
NULL-MAP-ALPHANUM を使用して生成されたヌル・マップのサイズは、NULL-MAP を使用して生成されたヌル・マップのサイズと同じです。
図 30. 一部のフィールドがヌル可能でない DDS ファイル
....+....1....+....2....+....3....+....4....+....5....+....6....+....7....+.... A* Physical file for DDS R REC FLD1 1A FLD2 1A ALWNULL FLD3 1A |
図 31. NULL-MAP を使用して COPY DDS から生成された ILE COBOL コード
*DDS Generated 05 REC-NM 06 FILLER PIC X VALUE ZERO. 06 FLD2-NF PIC 1 VALUE B"0". 06 FILLER PIC X VALUE ZERO. |
ヌル・マップ・フィールドに 1 または 0 以外の値を入れることは可能です。 たとえば、SQL がヌル・マップに値 2 を入れて、そのフィールドに 0 除算の結果が入っていることを示すことは可能です。
ヌル・マップで 0 または 1 以外の値を分かるように するには、COPY DDS ステートメントに NULL-MAP-ALPHANUM を指定する必要があります。
NULL-MAP-ALPHANUM は、ヌル・マップとの間でやり取りされる値の範囲を、0 または 1 以外の値を含むよう拡張します。 ヌル・マップ・フィールド内で、このフィールドがヌルであることを示す値は 1 だけです。 ヌル・マップでやり取りできる 0 または 1 以外の値についての詳細 は、Web サイト http://www.ibm.com/eserver/iseries/infocenter に ある、iSeries Information Center の「データベースおよびファイル・システム」カテゴリーの中 の『DB2 Universal Database for AS/400』セクションを参照してください。
表 38 および 表 39 には、ゾーン、パッ ク、および文字の DDS フィールドに許可された DATFMT パラメーター、 および CVTOPT(*CVTTODATE) 変換パラメーターが指定されている場合に COPY DDS から 生成される DATFMT パラメーターと同等の ILE COBOL の形式がリストされています。
表 38 には、i5/OS DDS 日付データ・タイプと、それと同等の ILE COBOL
用の形式がリストされています。表 38 は、文字フィールドおよびゾーン・フィールドで、USAGE DISPLAY
を前提とします。
表 38. DDS 日付データ・タイプおよびそれらと等価の ILE COBOL の形式
i5/OS 形式 | COBOL が生成する形式 | 内容 | 形式 | 有効な 分離文字 | 長さ |
---|---|---|---|---|---|
*MDY | %m/%d/%y | 月 / 日 / 年 | mm/dd/yy | /-.,& | 8 |
*DMY | %d/%m/%y | 日 / 月 / 年 | dd/mm/yy | /-.,& | 8 |
*YMD | %y/%m/%d | 年 / 月 / 日 | yy/mm/dd | /-.,& | 8 |
*JUL | %y/%j | ユリウス | yy/ddd | /-.,& | 6 |
*ISO | @Y-%m-%d | ISO (国際標準化機構) | yyyy-mm-dd | - | 10 |
*USA | %m/%d/@Y | IBM USA 標準規格 | mm/dd/yyyy | / | 10 |
*EUR | %d.%m.@Y | IBM 欧州標準規格 | dd.mm.yyyy | . | 10 |
*JIS | @Y-%m-%d | JIS (日本工業規格) 西暦 | yyyy-mm-dd | - | 10 |
表 11 には、i5/OS DDS 時刻データ・タイプと、それと 同等の ILE COBOL 用の形式がリストされています。 表 39 は、パック 10 進数フィールド用で、USAGE PACKED-DECIMAL が生成されます。
表 39. DDS 時刻データ・タイプおよびそれらと等価の ILE COBOL の形式
i5/OS 形式 | COBOL が生成する形式 | 内容 | 形式 | 有効な 分離文字 | 長さ |
---|---|---|---|---|---|
*HMS | %H:%M:%S | 時 : 分 : 秒 | hh:mm:ss | :.,& | 8 |
*ISO | %H.%M.%S | ISO (国際標準化機構) | hh.mm.ss | . | 8 |
*USA | %I:%M @p | IBM USA 標準規格。AM および PM は、大文字小文字を任意に混合させることができます。 | hh:mm AM または hh:mm PM | : | 8 |
*EUR | %H.%M.%S | IBM 欧州標準規格 | hh.mm.ss | . | 8 |
*JIS | %H:%M:%S | JIS (日本工業規格) 西暦 | hh:mm:ss | : | 8 |
たとえば、ファイル CUSTMASTER に 2 つの形式 CUSTADR と CUSTDETL が含まれているとすると、 次の COPY ステートメントを指定できます。
SELECT FILE-X ASSIGN TO DATABASE-CUSTMASTER. . . . FD FILE-X LABEL RECORDS ARE STANDARD. 01 FILE-X-RECS. COPY DDS-ALL-FORMATS OF QGPL-CUSTMASTER. (See Note 1.) . . . WORKING-STORAGE SECTION. 01 ADR-REC. COPY DDS-CUSTADR OF CUSTMASTER. (See Note 2.) 01 DETAIL-REC. COPY DDS-CUSTDETL OF CUSTMASTER. (See Note 2.)
注:
このセクションでは、COPY ステートメントによって生成される、以下のデータ構造について説明します。
ソース・プログラムのリストでは、各形式の先頭にコメント・テーブルが生成されます。
これらのコメントは、プログラムのコンパイル中に使用されたファイルの詳細を示します。
ファイルにレコード・キーがある場合には、DDS
でキーが定義されている方法を示すコメントも生成されます。
以下に、テーブルに入れられる可能性のあるレコード・キー記入項目と、テーブルのヘッディングを示します。
ヘッディング | 可能な記入項目 |
---|---|
NUMBER NAME RETRIEVAL ALTSEQ |
キー・フィールド番号 キー・フィールド名 ASCENDING、DESCENDING NO、YES |
複数の形式の生成に備えて再定義が必要とされる場合、 次のようにグループ・レベルの名前が生成されます。
05 file-name-RECORD PIC X(size of largest record).
各形式に対してグループ・レベルの名前は次のように割り当てられます。
05 format-name-I
05 format-name-O
05 format-name
フィールド名、PICTURE 定義、および数字の USAGE 文節は、内部 DDS 形式のフィールド名 (または、DD オプションの場合は別名) およびデータ・タイプ表現から直接に導出されます。 フィールド名および PICTURE 定義は次のように構成されます。 06 フィールド名 PIC (以下の表の注 1 参照)
DDS |
COBOL データ部 n = フィールドの全長 (DDS の桁 30 〜 34) m= 小数部の桁数 (DDS の桁 36 と 37) | ||
データ・タイプ (桁 35) | 形式 | DDS の桁 36 と 37 がブランクである場合 | DDS の桁 36 と 37 がブランクでない場合 |
物理ファイル、論理ファイル、プリンター・ファイ ル、および通信ファイル | |||
(ブランク) P S B F
|
デフォルト パック 10 進数5 ゾーン 10 進数/符号付き数字4 2 進数 浮動小数点1 単精度 倍精度文字4 16 進データ 日付2 時刻2 タイム・スタンプ2 DBCS 択一データ DBCS 専用データ DBCS 混用データ DBCS グラフィック・データ UCS2 グラフィック・データ |
PIC X(n)3 PIC S9(n) COMP-3 PIC S9 PIC S9(n) COMP-4 PIC 9(5) COMP-4 または COMP-1 PIC 9(10) COMP-4 または COMP-2 PIC X(n)3 PIC X(n) PIC X(n) または FORMAT DATE PIC X(n) または FORMAT TIME PIC X(n) または FORMAT TIMESTAMP PIC X(n) PIC X(n) PIC X(n) PIC X(2n) または PIC G(n)3 -- PIC N(2n) |
PIC S9(n-m)V9(m) PIC S9(n-m)V9(m) COMP-3 PIC S9(n-m)V9(m) PIC S9(n-m)V9(m) COMP-4 PIC 9(5) COMP-4 または COMP-1 PIC 9(10) COMP-4 または COMP-2 |
ディスプレイ・ファイル | |||
(ブランク) X N Y I W A D F
|
デフォルト 英字だけ 数字シフト 数字だけ キーボード入力禁止 カタカナ 英数字シフト 数字だけ 浮動小数点1 単精度 倍精度数字専用の文字 日付2 時刻2 タイム・スタンプ2 符号付き数字シフト DBCS 択一 DBCS 専用 DBCS 混用 DBCS グラフィック UCS2 グラフィック |
PIC X(n) PIC X(n) PIC X(n)-- PIC X(n) PIC X(n) PIC X(n) PIC X(n) PIC 9(5) COMP-4 または COMP-1 PIC 9(10) COMP-4 または COMP-2 PIC X(n) PIC X(n) または FORMAT DATE PIC X(n) または FORMAT TIME PIC X(n) または FORMAT TIMESTAMP -- PIC X(n) PIC X(n) PIC X(n) PIC X(2n) または PIC G(n) -- PIC N(2n) |
PIC S9(n-m)V9(m) -- PIC S9(n-m)V9(m) PIC S9(n-m)V9(m) PIC S9(n-m)V9(m) -- -- PIC S9(n) PIC 9(5) COMP-4 または COMP-1 PIC 9(10) COMP-4 または COMP-2 -- -- -- -- PIC S9(n-m)V9(m) -- -- -- -- |
注:
|
標識が要求され、形式の中に存在する場合には、構造の先頭に追加のグループ名 (06 レベル) が生成され、 その後に該当する個々の標識用の記入項目 (07 レベル) が続きます。
06 format-name-(I or O)-INDIC. 07 INxx PIC 1 INDIC xx.
ここで、xx は標識番号です。
たとえば、次のとおりです。
06 SAMPLE1-I-INDIC. 07 IN01 PIC 1 INDIC 01. 07 IN04 PIC 1 INDIC 04. 07 IN05 PIC 1 INDIC 05. 07 IN07 PIC 1 INDIC 07. 06 FLD1 PIC ... . 06 FLD2 PIC ... .
関連情報
INDICATOR 属性は、標識用にデータ記述記入項目が生成されるかどうかを指定します。
INDICATOR 属性を指定すると、標識用にデータ記述記入項目が生成されますが、 データ・フィールド用には生成されません。
次のように 05 グループ・レベル記入項目が生成されます。
COPY DDS- 形式名 -INDIC
上記によって、以下が生成されます。
05 形式名 -I (または -0)
COPY DDS-ALL-FORMATS-INDIC
上記によって、以下が生成されます。
05 file-name-RECORD.
生成されるデータ記述記入項目は、COPY ステートメントの中でどの用途属性 (I、O、または I-O) が指定または想定されるかによって決まります。
個々の標識記述は 標識の構造の説明に従って生成されます。
INDICATOR 属性が指定されない場合は、標識用にデータ記述記入項目が生成されるかどうかは、 ファイルの作成時に DDS 内でキーワード INDARA が指定されたかどうかによって決まります。
フィールド記述がすべて同一であり、暗黙または明示的に INPUT または OUTPUT フィールドを要求した場合、 生成されるフィールド記述は一組だけです。 このタイプの記述には、「I-O FORMAT: 形式名」というコメント行が付けられます。 レコード形式名には、-I と -O のどちらも付けられません。
5722WDS V5R4M0 060210 LN IBM ILE COBOL TESTLIB/STRTEXTD I-SERIES1 06/02/15 11:27:50 ページ 2 ソ ー ス STMT PL SEQNBR -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN S コピー名 変更日付 1 000100 IDENTIFICATION DIVISION. 2 000200 PROGRAM-ID. STRTEXTD. 000300 3 000400 ENVIRONMENT DIVISION. 4 000500 CONFIGURATION SECTION. 5 000600 SOURCE-COMPUTER. IBM-ISERIES. 02/02/21 6 000700 OBJECT-COMPUTER. IBM-ISERIES. 02/02/21 7 000800 INPUT-OUTPUT SECTION. 02/02/21 8 000900 FILE-CONTROL. 9 001000 SELECT FILE-1 ASSIGN TO DATABASE-NAMES 11 001100 ACCESS IS DYNAMIC RECORD KEY IS EXTERNALLY-DESCRIBED-KEY 13 001200 ORGANIZATION IS INDEXED. 001300 14 001400 DATA DIVISION. 15 001500 FILE SECTION. 16 001600 FD FILE-1. 17 001700 01 RECORD-DESCRIPTION. 02/02/21 001800 COPY DDS-RDE OF NAMES. 02/02/21 +000001* I-O FORMAT:RDE FROM FILE NAMES OF LIBRARY TESTLIB RDE +000002* RECORD DESCRIPTION RDE +000003*THE KEY DEFINITIONS FOR RECORD FORMAT RDE RDE +000004* NUMBER NAME RETRIEVAL ALTSEQ RDE +000005* 0001 LNAME ASCENDING NO RDE +000006* 0002 FNAME ASCENDING NO RDE +000007* 0003 MINAME ASCENDING NO RDE +000008* 0004 MNAME ASCENDING NO RDE 18 +000009 05 RDE. RDE 19 +000010 06 FNAME PIC X(20). RDE +000011* FIRST NAME RDE 20 +000012 06 MINAME PIC X(1). RDE +000013* MIDDLE INITIAL NAME RDE 21 +000014 06 MNAME PIC X(19). RDE +000015* REST OF MIDDLE NAME RDE 22 +000016 06 LNAME PIC X(20). RDE +000017* LAST NAME RDE 23 +000018 06 PHONE PIC S9(10) COMP-3. RDE +000019* PHONE NUMBER RDE 24 +000020 06 DATA-DDS PIC X(40). RDE +000021* REST OF DATA RDE 25 001900 66 MIDDLE-NAME RENAMES MINAME THRU MNAME. 002000 26 002100 PROCEDURE DIVISION. 002200 MAIN-PROGRAM SECTION. 002300 MAINLINE. 27 002400 OPEN INPUT FILE-1. 002500* . 002600* . 002700* . |
このセクションでは、COPY ステートメントの形式 2 でのフィールドおよび形式の使用に関する次の情報について説明します。
ALL-FORMATS または -I-O 句に対して生成される可能性がある REDEFINES 文節には、特別な注意を払う必要があります。 すべての形式が同一の区域 (一般にバッファー域) で再定義されるため、複数のフィールド名が同一のストレージを記述する可能性があり、 形式の区域全体が各出力操作に先立って再初期設定されない場合には、予測できない結果が生じる可能性があります。
MOVE CORRESPONDING ステートメントで指定されたデータ項目に従属するデータ項目は、 それが REDEFINES 文節を含むか、または再定義項目に従属する場合には一致せず、移動されません。
再初期設定を回避するには、-I および -O 接尾部を指定した複数の形式 2 の COPY ステートメント (DDS または DD) を使用して、 作業用ストレージ・セクションまたはローカル・ストレージ・セクションで各形式または形式タイプ (入力または出力) 用の別々のストレージ域を作成できます。 これらのレコード形式を READ INTO および WRITE FROM ステートメントで使用できます。 たとえば、次のとおりです。
FD ORDER-ENTRY-SCREEN . . . 01 ORDER-ENTRY-RECORD . . . . . . WORKING-STORAGE SECTION. 01 ORDSFL-I-FORMAT. COPY DDS-ORDSFL-I OF DOESCR. 01 ORDSFL-O-FORMAT. COPY DDS-ORDSFL-O OF DOESCR. . . . PROCEDURE DIVISION. . . . READ SUBFILE ORDER-ENTRY-SCREEN NEXT MODIFIED RECORD INTO ORDSFL-I-FORMAT FORMAT IS "ORDSFL" AT END SET NO-MODIFIED-SUBFILE-RCD TO TRUE. . . . MOVE CORR ORDSFL-I TO ORDSFL-O. REWRITE SUBFILE ORDER-ENTRY-RECORD FROM ORDSFL-O-FORMAT FORMAT IS "ORDSFL" . . . . . .
生成されたフィールド名が COBOL 予約語の場合、接尾部 -DDS がそのフィールド名に付け加えられます。 生成されたフィールド名が物理ファイルから取られた (つまり、 そのフィールドが CONCAT または RENAME キーワードの引数である) 場合にも、接尾部が付け加えられます。 詳細は、「WebSphere Development Studio: ILE COBOL プログラマーの手引き」を参照してください。
EXTERNALLY-DESCRIBED-KEY が使用されているときには、REPLACING 句を使用してキー・フィールド名または形式名を変更することはできません。
ファイルは、内部浮動小数点フィールドを含むことができます。 CVTOPT パラメーターの *NOFLOAT 値 (デフォルト) が有効な場合には、浮動小数点フィールドは、BINARY の USAGE を持つ FILLER 項目として取り入れられます。 *FLOAT が指定された場合には、フィールドは、 与えられたそれらの DDS 名を COMP-1 (単精度浮動小数点) または COMP-2 (倍精度浮動小数点) の USAGE で使用することによって、取り入れられます。
浮動小数点キー・フィールドが認められています。 KEY が内部浮動小数点数である場合には、 キー値の順序は数字の順序になります。 KEY が外部浮動小数点数である場合には、キーは英数字であり、レコードの順序は、 使用される照合順序によって異なります。
このセクションでは、日付、時刻、およびタイム・スタンプのフィールドの以下のクラスについて説明します。
また、ここでは、DDS を使用して日時クラスの日付、時刻、タイム・スタンプのフィールドを定義する方法の例も示しています。
日時フィールドには、日時クラスの日付、時刻、およびタイム・スタンプ・データ項目が入っており、DATFMT キーワードを指定するゾーン、パック、 および文字 DDS フィールドの使用が許可されています。 日付データ・タイプは、ユーザー・プログラムに固定長文字フィールドとして取り入れられる日付、時刻、およびタイム・スタンプのフィールドと同じではありません。 ILE COBOL では、日付データ・タイプは USAGE DISPLAY または USAGE PACKED-DECIMAL データ項目に変換され、 日付、時刻、およびタイム・スタンプ・フィールドは英数字データ項目に変換されます (英数字のクラスに説明されています)。
日付データ・タイプは、*CVTTODATE 変換パラメーター・オプション (CVTOPT) が指定されている場合には、 それと同等の ILE COBOL 用の形式に COPY DDS から変換されます。
許可された DATFMT パラメーター、および CVTOPT(*CVTTODATE) 変換パラメーターが指定されている場合に、 このパラメーター用に COPY DDS から生成されるこれと同等の ILE COBOL の形式については、「WebSphere Development Studio: ILE COBOL プログラマーの手引き」を参照してください。
英数字の日付、時刻、およびタイム・スタンプ・フィールドをプログラムに取り入れることができるのは、CRTCBLMOD または CRTBNDCBL コマンドの CVTOPT(*DATETIME) オプション、 または PROCESS ステートメントの DATETIME オプションを指定する場合だけです。 *DATETIME が指定されていない場合は、日付、時刻、およびタイム・スタンプ・フィールドは無視され、 ユーザーの ILE COBOL プログラムで FILLER フィールドとして宣言されます。
日付、時刻、およびタイム・スタンプ・フィールドは、 固定長文字フィールドとして取り入れられます。 プログラムでは、それらのフィールドに対して有効な文字操作を実行できます。
日付、時刻、およびタイム・スタンプ・データ・タイプには、それぞれ固有の形式があります。
日付、時刻、またはタイム・スタンプ情報を含んでいるフィールドがプログラムによって更新され、 その更新された情報がデータベースに戻される場合、フィールドの形式は、 そのフィールドがデータベースから取り出されたときの形式と全く同じでなければなりません。 同じ形式を使用しなければ、エラーが発生します。
また、日付、時刻、またはタイム・スタンプ・フィールドに適切な値を移動する前にレコードの WRITE を試みると、WRITE 操作が失敗し、 ファイル状況は 90 となります。
各データ・タイプの有効な形式については、Web サイト http://www.ibm.com/eserver/iseries/infocenter にある、iSeries Information Center の「データベースおよびファイル・システム」カテゴリーの中の『DB2 Universal Database for iSeries』のセクション を参照してください。
以下の例では、DDS で日付、時刻、およびタイム・スタンプ・フィールドの定義の方法について示しています。
図 33. 日付、時刻、およびタイム・スタンプ・フィールドが定義された DDS ファイル
....+....1....+....2....+....3....+....4....+....5....+....6....+....7....+.... A LOGICAL FILE LF1 FOR DATE, TIME, AND TIMESTAMP EXAMPLES 00010A 00020A R RECORD1 00030A DATFLD1 L DATFMT(*JUL) 00040A ALIAS(A_DATE_JUL) 00050A DATFLD2 L DATFMT(*EUR) 00060A ALIAS(A_DATE_EUR) 00070A DATFLD3 L DATFMT(*DMY) DATSEP('-') 00080A ALIAS(A_DATE_DMY) 00090A DATFLD4 L DATSEP(' ') 00100A TIMFLD1 T TIMFMT(*ISO) 00110A ALIAS(A_DATE_ISO) 00120A TIMFLD2 T TIMFMT(*USA) 00130A ALIAS(A_DATE_USA) 00140A TIMFLD3 T TIMSEP(' ') 00150A TIMFLD4 T TIMSEP('.') 00160A TSFLD1 Z DFT('1998-02-27-08.15.22.000000') A 現在の日付が 1990 年 6 月 21 日で、現行システムの日付形式値が MDY で、 現在の日付が 1990 年 6 月 21 日で、現行システムの日付形式値が MDY で、 現在の時刻が午後 2 時で、システム時刻形式が hhmmss で、 現在の時刻が午後 2 時で、システム時刻形式が hhmmss で、 タイム・スタンプ・フィールドを定義する場合は、以下の形式でデフォルト値を指定する必要があります。 DFT('YYYY-MM-DD-HH.MM.SS.UUUUUU') DFT キーワードが指定されない場合は、デフォルト値は現在の時刻です。 |
CRTCBLMOD または CRTBNDCBL コマンドの CVTOPT(*VARCHAR) パラメーター、 または PROCESS ステートメントの VARCHAR オプションを指定する場合には、 プログラムに可変長フィールドを取り入れることができます。 外部記述ファイルから抽出する可変長フィールドは、プログラムの中で固定長グループ項目になります。
これらのフィールドについての詳細は、「WebSphere Development Studio: ILE COBOL プログラマーの手引き」を参照してください。
レコードをレコード域に明示的に移動する前に WRITE 操作を実行すると、 多くの場合、16 進値 40 (X'40') を持つブランクを書き込むことになります。 可変長フィールドの場合、これは、現行のフィールド長として X'4040' が使用されることを意味します。
X'4040' は 10 進値 16448 に変換され、おそらく、可変長フィールドに関して定義された最大の長さを上回ります。 このため、WRITE 操作または後続の CLOSE 操作は失敗し、ファイル状況は 90 となります。
レベル番号を含め、生成された COBOL ソースを置き換えるには、REPLACING 句を使用できます。 (詳細は REPLACING 句を参照してください。) ただし、以下の例外に注意する必要があります。
図 34 は、REPLACING オプションを指定しない、形式 2 の COPY ステートメントを説明しています。
図 34. REPLACING オプションを指定しない形式 2 の COPY ステートメント
5722WDS V5R4M0 060210 LN IBM ILE COBOL TESTLIB/STRTEXTD I-SERIES1 06/02/15 11:27:50 ページ 2 STMT PL SEQNBR -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN S コピー名 変更日付 11 000100 FD CUST-MASTER. 12 000200 01 CUSTOMER-RECORD. 000300* 000400* COPY DDS W I T H O U T REPLACING OPTION 000500* 13 000600 COPY DDS-CUSMST OF TESTLIB-CUSMSTP. +000001* I-O FORMAT:CUSMST FROM FILE CUSMSTP OF LIBRARY TESTLIB CUSMST +000002* ORDER HEADER RECORD CUSMST 14 +000003 05 CUSMST. CUSMST 15 +000004 06 CUST PIC X(5). CUSMST +000005* CUSTOMER NUMBER CUSMST 16 +000006 06 NAME PIC X(25). CUSMST +000007* CUSTOMER NAME CUSMST 17 +000008 06 ADDR PIC X(20). CUSMST +000009* CUSTOMER ADDRESS CUSMST 18 +000010 06 CITY PIC X(20). CUSMST +000011* CUSTOMER CITY CUSMST 19 +000012 06 STATE PIC X(2). CUSMST +000013* STATE CUSMST 20 +000014 06 ZIP PIC S9(5) COMP-3. CUSMST +000015* ZIP CODE CUSMST |
次の図は、REPLACING オプションを指定する、形式 2 の COPY ステートメントを示します。
図 35. REPLACING オプションを指定する形式 2 の COPY ステートメント
5722WDS V5R4M0 060210 LN IBM ILE COBOL TESTLIB/STRTEXTD I-SERIES1 06/02/15 11:27:50 ページ 2 STMT PL SEQNBR -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN S コピー名 変更日付 30 001000 FD CUST-MASTER. 31 001100 01 CUSTOMER-RECORD. 001200* 001300* COPY DDS W I T H REPLACING OPTION 001400* 32 001500 COPY DDS-CUSMST OF TESTLIB-CUSMSTP 33 001600 REPLACING NAME BY ADDR-LINE-1 34 001700 ADDR BY ADDR-LINE-2 35 001800 CITY BY ADDR-LINE-3. +000001* I-O FORMAT:CUSMST FROM FILE CUSMSTP OF LIBRARY TESTLIB CUSMST +000002* ORDER HEADER RECORD CUSMST 36 +000003 05 CUSMST. CUSMST 37 +000004 06 CUST PIC X(5). CUSMST +000005* CUSTOMER NUMBER CUSMST 38 +000006 06 ADDR-LINE-1 PIC X(25). CUSMST +000007* CUSTOMER NAME CUSMST 39 +000008 06 ADDR-LINE-2 PIC X(20). CUSMST +000009* CUSTOMER ADDRESS CUSMST 40 +000010 06 ADDR-LINE-3 PIC X(20). CUSMST +000011* CUSTOMER CITY CUSMST 41 +000012 06 STATE PIC X(2). CUSMST +000013* STATE CUSMST 42 +000014 06 ZIP PIC S9(5) COMP-3. CUSMST +000015* ZIP CODE CUSMST |
....+....1....+....2....+....3....+....4....+....5....+....6....+....7....+....8 A PHYSICAL FILE PF1 FOR KEY GENERATION EXAMPLES A A R PFRECORD A A MTH 2 A DAY 2 A YEAR 4 A ITEM 5 A A A K MTH A K DAY |
図 36 に示されている物理ファイルが、次の例の基礎になっています。 それぞれの例において、SELECT 文節中で EXTERNALLY-DESCRIBED-KEY を指定している論理ファイル (物理ファイルから得られる) を参照しています。
関連情報
図 37. CONCAT キーワードを使用したデータ記述仕様
....+....1....+....2....+....3....+....4....+....5....+....6....+....7....+....8 A LOGICAL FILE LF1 FOR CONCAT KEYWORD EXAMPLES A A R RECORD1 PFILE(PF1) A A DATE CONCAT(MTH DAY YEAR) A A K MTH A K DAY |
図 37 に示されている論理ファイルに対して COPY DDS は、 物理ファイルから得られるキーおよびキー名を生成します。
FD LF1 LABEL RECORDS ARE STANDARD. 01 LOG-RECORD. COPY DDS-ALL-FORMATS OF LF1. 05 LF1-RECORD PIC X(8). * I-O FORMAT:RECORD-1 FROM FILE LF1 OF LIBRARY COPYDDS * *THE KEY DEFINITIONS FOR RECORD FORMAT RECORD1 * NUMBER NAME RETRIEVAL TYPE ALTSEQ * 0001 MTH-DDS ASCENDING AN NO * KEY NAME ORIGINATES FROM PHYSICAL FILE * 0002 DAY-DDS-DDS ASCENDING AN NO * KEY NAME ORIGINATES FROM PHYSICAL FILE 05 RECORD1 REDEFINES LF1-RECORD. 06 DATE-DDS PIC X(8). 06 FILLER REDEFINES DATE-DDS. 07 MTH-DDS PIC X(2). 07 DAY-DDS-DDS PIC X(2). 07 FILLER PIC X(4). |
MTH は物理ファイルから得られるキーであり、DATE は ILE COBOL の予約語なので、COPY ステートメントは、フィールド名 MTH および DATE に接尾部 -DDS を追加します。 DAY は物理ファイルから得られるキーであり、また ILE COBOL の予約語でもあるので、COPY ステートメントは、フィールド名 DAY に接尾部 -DDS を 2 つ追加します。
COPY ステートメントをファイル・セクションから作業用ストレージ・セクション、 またはリンケージ・セクションへ移動する場合は、DATE-DDS に従属するフィールドが利用できなくなることに注意してください。
図 39. CONCAT キーワードを使用した例--作業用ストレージ・セクション
WORKING-STORAGE SECTION. 01 WRK-RECORD. COPY DDS-ALL-FORMATS OF LF1. 05 LF1-RECORD PIC X(8). * I-O FORMAT:RECORD-1 FROM FILE LF1 OF LIBRARY COPYDDS * 05 RECORD1 REDEFINES LF1-RECORD. 06 DATE-DDS PIC X(8). |
図 40. RENAMES キーワードを使用したデータ記述仕様
....+....1....+....2....+....3....+....4....+....5....+....6....+....7....+....8 A LOGICAL FILE LF2 FOR RENAME KEYWORD EXAMPLES A A R RECORD2 PFILE(PF1) A A MONTH RENAME(MTH) A A K MTH |
図 36 に示されている論理ファイルに対して COPY DDS は、 物理ファイルから得られるキーおよびキー名を生成します。
* FD LF2 LABEL RECORDS ARE STANDARD. 01 LOG-RECORD. COPY DDS-ALL-FORMATS OF LF2. 05 LF2-RECORD PIC X(2). * I-O FORMAT:RECORD2 FROM FILE LF2 OF LIBRARY COPYDDS * *THE KEY DEFINITIONS FOR RECORD FORMAT RECORD2 * NUMBER NAME RETRIEVAL TYPE ALTSEQ * 0001 MTH-DDS ASCENDING AN NO * KEY NAME ORIGINATES FROM PHYSICAL FILE 05 RECORD2 REDEFINES LF2-RECORD. 06 MONTH PIC X(2). 06 MTH-DDS REDEFINES MONTH PIC X(2). |
MTH は物理ファイルから得られるキーなので、COPY ステートメントは、 フィールド名 MTH に接尾部 -DDS を追加します。
....+....1....+....2....+....3....+....4....+....5....+....6....+....7....+....8 A LOGICAL FILE LF3 FOR SST KEYWORD EXAMPLES A A R RECORD3 PFILE(PF1) A A YY I SST(YEAR 2 2) A A K YY |
図 36 に示されている論理ファイルに対して COPY DDS は、次の仕様を生成します。
* FD LF3 LABEL RECORDS ARE STANDARD. 01 LOG-RECORD. COPY DDS-ALL-FORMATS OF LF3. 05 LF3-RECORD PIC X(2). * I-O FORMAT:RECORD3 FROM FILE LF3 OF LIBRARY COPYDDS * *THE KEY DEFINITIONS FOR RECORD FORMAT RECORD3 * NUMBER NAME RETRIEVAL TYPE ALTSEQ * 0001 YY ASCENDING AN NO 05 RECORD3 REDEFINES LF3-RECORD. 06 YY PIC X(2). |
YY は物理ファイルから得られるキーではなく、 また ILE COBOL の予約語でもないため、COPY ステートメントは、フィールド名 YY に接尾部を追加しません。
+------------------------------End of IBM 拡張-------------------------------+