Das erste Statement in einem im Structured
Mode geschriebenen Natural-Programm muss immer ein
DEFINE
DATA
-Statement sein. In diesem Statement definieren Sie alle
Felder — Datenbankfelder wie Benutzervariablen — die in dem Programm verwendet
werden sollen.
Dieses Dokument behandelt folgende Themen:
Informationen zur strukturellen Einrückung eines Source-Programms siehe
Natural-Systemkommando STRUCT
.
Alle im Programm zu verwendenden Felder müssen im DEFINE
DATA
-Statement definiert werden.
Es gibt zwei Möglichkeiten, die Felder zu definieren:
Die Felder können innerhalb des DEFINE DATA
-Statements
selbst definiert werden (siehe unten).
Die Felder können außerhalb des Programms in einer
Local Data Area oder einer Global Data
Area definiert werden, wobei das DEFINE DATA
-Statement
diese Data Area referenziert (siehe unten).
Felder, die von mehreren Programmen/Unterprogrammen benutzt werden, sollten in einer programmexternen Data Area definiert werden.
Im Hinblick auf eine klare Anwendungsstruktur empfiehlt es sich in der Regel, Felder in programmexternen Data Areas zu definieren.
Data Areas werden mit dem Datenbereich-Editor (Data-Area-Editor) erstellt und gepflegt, der in der Editoren-Dokumentation beschrieben ist.
Im ersten der folgenden Beispiele sind die Felder innerhalb des
DEFINE DATA
-Statements im Programm selbst definiert. Im zweiten
Beispiel sind die gleichen Felder in einer Local Data Area (LDA) definiert, und das
DEFINE DATA
-Statement enthält lediglich eine Referenz auf diese
Data Area.
Das folgende Beispiel veranschaulicht, wie Felder innerhalb des
Programms im DEFINE
DATA
-Statements selbst definiert werden können:
DEFINE DATA LOCAL 1 VIEWEMP VIEW OF EMPLOYEES 2 NAME 2 FIRST-NAME 2 PERSONNEL-ID 1 #VARI-A (A20) 1 #VARI-B (N3.2) 1 #VARI-C (I4) END-DEFINE ...
Das folgende Beispiel veranschaulicht, wie Felder außerhalb eines Programms in einer Local Data Area (LDA) definiert werden können:
Programm:
DEFINE DATA LOCAL USING LDA39 END-DEFINE ...
Vom Programm referenzierte Local Data Area LDA39
:
I T L Name F Leng Index/Init/EM/Name/Comment - - - -------------------------------- - ---- --------------------------------- V 1 VIEWEMP EMPLOYEES 2 NAME A 20 2 FIRST-NAME A 20 2 PERSONNEL-ID A 8 1 #VARI-A A 20 1 #VARI-B N 3.2 1 #VARI-C I 4
Diese LDA enthält eine View (Datensicht, siehe auch weiter
unten) mit
Namen VIEWEMP
, in der die vom Programm verwendeten Felder
definiert sind.
Folgende Themen werden behandelt:
Level-Nummern werden innerhalb eines DEFINE DATA
-Statements
verwendet, um die Struktur und Gruppierung der Definitionen zu zeigen. Dies ist
relevant bei
Level-Nummern sind 1- oder 2-stellige Zahlen von 01 bis 99 (die vorangestellte Null kann weggelassen werden).
Im Allgemeinen sind Variablen-Definitionen auf Level 1.
Die Level-Angaben in View-Definitionen, Redefinitionen und Gruppen müssen lückenlos sein. Es dürfen keine Level-Nummern ausgelassen werden.
Wenn Sie einen View definieren, geben Sie den View-Namen auf Level 1 an und die Felder, aus denen der View besteht, auf Level 2. Näheres zu View-Definitionen finden Sie im Abschnitt Datenbankzugriffe.
DEFINE DATA LOCAL 1 VIEWEMP VIEW OF EMPLOYEES 2 NAME 2 FIRST-NAME 2 BIRTH ... END-DEFINE
Mit der Definition von Gruppen ist es möglich, eine Reihe aufeinanderfolgender Felder auf einfache Weise zu referenzieren. Wenn Sie mehrere Felder unter einem gemeinsamen Gruppennamen definieren, können Sie diese Felder später im Programm referenzieren, indem Sie statt der Namen der einzelnen Felder lediglich den Gruppennamen angeben.
Der Gruppenname muss auf Level 1 definiert werden und die in der Gruppe enthaltenen Felder jeweils einen Level darunter.
Für Gruppennamen gelten die gleichen Namenskonventionen wie für Benutzervariablen.
DEFINE DATA LOCAL 1 #FIELDA (N2.2) 1 #FIELDB (I4) 1 #GROUPA 2 #FIELDC (A20) 2 #FIELDD (A10) 2 #FIELDE (N3.2) 1 #FIELDF (A2) ... END-DEFINE
In diesem Beispiel sind die Felder #FIELDC
,
#FIELDD
und #FIELDE
unter dem gemeinsamen
Gruppennamen #GROUPA
definiert. Die anderen drei Felder sind nicht
Teil der Gruppe. Bitte beachten Sie, dass #GROUPA
nur als
Gruppenname dient und selbst kein Feld ist (und daher auch keine
Format-/Längendefinition hat).
Wenn Sie ein Feld redefinieren, muss die
REDEFINE
-Option auf dem
gleichen Level sein wie die Definition des Feldes, das redefiniert wird; und
die Felder, die sich aus der Redefinition ergeben, müssen einen Level darunter
sein. Näheres zu Redefinitionen finden Sie unter
Felder
redefinieren.
DEFINE DATA LOCAL 1 VIEWEMP VIEW OF STAFFDDM 2 BIRTH 2 REDEFINE BIRTH 3 #YEAR-OF-BIRTH (N4) 3 #MONTH-OF-BIRTH (N2) 3 #DAY-OF-BIRTH (N2) 1 #FIELDA (A20) 1 REDEFINE #FIELDA 2 #SUBFIELD1 (N5) 2 #SUBFIELD2 (A10) 2 #SUBFIELD3 (N5) ... END-DEFINE
In diesem Beispiel wird das Datenbankfeld BIRTH
als drei
Benutzervariablen redefiniert, und die Benutzervariable #FIELDA
wird als drei andere Benutzervariablen redefiniert.
Der Speicherbereich, in dem alle benutzerdefinierten Variablen gespeichert werden, beginnt immer an einer Doppelwortgrenze.
Wird ein DEFINE DATA
-Statement benutzt, werden alle
Datenblöcke (z.B. LOCAL
-, GLOBAL
-Blöcke) an einer
Doppelwortgrenze ausgerichtet, und alle hierarchischen Strukturen (View -Definitionen und
Gruppen) auf
Level 1 werden auf Vollwortgrenze ausgerichtet. Redefinitionen, Skalar- und
Array-Variablen werden selbst dann nicht ausgerichtet, wenn sie auf Level 1
definiert sind.
Die Ausrichtung an den Grenzen innerhalb des Datenbereichs ist Sache des Benutzers und richtet sich nach der Reihenfolge, in der die Variablen für Natural definiert sind.