Consider the following record definition for the domain FAM:
DTR> SHOW FAM_REC
RECORD FAM_REC USING
01 FAMILY.
03 PARENTS.
06 FATHER PIC X(10).
06 MOTHER PIC X(10).
03 NUMBER_KIDS PIC 99 EDIT_STRING IS Z9.
03 KIDS_N OCCURS 10 TIMES.
06 EACH_KID.
09 KID_NAME PIC X(10) QUERY_NAME IS KID.
03 KIDS_A OCCURS 10 TIMES.
06 EACH_KID.
09 AGE PIC 99 EDIT_STRING IS Z9.
;
The fixed-length list format means that values are displayed for
10 KIDS_N and 10 KIDS_A, no matter what the value for NUMBER_
KIDS. In displays and reports, this means that most FAM records
would be separated by strings of blanks (for "empty" occurrences
of KIDS_N) and zeros (for "empty" occurrences of KIDS_A).
DTR> PRINT FAM
NUMBER KID
FATHER MOTHER KIDS NAME AGE
JIM ANN 2 URSULA 7
RALPH 3
0
0
0
0
0
0
0
0
JIM LOUISE 5 ANNE 31
JIM 29
ELLEN 26
DAVID 24
ROBERT 16
0
0
0
0
0
. . .
. . .
. . .
To improve display and report formats for this domain, you could
restructure it using the MATCH statement so that it contains one
variable-length list field. In other words, the modified record
definition would look like the current one for the FAMILIES
domain.
DTR> SHOW FAMILY_REC
RECORD FAMILY_REC
01 FAMILY.
03 PARENTS.
06 FATHER PIC X(10).
06 MOTHER PIC X(10).
03 NUMBER_KIDS PIC 99 EDIT_STRING IS Z9.
03 KIDS OCCURS 0 TO 10 TIMES DEPENDING ON NUMBER_KIDS.
06 EACH_KID.
09 KID_NAME PIC X(10) QUERY_NAME IS KID.
09 AGE PIC 99 EDIT_STRING IS Z9.
;
If you attempted to restructure FAM without using the MATCH
statement, DEC DATATRIEVE would not store the list elements.
This problem occurs because the modified record definition
combines two list fields into one. Therefore, to restructure
the FAM domain, you must use the MATCH statement within a STORE
statement that is controlled by a FOR loop. The following series
of statements stores the data from the records in FAM into the
records in FAMILIES and then prints the results:
DTR> READY FAM
DTR> DEFINE FILE FOR FAMILIES
DTR> READY FAMILIES WRITE
DTR> FOR FAM
CON> STORE FAMILIES USING
CON> BEGIN
CON> PARENTS = PARENTS
CON> NUMBER_KIDS = NUMBER_KIDS
CON> MATCH KIDS, KIDS_N
CON> KID_NAME = KID_NAME
CON> MATCH KIDS, KIDS_A
CON> AGE = AGE
CON> END
DTR> PRINT FAMILIES
NUMBER KID
FATHER MOTHER KIDS NAME AGE
JIM ANN 2 URSULA 7
RALPH 3
JIM LOUISE 5 ANNE 31
JIM 29
ELLEN 26
DAVID 24
ROBERT 16
. . .
. . .
. . .