ILE COBOL 解説書

+----------------------------------IBM 拡張----------------------------------+

COPY ステートメント - 形式 2 - DDS 変換

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-'
 
 

注:

  1. ファイル名を修飾する場合は、ライブラリー名とファイル名の間にハイフンが必要です。

関連情報

形式 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 オプション

DD オプションまたは ALIAS オプションは、別名 (代替名) を参照するために使用されます。 DDS 内で別名を指定すると、最大 30 文字のデータ名を COBOL プログラムに組み込むことができます。

DD オプションまたは ALIAS オプションが使用されると、存在する別名が対応する DDS フィールド名を置き換えます。 別名の中の下線はすべて、置き換えが行われる前にハイフンに変換されます。

DDR オプション

DDR オプションまたは SUBSTITUTE オプションは、DD オプションによって行われることをすべて行います。 さらに、フィールド名 (あるいは、該当する場合は別名) 内の無効な COBOL 文字である @、#、¥、および _ を対応する有効な COBOL 文字 A、N、D、および - に置き換えます。 また、フィールド名の末尾から下線を除去します。

DDS オプション

DDS オプションは、指定した DDS 形式の内部 DDS のフィールド名をコピーします。

DDSR オプション

DDSR オプションは、DDS オプションによって行われることをすべて行います。 さらに、無効な COBOL 文字である @、#、¥、および _ をそれぞれ有効な COBOL 文字 A、N、D、および - に置き換えて、指定した DDS 形式で 内部 DDS のフィールド名をコピーします。 また、フィールド名の末尾から下線を除去します。

形式名および ALL-FORMATS オプション

形式名は、ILE COBOL データ記述記入項目に変換される DDS レコード形式定義の名前です。 形式名は、ILE COBOL データ名の形成に関する規則に従わなければなりません。

ALL-FORMATS オプションは、データ名の規則に従わない名前を含む、ファイルに定義されたすべての形式を変換します。 そのような形式名を有効なデータ名に変更するには、REPLACING 句を使用しなければなりません。 ただし、REPLACING 句は、EXTERNALLY-DESCRIBED-KEY によって定義された索引付きファイルの FD 記入項目内の形式名を変更する際には使用できません。 このキーを RECORD KEY 文節内でデータ名を使用して定義できない場合は、そのファイルの DDS の指定内の形式名を変更する必要があります。

注:
このコンテキストでは、コンパイラーは ALL-FORMATS と同様に ALL-FORMAT を受け入れます。

VLR オプション

VLR オプションは変数レコード・ファイルとともに使用する必要があります。 このオプションは、可変長フィールドからのコピーを指定します。 これは、CRTCBLMOD と CRTBNDCBL コマンドの CVTOPT (*VARCHAR) オプションを指定変更します。

PREFIX オプション

PREFIX オプションは、それぞれのフィールド名の前に挿入される接頭部 (リテラル) を指定するのに使用できます。 これを使用すると、フィールドの内容または用途を識別する (つまり、記述する) のに役立ちます。 リテラルは、一組のアポストロフィまたは一組の引用符の中に入れることができます。 リテラルの最大長は 15 文字です。

I-O

-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 句 - 形式
 
>>-SUBSTITUTE--+-----------------------------+-----------------><
               '-ALL--+--------------------+-'
                      '-EXCEPT--リテラル-2-'
 
 

SUBSTITUTE 句を使用することによって、プログラムで DDS の使用が可能となり、 下線文字のような特定の文字を保存しておくことができます。 下線文字は、標準の ILE COBOL 文字ではありませんが、ロケール・カテゴリーを指定するのに必要です。 下線文字を、たとえばコピーされた DDS に保存するためには、SUBSTITUTE 句を以下のように使用します。

      ...SUBSTITUTE ALL EXCEPT '_'.
リテラル -2
1 バイトの非数字リテラルでなければなりません。 リテラル -2 で指定された文字は置き換えることはできません。

REPLACING 句

REPLACING 句は REPLACING 句で説明されています。

関連情報

DDS ファイルでのヌル可能フィールドの使用

DDS でフィールドが ALWNULL として定義される場合は、COPY DDS ステ ートメントはそのフィールドをコメント付きでヌル可能と識別します。 たとえば、下記の 2 つの図には、ヌル可能フィールドの入っている DDS ファイル、 およびこのフィールドが ILE COBOL プログラムの FILE-SECTION にコピーされるときにこれに対して作成される結果のコメントが示されています。

