Die Redefinition dient dazu, das Format eines Feldes zu ändern oder ein einzelnes Feld in mehrere Teile aufzuteilen.
Dieses Dokument 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