Die Redefinition dient dazu, das Format eines Feldes zu ändern oder ein einzelnes Feld in mehrere Teile aufzuteilen.
Dieser Abschnitt behandelt folgende Themen:
Mit der REDEFINE-Option
des DEFINE DATA-Statements kann
ein einzelnes Feld - entweder eine Benutzervariable oder ein Datenbankfeld - als ein neues
Feld oder mehrere neue Felder redefiniert werden. Eine Gruppe kann ebenfalls redefiniert
werden.
Wichtig
Dynamische Variablen sind bei einer Redefinition nicht zulässig.
Die REDEFINE-Option redefiniert die Byte-Positionen eines Feldes von links
nach rechts, unabhängig vom Format. Die Byte-Positionen des ursprünglichen Feldes und des
neudefinierten Feldes bzw. der neudefinierten Felder müssen einander entsprechen.
Eine Redefinition muss unmittelbar nach der Definition des ursprünglichen Feldes angegeben werden.
Im folgenden Beispiel wird das Datenbankfeld BIRTH als drei neue
Benutzervariablen redefiniert:
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
...
Im folgenden Beispiel wird die Gruppe #VAR2, die aus zwei Benutzervariablen
mit Format N bzw. P besteht, als eine neue Variable vom Format A redefiniert:
DEFINE DATA LOCAL 01 #VAR1 (A15) 01 #VAR2 02 #VAR2A (N4.1) 02 #VAR2B (P6.2) 01 REDEFINE #VAR2 02 #VAR2RD (A10) END-DEFINE ...
Mit der Notation FILLER
nX können Sie in dem Feld, das
redefiniert wird, n Füllbytes - d.h. Segmente, die nicht
benutzt werden sollen - definieren. (Nachgestellte Füllbytes müssen nicht unbedingt
angegeben werden.)
Im folgenden Beispiel wird die Benutzervariable #FIELD als drei neue
Benutzervariablen, jede mit Format/Länge A2, redefiniert. Die
FILLER-Notationen bedeuten, dass das 3. und 4. sowie das 7. bis 10. Byte des
ursprünglichen Feldes nicht benutzt werden sollen.
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 ...
Das folgende Programm veranschaulicht die Anwendung einer Redefinition:
** 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
Ausgabe des Programms DDATAX01:
Beachten Sie, wie das Feld #PAY und die aus seiner Redefinition
resultierenden Felder angezeigt werden:
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