図 28. ヌル可能フィールドを示す DDS


....+....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』セクションを参照してください。

日付データ・タイプを指定した COPY DDS の使用

表 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

一般的な注意事項

 
    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.)

注:

  1. この COPY ステートメントはすべての形式に対して記憶域を 1 つだけ生成します。
  2. これらの COPY ステートメントは別々のストレージ域を生成します。

生成されるデータ構造

このセクションでは、COPY ステートメントによって生成される、以下のデータ構造について説明します。

形式 (レコード) レベルの構造

ソース・プログラムのリストでは、各形式の先頭にコメント・テーブルが生成されます。 これらのコメントは、プログラムのコンパイル中に使用されたファイルの詳細を示します。 ファイルにレコード・キーがある場合には、DDS でキーが定義されている方法を示すコメントも生成されます。 以下に、テーブルに入れられる可能性のあるレコード・キー記入項目と、テーブルのヘッディングを示します。

ヘッディング 可能な記入項目
NUMBER
NAME
RETRIEVAL
ALTSEQ
キー・フィールド番号
キー・フィールド名
ASCENDING、DESCENDING
NO、YES

複数の形式の生成に備えて再定義が必要とされる場合、 次のようにグループ・レベルの名前が生成されます。

     05 file-name-RECORD
        PIC X(size of largest record).

各形式に対してグループ・レベルの名前は次のように割り当てられます。

データ・フィールドの構造

フィールド名、PICTURE 定義、および数字の USAGE 文節は、内部 DDS 形式のフィールド名 (または、DD オプションの場合は別名) およびデータ・タイプ表現から直接に導出されます。 フィールド名および PICTURE 定義は次のように構成されます。   06 フィールド名 PIC  (以下の表の注 1 参照)

注:
適切な COBOL 定義については表 40 を参照してください。

表 40. データ・フィールドの構造

DDS COBOL データ部
n = フィールドの全長 (DDS の桁 30 〜 34)
m= 小数部の桁数 (DDS の桁 36 と 37)

データ・タイプ (桁 35) 形式 DDS の桁 36 と 37 がブランクである場合 DDS の桁 36 と 37 がブランクでない場合
物理ファイル、論理ファイル、プリンター・ファイ ル、および通信ファイル
 
(ブランク)
P
S
B
F
 



A
 
H
L
T
Z
E
J
O
G

デフォルト
 
パック 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
 



M
 
L
T
Z
S
E
J
O
G

デフォルト
英字だけ
数字シフト
数字だけ
キーボード入力禁止
カタカナ
英数字シフト
数字だけ
浮動小数点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)
--
--
--
--

注:

  1. CVTOPT パラメーターの *NOFLOAT 値が有効な場合には、 浮動小数点フィールドは、BINARY の USAGE を持つ FILLER 項目として取り入れられます。 *FLOAT が指定された場合には、フィールドは、 与えられたそれらの DDS 名を COMP-1 (単精度浮動小数点) または COMP-2 (倍精度浮動小数点) の USAGE で使用することによって、取り入れられます。 浮動小数点フィールド を参照してください。

  2. デフォルトで、FILLER 項目は英数字として宣言されます。 CRTBNDCBL または CRTCBLMOD コマンドの CVTOPT パラメーター上で *DATE、*TIME、 または *TIMESTAMP を指定することにより、COBOL に日付、時刻、 およびタイム・スタンプのフィールドを日時データ・タイプとして扱うようにすることもできます。 日付、時刻、およびタイム・スタンプのフィールドを参照してください。

  3. DDS では、フィールドが VARLEN の属性を持つ場合、結果はフィールドの先頭に 2 バイト追加されたものになります。

  4. DDS 文字または DATFMT キーワードを指定したゾーン・データ・タイプが使用された場合には、CRTBNDCBL または CRTCBLMOD コマンドで CVTOPT パラメーターに *CVTTODATE 値が指定されると、ILE COBOL はこれを日付フィールドとして扱います。

  5. DATFMT キーワードを指定した DDS パック・データ・タイプが使用された場合には、CRTBNDCBL または CRTCBLMOD コマンドで CVTOPT パラメーターに *CVTTODATE 値が指定されると、ILE COBOL はこれを日付フィールドとして扱います。

  6. DDS では、データ・タイプが G で、属性が CCSID(13488) であるフィールドは、UCS-2 グラフィック・データ・タイプです。 UCS-2 グラフィック・データ・タイプを COBOL NATIONAL データ・タイプとして取り入れるには、CRTBNDCBL または CRTCBLMOD コマンドの CVTOPT パラメーターに *PICNGRAPHIC を指定してください。 詳細は、「WebSphere Development Studio: ILE COBOL プログラマーの手引き」を参照してください。

