Daten über Extrakte aufbereiten
Die Sätze verschiedener Datenbanktabellen können in einem einzigen Extrakt gespeichert werden, da die Einzelsätze in Extrakten verschieden strukturiert sein können.
Das folgende Programm sei mit der logischen Datenbank F1S verknüpft.
REPORT demo_data_process_extract.
NODES: spfli, sflight, sbook.
FIELD-GROUPS: header, flight_info, flight_booking.
INSERT:
spfli-cityfrom spfli-cityto
spfli-connid sflight-fldate
sbook-class sbook-smoker sbook-bookid INTO header,
spfli-carrid INTO
flight_info,
sbook-luggweight
sbook-wunit INTO
flight_booking.
START-OF-SELECTION.
GET spfli.
EXTRACT flight_info.
GET sflight.
GET sbook.
EXTRACT flight_booking.
END-OF-SELECTION.
SORT.
LOOP.
AT flight_info.
SKIP.
WRITE: / spfli-carrid,
spfli-connid,
'from', (15) spfli-cityfrom,
'to', (15) spfli-cityto.
ULINE.
ENDAT.
AT NEW sflight-fldate.
SKIP.
WRITE: / 'Date:', sflight-fldate.
WRITE: 20 'Book-ID', 40 'Smoker', 50
'Class'.
ULINE.
ENDAT.
AT flight_booking.
WRITE: / sbook-bookid UNDER 'Book-ID',
sbook-smoker UNDER 'Smoker',
sbook-class UNDER 'Class'.
ENDAT.
AT END OF sflight-fldate.
ULINE.
WRITE: 'Number of bookings: ',
(3) cnt(sbook-bookid),
/ 'Total luggage
weight:',
sum(sbook-luggweight),
sbook-wunit.
ENDAT.
ENDLOOP.
Dieses Programm erzeugt die Liste in Beispiel für aufbereitete Daten.
Es werden drei Feldgruppen angelegt, in die verschiedene Felder aufgenommen werden. Während der GET-Ereignisse wird der Extraktdatenbestand über EXTRACT-Anweisungen gefüllt. Bei GET sflight steht keine EXTRACT-Anweisung, da das gewünschte Feld sflight-fldate Teil der Feldgruppe header ist und somit automatisch bei jedem untergeordneten Ereignis GET sbook extrahiert wird.
Nach der Datenbeschaffung wird die Erzeugung des Datenbestands über die SORT-Anweisung abgeschlossen und nach dem Sortierschlüssel header sortiert. In der LOOP – ENDLOOP -Schleife wird der sortierte Extraktdatenbestand in die Ausgabeliste geschrieben, wobei verschiedene AT – ENDAT -Blöcke, sowie die Felder cnt(...) und sum(...) zum Einsatz kommen.