Anwendungsgebiet: PROCEDURE
Kommandobeschreibung
Strukturelemente können einfache oder zusammengesetzte Variablen (Arrays, Strukturen, Listen) sein. In der folgenden Operandenbeschreibung werden daher folgende Bezeichnungen verwendet: „einfache Variable“ (wenn das Strukturelement eine einfache Variable ist), „zusammengesetzte Variable“ (wenn das Strukturelement selbst eine zusammengesetzte Variable ist) und „Variable“ (wenn die Aussage sowohl für einfache als auch für zusammengesetzte Variablen gilt).
Variablenattribute, die im Kommando DECLARE-ELEMENT nicht definiert werden können, werden von der übergeordneten Struktur übernommen (z.B. SCOPE-Attribute von BEGIN-STRUCTURE oder DECLARE-VARIABLE).
Ist das Strukturelement eine zusammengesetzte Variable, müssen deren Elemente einzeln initialisiert werden. Zusammengesetzte Variablen können nicht als Ganzes initialisiert werden. Es können auch Elemente von dynamischen Strukturen mit diesem Kommando deklariert werden.
Format
DECLARE-ELEMENT |
NAME = list-poss(2000): <composed-name 1..255>(...) <composed-name 1..255>(...) INITIAL-VALUE = *NONE / <text 0..1800 with-low expr> ,TYPE = *ANY / *STRING / *INTEGER / *BOOLEAN / *STRUCTURE(...) *STRUCTURE(...) DEFINITION = *DYNAMIC / *BY-SYSCMD / <structured-name 1..20> ,MULTIPLE-ELEMENTS = *NO / *ARRAY(...) / *LIST(...) *ARRAY(...) LOWER-BOUND = 0 / *NONE / <integer -2147483648..2147483647> ,UPPER-BOUND = *NONE / <integer -2147483648..2147483647> *LIST(...) LIMIT = *NONE / <integer 1..2147483647> |
Operandenbeschreibung
NAME = list-poss (2000): <composed-name 1..255>(...)
Deklariert den Variablennamen.
INITIAL-VALUE = *NONE
Die Variable wird nicht initialisiert, ihr wird kein Anfangswert zugewiesen.
Das bedeutet: Der Inhalt einer bereits initialisierten Variablen bleibt unverändert; eine neue Variable erhält keinen Wert, sodass ein Lesezugriff einen Fehler verursacht.
INITIAL-VALUE = <text 0..1800 with-low expr>
Weist einer neuen einfachen Variablen einen Anfangswert zu. Der Wert muss zum Datentyp der Variablen passen.
Der Operand kann auch als Ausdruck angegeben werden.
Bei bereits bestehenden einfachen Variablen wird die Angabe ignoriert.Zusammengesetzte Variablen können nicht als Ganzes initialisiert werden.
Elemente von Strukturlayouts dürfen nicht initialisiert werden.
TYPE =
Bestimmt den Datentyp der Variablen.
TYPE = *ANY
Der Variablen können später beliebig wechselnde Werte der Datentypen STRING, INTEGER und BOOLEAN zugewiesen werden.
TYPE = *STRING
Weist der Variablen den Datentyp STRING zu.
Wertebereich: beliebige Zeichenkette.
Länge: 0 bis 4096 Bytes (Ausnahme: wenn die Variable mit einer Jobvariablen verknüpft ist, darf sie maximal 256 Bytes lang sein.)
TYPE = *INTEGER
Weist der Variablen den Datentyp INTEGER zu.Wertebereich: Ganzzahl zwischen -231 und +231-1
TYPE = *BOOLEAN
Weist der Variablen den Datentyp BOOLEAN zu.Wertebereich: TRUE, FALSE, ON, OFF, YES, NO
TYPE = *STRUCTURE(...)
Legt fest, dass das Strukturelement eine zusammengesetzte Variable vom Typ Struktur ist.
DEFINITION = *DYNAMICDynamisch erweiterbare Struktur.
DEFINITION = *BY-SYSCMD
Statische Struktur, deren Elemente anschließend durch Kommandos im SYSCMD-Strom deklariert werden.
DEFINITION = <structured-name 1..20>
Name des Strukturlayouts, über das die statische Struktur definiert wird.
MULTIPLE-ELEMENTS = *NO
Bestimmt, dass das Strukturelement kein Array und keine Liste ist.
MULTIPLE-ELEMENTS = *ARRAY(...)
Deklariert ein Array, das heißt: das Strukturelement wird als zusammengesetzte Variable vom Typ Array deklariert.
Ein Array kann nicht als Ganzes initialisiert werden.
LOWER-BOUND = 0 / <integer -2147483648..2147483647>Untere Grenze für den Arrayindex
LOWER-BOUND = *NONE
Eine untere Grenze für den Arrayindex wird nicht definiert.
UPPER-BOUND = *NONE
Eine obere Grenze für den Arrayindex wird nicht definiert.
UPPER-BOUND = <integer -2147483648..2147483647>Obere Grenze für den Arrayindex
MULTIPLE-ELEMENTS = *LIST(...)
Deklariert eine Liste, das heißt: das Strukturelement wird als zusammengesetzte Variable vom Typ Liste deklariert.
LIMIT = *NONE
Die Anzahl der Listenelemente wird nicht begrenzt.
LIMIT = <integer 1..2147483647>
Definiert die maximale Anzahl der Listenelemente.
Kommando-Returncode
(SC2) | SC1 | Maincode | Bedeutung / garantierte Meldungen |
0 | CMD0001 | Ohne Fehler | |
1 | 0 | CMD0001 | Warnung; Element schon deklariert |
2 | 0 | CMD0001 | Warnung; Operand INITIAL-VALUE wurde ignoriert |
1 | CMD0202 | Syntaxfehler | |
1 | SDP0118 | Kommando im falschen Kontext | |
3 | CMD2203 | Falsche Syntaxdatei | |
32 | CMD0221 | Systemfehler (interner Fehler) | |
64 | CMD0216 | Erforderliches Privileg fehlt | |
64 | SDP0091 | Semantikfehler garantierte Meldung: SDP1018 | |
130 | SDP0099 | Kein Adressraum mehr verfügbar |
Beispiel 1
/BEGIN-STRUCTURE NAME = BANKVERBINDUNG(SCOPE = *TASK) /DECLARE-ELEMENT BANKLEITZAHL(TYPE = *INTEGER) /DECLARE-ELEMENT KONTEN(TYPE = *INTEGER),- /MULTIPLE-ELEMENTS = *ARRAY(LOWER-BOUND = 1, UPPER-BOUND =3) /END-STRUCTURE /DECLARE-VARIABLE PERSON(TYPE = *STRUCTURE(DEFINITION = *BY-SYSCMD)) /BEGIN-STRUCTURE /DECLARE-ELEMENT NAME(TYPE = *STRING) /DECLARE-ELEMENT VORNAME(TYPE = *STRING) /DECLARE-ELEMENT BANKVERBINDUNG(TYPE = *STRUCTURE- /(DEFINITION = BANKVERBINDUNG)) /END-STRUCTURE
Erzeugt die prozedurlokale Struktur PERSON:
PERSON.NAME PERSON.VORNAME PERSON.BANKVERBINDUNG.BANKLEITZAHL PERSON.BANKVERBINDUNG.KONTEN
Die Variablen PERSON.NAME und PERSON.VORNAME wurden mit TYPE = *STRING deklariert, ihnen dürfen also nur Strings zugewiesen werden.
Die Variable PERSON.BANKVERBINDUNG.BANKLEITZAHL wurde mit TYPE = *INTEGER deklariert, ihr dürfen nur Integer-Werte zugewiesen werden.
PERSON.BANKVERBINDUNG.KONTEN ist ein Array mit drei Elementen, dem nur INTEGER-Werte zugewiesen werden dürfen. Die Elemente dieses Arrays werden noch nicht bei der Variablendeklaration erzeugt, sondern erst bei der ersten Zuweisung.
Zum Beispiel sind folgende voneinander unabhängige Zuweisungen möglich:
PERSON.BANKVERBINDUNG.BANKLEITZAHL = 70010080 PERSON.BANKVERBINDUNG.KONTEN#1 = 6001023
Beispiel 2
/DECLARE-VARIABLE VARIABLE-NAME = BAUM(TYPE = *STRUCTURE(*BY-SYSCMD)),- /MULTIPLE-ELEMENTS = *ARRAY(LOWER-BOUND = 1, UPPER-BOUND = 10),- /SCOPE = *TASK /BEGIN-STRUCTURE /DECLARE-ELEMENT AST,MULTIPLE-ELEMENTS = *ARRAY /END-STRUCTURE
Danach sind folgende Zuweisungen möglich:
/BAUM#1.AST#1 =...; BAUM#1.AST#2 =... /BAUM#2.AST#1 =...; BAUM#2.AST#2 =... ......... /BAUM#10.AST#1 =....; BAUM#10.AST#2 =...
Beispiel 3
/BEGIN-STRUCTURE NAME = WOHNEINHEIT / DECLARE-ELEMENT ANZAHL-ZIMMER / DECLARE-ELEMENT ZIMMERGROESSE, MULTIPLE-ELEMENTS = *ARRAY / DECLARE-ELEMENT INHABER-NAME /END-STRUCTURE /DECLARE-VARIABLE HAUS(TYPE = *STRUCTURE(*BY-SYS)),- / MULTIPLE-ELEMENT = *ARRAY /BEGIN-STRUCTURE /DECLARE-ELEMENT WOHNUNG(TYPE = *STRUCTURE(DEF = WOHNEINHEIT)),- / MULTIPLE-ELEMENTS = *ARRAY /DECLARE-ELEMENT HAUSBESITZER(TYPE = *STRUCTURE(DEF = WOHNEINHEIT)),- / MULTIPLE-ELEMENTS = *ARRAY /DECLARE-ELEMENT ADRESSE(TYPE = *STRUCTURE(DEF = WOHNEINHEIT)),- / MULTIPLE-ELEMENTS = *ARRAY /END-STRUCTURE
In Zuweisungen werden die Variablen folgendermaßen angesprochen:
HAUS#1.WOHNUNG#1.ANZAHL-ZIMMER = HAUS#1.WOHNUNG#2.ANZAHL-ZIMMER = HAUS#1.WOHNUNG#3.ANZAHL-ZIMMER = ... HAUS#5.WOHNUNG#8.ANZAHL-ZIMMER = ...
Beispiel 4
Die Deklaration eines Strukturlayouts beginnt mit dem Kommando BEGIN-STRUCTURE und endet mit dem Kommando END-STRUCTURE.
/BEGIN-STRUCTURE NAME = AA /DECLARE-ELEMENT Z /END-STRUCTURE /BEGIN-STRUCTURE NAME = BB /DECLARE-ELEMENT X /DECLARE-ELEMENT Y /END-STRUCTURE /DECLARE-VARIABLE V /DECLARE-VARIABLE W /... /IF (V = W) /DECLARE-VARIABLE A(TYPE = *STRUCTURE(DEF = AA)) /ELSE /DECLARE-VARIABLE B(TYPE = *STRUCTURE(DEF = BB)) /END-IF
Wenn V = W gilt, wird die Struktur A deklariert (bestehend aus der Variablen A.Z), andernfalls wird die Struktur B deklariert (bestehend aus den Variablen B.X, B.Y). ZwischenBEGIN-STRUCTURE und END-STRUCTURE dürfen Kontrollflusskommandos und Prozeduraufrufe mit INCLUDE-PROCEDURE stehen. In der aufgerufenen Include-Prozedur können jedoch keine Elemente der aufrufenden Prozedur deklariert werden. Die Elemente einer Struktur müssen in der gleichen Prozedur wie ihr einleitendes BEGIN-STRUCTURE und abschließendes END-STRUCTURE deklariert werden. Eine Bezugnahme in der Inclu-de-Prozedur auf eine in dieser Weise unvollständig deklarierte Struktur führt zum Fehler.
Beispiel 5
/DECLARE-VARIABLE DYN-STRUC(TYPE=*STRUCTURE(DEFINITION=*DYNAMIC)) /DECLARE-ELEMENT DYN-STRUC.SUB.NUMBER(TYPE=*INTEGER) /DECLARE-ELEMENT DYN-STRUC.LIST,MULTIPLE-ELEMENTS=*LIST /DYN-STRUC.SUB.STRING='DYNAMISCH ERZEUGTES ELEMENT MIT DATENTYP *ANY' /DYN-STRUC.SUB.NUMBER=1234 /DYN-STRUC.LIST#1=1 /DYN-STRUC.LIST#2=2
Hinweise
Bei der Deklaration von Elementen für ein Strukturlayout definiert die Operandeneinstellung NAME=list-poss(2000): <structured-name 1..20>(...) nur den Namen des Elements; der Name des Layouts ist damit nicht gegeben.
Bei der Deklaration von Elementen für eine Variable, die als dynamische Struktur definiert wurde, definiert die Operandeneinstellung NAME=list-poss(2000): <structured-name 1..255>(...) den kompletten Namen des Elements, inklusive dem Name der gesamten Variablen