再定義は、フィールドのフォーマットを変更したり、単一フィールドを複数のセグメントに分割したりするために使用します。
このドキュメントでは、次のトピックについて説明します。
DEFINE DATA
ステートメントの REDEFINE
オプションは、単一のフィールド(ユーザー定義変数またはデータベースフィールド)を 1 つ以上の新しいフィールドとして再定義するために使用できます。 グループも再定義できます。
重要:
ダイナミック変数は再定義には使用できません。
REDEFINE
オプションは、フォーマットに関係なく、フィールドのバイト位置を左から右に再定義します。 バイト位置は、元のフィールドと再定義されたフィールド(複数可)の間で一致している必要があります。
再定義は元のフィールド定義の直後に指定する必要があります。
以下の例では、データベースフィールド BIRTH
を、3 つの新しいユーザー定義変数として再定義しています。
DEFINE DATA LOCAL 01 EMPLOY-VIEW VIEW OF STAFFDDM 02 NAME 02 BIRTH 02 REDEFINE BIRTH 03 #BIRTH-YEAR (N4) 03 #BIRTH-MONTH (N2) 03 #BIRTH-DAY (N2) END-DEFINE ...
以下の例では、グループ #VAR2
(フォーマット N および P の 2 つのユーザー定義変数で構成)を、フォーマット A の 1 つの変数として再定義しています。
DEFINE DATA LOCAL 01 #VAR1 (A15) 01 #VAR2 02 #VAR2A (N4.1) 02 #VAR2B (P6.2) 01 REDEFINE #VAR2 02 #VAR2RD (A10) END-DEFINE ...
FILLER nX
表記を使用して、再定義するフィールドに n バイトの充填バイト(使用しないセグメント)を定義できます。 末尾の充填バイトの定義は任意です。
以下の例では、ユーザー定義変数 #FIELD
を 3 つの新しいユーザー定義変数(それぞれフォーマット/長さが A2)として再定義しています。 FILLER
表記によって、元のフィールドの 3~4、および 7~10 バイト目を使用しないことが示されています。
DEFINE DATA LOCAL 1 #FIELD (A12) 1 REDEFINE #FIELD 2 #RFIELD1 (A2) 2 FILLER 2X 2 #RFIELD2 (A2) 2 FILLER 4X 2 #RFIELD3 (A2) END-DEFINE ...
以下のプログラムは、再定義の使用方法を示しています。
** Example 'DDATAX01': DEFINE DATA ************************************************************************ DEFINE DATA LOCAL 01 VIEWEMP VIEW OF EMPLOYEES 02 NAME 02 FIRST-NAME 02 SALARY (1:1) * 01 #PAY (N9) 01 REDEFINE #PAY 02 FILLER 3X 02 #USD (N3) 02 #OOO (N3) END-DEFINE * READ (3) VIEWEMP BY NAME STARTING FROM 'JONES' MOVE SALARY (1) TO #PAY DISPLAY NAME FIRST-NAME #PAY #USD #OOO END-READ END
プログラム DDATAX01 の出力:
#PAY
およびその再定義でできたフィールドがどのように表示されるかに注意してください。
Page 1 04-11-11 14:15:54 NAME FIRST-NAME #PAY #USD #OOO -------------------- -------------------- ---------- ---- ---- JONES VIRGINIA 46000 46 0 JONES MARSHA 50000 50 0 JONES ROBERT 31000 31 0