Sie sind nun wieder eingeladen, die Diskussion spezieller technischer Probleme mit zu verfolgen. Bitte schicken Sie Fragen, Anregungen oder Antworten zu den vorgestellten Themen – ebenso wie Ihre Kritik – an unsere e-Mail-Adressen: dieter.bender@MidrangeMagazin.de oder Redaktion@MidrangeMagazin.de

Frage:

Wir haben in einer physischen Datei Felder im Datumsformat definiert und möchten aus einer bestehenden Datei, in der das Feld 8stellig numerisch definiert ist, den Inhalt mit CPYF kopieren. In den Feldern steht anschließend „Schrott“, oder wir bekommen Abbrüche. Ist das überhaupt machbar, oder müssen wir da ein Konvertierungsprogramm schreiben?

Antwort:

Eine automatische Übertragung beim CPYF kann nicht so ohne weiteres funktionieren, da das System ja nicht automatisch erkennen kann, wie das Feld zu interpretieren ist; also wo steht das Jahr, wo der Monat, wo der Tag, oder wie sonst ist das Datum zusammengesetzt. Für numerische Felder gibt es da keinerlei Regelwerk, alphabetische Felder sind eventuell noch interpretierbar, wenn sie Trennzeichen enthalten und sich an das Datumsformat des Jobs halten. Zudem ist bei all diesen Feldarten nicht sichergestellt, dass gültige Daten drinstehen. In Datumsfeldern gibt es strengere Regeln, deshalb kann es auch zu Abbrüchen kommen.

Eines Programms bedarf es zur Umsetzung nicht unbedingt, am einfachsten geht es mit SQL. Angenommen wir haben eine Datei BESTELL mit den Feldern BESTELLUNG_ID, KUNDE, DATUM und BEARBEITER; im Feld Datum steht für den 16.8.2002 zum Beispiel der Wert 20020816 in einem numerischen Feld und wir wollen dies in eine gleich aufgebaute Datei kopieren.

Zunächst erstellen wir uns eine logische Datei, am einfachsten mit SQL. Die SQL-Anweisung, die wir zum Beispiel nach STRSQL am interaktiven SQL-Prompt eingeben müssen, ist in folgender Abbildung zu sehen.

create view bestellV as

select bestellung_id, kunde,
date(
substring(char(datum), 5, 2) !! ‚.‘ !!
substring(char(datum), 3, 2) !! ‚.‘ !!
substring(char(datum), 1, 2)
) as datum,
bearbeiter
from bestell

Für andere Datumsformate im Job müssen die Trennzeichen entsprechend geändert oder es müssen Komponenten umgestellt werden.
Von dieser View kann man jetzt mit einem ganz gewöhnlichen CPYF kopieren; die Umsetzung wird von der View geleistet.
Selbstverständlich funktioniert dieses Verfahren auch mit einem einheitlichen SQL-Statement ohne anschließendes Kopieren, dann wird auch keine View benötigt.
Das SQL Statement hätte dann für unser Beispiel folgendes Aussehen:

insert into bestellNeu

(bestellung_id, kunde,
datum, bearbeiter)
select bestellung_id, kunde,
date(
substring(char(datum), 5, 2) !! ‚.‘ !!
substring(char(datum), 3, 2) !! ‚.‘ !!
substring(char(datum), 1, 2)
) as datum,
bearbeiter
from bestell

Wenn die Datumsfelder Alfa-Felder sind, kann die Konvertierung nach „char“ weggelassen werden. Diese Statements sind leicht an andere Formate anzupassen.

Den Autor Dieter Bender erreichen Sie unter dieter.bender@midrangemagazin.de