標識の構造

標識が要求され、形式の中に存在する場合には、構造の先頭に追加のグループ名 (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  ...  .

関連情報

形式 2 の COPY ステートメントの INDICATOR 属性

INDICATOR 属性は、標識用にデータ記述記入項目が生成されるかどうかを指定します。

INDICATOR 属性を指定すると、標識用にデータ記述記入項目が生成されますが、 データ・フィールド用には生成されません。

次のように 05 グループ・レベル記入項目が生成されます。

生成されるデータ記述記入項目は、COPY ステートメントの中でどの用途属性 (I、O、または I-O) が指定または想定されるかによって決まります。

個々の標識記述は 標識の構造の説明に従って生成されます。

INDICATOR 属性が指定されない場合は、標識用にデータ記述記入項目が生成されるかどうかは、 ファイルの作成時に DDS 内でキーワード INDARA が指定されたかどうかによって決まります。

I-O 形式の生成

フィールド記述がすべて同一であり、暗黙または明示的に INPUT または OUTPUT フィールドを要求した場合、 生成されるフィールド記述は一組だけです。 このタイプの記述には、「I-O FORMAT: 形式名」というコメント行が付けられます。 レコード形式名には、-I と -O のどちらも付けられません。

注:
データベース・ファイルの場合、データベース・ファイル内のフィールド記述はすべて同じであるため、必ずこのようになります。(図 32 を参照してください。)

図 32. 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" . . .
   .
   .
   .

注:
COPY ステートメントは、ファイル・セクション、作業用ストレージ・セクション、 およびローカル・ストレージ・セクションで使用できますが、得られる結果が全く同じ というわけではありません。詳細は キー生成の例を参照してください。

フィールドおよび形式名に関する追加の注意事項

生成されたフィールド名が 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 の例

以下の例では、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 で、
システム日付の分離文字値が '/' の場合は、DATFLD3 には 21-06-90
が入ります。 DATFLD4 には 06 21 90 が入ります。

現在の日付が 1990 年 6 月 21 日で、現行システムの日付形式値が MDY で、
現行システムの分離文字値が / の場合は、DATFLD1 には 90/172 が入ります (1990
年の 172 番目の日)。 DATFLD2 には 21.06.1990 が入ります。

現在の時刻が午後 2 時で、システム時刻形式が hhmmss で、
システム時刻分離文字 ':' の場合は、TIMFLD1 に
14.00.00 が入ります。 TIMFLD2 には 2:00 PM が入ります。

現在の時刻が午後 2 時で、システム時刻形式が hhmmss で、
システム時刻分離文字 ':' の場合は、TIMFLD3 に 14 00 00
が入ります。 TIMFLD4 には 14.00.00 が入ります。

タイム・スタンプ・フィールドを定義する場合は、以下の形式でデフォルト値を指定する必要があります。

    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 となります。

形式 2 の COPY ステートメントで REPLACING 句を使用する場合の考慮事項

レベル番号を含め、生成された 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

キー生成の例

図 36. 物理ファイルのデータ記述仕様


....+....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 を指定している論理ファイル (物理ファイルから得られる) を参照しています。

関連情報

CONCAT キーワードを使用した例

図 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 は、 物理ファイルから得られるキーおよびキー名を生成します。

図 38. CONCAT キーワードを使用した例


 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).

RENAME キーワードを使用した例

図 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 は、 物理ファイルから得られるキーおよびキー名を生成します。

図 41. RENAME キーワードを使用


    *
     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 を追加します。

SST キーワードを使用した例

図 42. SST キーワードを使用したデータ記述仕様


....+....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 は、次の仕様を生成します。

図 43. SST キーワードを使用


    *
     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 拡張-------------------------------+


[ ページのトップ | 前ページ | 次ページ | 目次 | 索引 ]