Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

Art der Parameterübergabe

&pagelevel(5)&pagelevel

Bei der Deklaration der Prozedurparameter mit DECLARE-PARAMETER wird auch festgelegt, wie die für den Prozedurparameter übergebene Zeichenfolge zu behandeln ist, und zwar im Operanden TRANSFER-TYPE.

Gilt TRANSFER-TYPE = *BY-VALUE, wird die übergebene Zeichenfolge dem entsprechenden Prozedurparameter als Wert zugewiesen.

Beispiel

/CALL-PROCEDURE PROC2, PROCEDURE-PARAMETERS = (MUELLER, EDUARD, -
/GOETHESTRASSE, TEL = 1234567)

Hier wird dem Prozedurparameter NAME der Wert MUELLER zugewiesen, dem Prozedurparameter VORNAME der Wert EDUARD usw.

Gilt TRANSFER-TYPE = *BY-REFERENCE, wird die übergebene Zeichenfolge als Variablenbehälter des formalen Prozedurparameters ausgewertet. Dann kann die gerufene Prozedur über diesen Prozedurparameter Ergebnisse an den Aufrufer zurückliefern.

Beispiel

Aufrufende Prozedur:

/DECLARE-VARIABLE NAME('MUELLER',*STRING)
/DECLARE-VARIABLE VORNAME('EDUARD',*STRING)
/DECLARE-VARIABLE STR('GOETHESTRASSE',*STRING)
/DECLARE-VARIABLE TELEFON('1234567',*STRING)
/...
/CALL-PROCEDURE PROC2, PROCEDURE-PARAMETERS = (NAME, VORNAME, STR,,, TEL)

Aufgerufene Prozedur PROC2:

/SET-PROCEDURE-OPTIONS
/BEGIN-PARAMETER-DECLARATION
/DECLARE-PARAMETER NAME (*NONE, *STRING,-
/  TRANSFER-TYPE = *BY-REFERENCE)
/DECLARE-PARAMETER VORNAME (*NONE, *STRING,-
/  TRANSFER-TYPE = *BY-REFERENCE)
/DECLARE-PARAMETER STR(*NONE, *STRING,-
/  TRANSFER-TYPE = *BY-REFERENCE)
/DECLARE-PARAMETER ORT('HAMBURG', *STRING,-
/  TRANSFER-TYPE = *BY-VALUE)
/DECLARE-PARAMETER VORWAHL('040', *STRING,-
/  TRANSFER-TYPE = *BY-VALUE)
/DECLARE-PARAMETER TEL(*NONE, *STRING,-
/  TRANSFER-TYPE = *BY-REFERENCE)
/END-PARAMETER-DECLARATION

Als Prozedurparameter werden Variablennamen übergeben. Da in PROC2 für die Prozedurparameter TRANSFER-TYPE = *BY-REFERENCE gilt, wird nicht die übergebene Zeichenfolge als Wert zugewiesen, sondern Variablen werden miteinander verknüpft.

Beispiel

Die Prozedur P enthält folgende Zeilen:

/SET-PROCEDURE-OPTIONS
/BEGIN-PARAMETER-DECLARATION
/DECLARE-PARAMETER SUMME (TRANSFER-TYPE=*BY-REFERENCE)
/DECLARE-PARAMETER (P1(TYPE=*INTEGER),P2(TYPE=*INTEGER))
/END-PARAMETER-DECLARATION
/SUMME = P1+P2

Im Dialog werden folgende Kommandos eingegeben:

/DECLARE-VARIABLE S
/CALL-PROCEDURE P, (S,3,5)
/SHOW-VARIABLE S

Dies ergibt die Ausgabe:

S = 8

Die Übergabe von Variablennamen als Prozedurparameter erfolgt über einen so genannten „Container-“ oder „Behältermechanismus“: Der Prozedurparameter dient als Behälter für die Variable, damit die aufgerufene Prozedur auf diese Variable zugreifen und ihren Inhalt auswerten kann.

Variablennamen können nur dann als Prozedurparameter eingesetzt werden, wenn Variable und Prozedurparameter mit dem gleichen Datentyp deklariert sind; die Variable mit DECLARE-VARIABLE in der aufrufenden Prozedur, der Prozedurparameter mit DECLARE-PARAMETER in der aufgerufenen Prozedur. Das heißt, beide müssen zum Beispiel mit TYPE = *INTEGER deklariert sein. Es darf nicht einer mit TYPE=*INTEGER und der andere mit TYPE = *ANY deklariert sein.