再定義は、フィールドのフォーマットを変更したり、単一フィールドを複数のセグメントに分割したりするために使用します。
このドキュメントでは、次のトピックについて説明します。
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