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.