Aller au contenu

CALLPRC

Appeler une procédure liée

En bref

La commande CALLPRC permet d'appeler la procédure liée indiquée et de lui donner le contrôle.

CALLPRC se lit CALL (Appeler) + PRC. Sur IBM i, le nom d'une commande associe presque toujours un verbe et un objet.

Syntaxe minimale

CALLPRC PRC(…)

Paramètres

  • PRC Procédure obligatoire
  • PARM Paramètres
  • RTNVAL Variable pour valeur retour

Astuce : dans une session 5250, tapez CALLPRC puis F4 pour l'invite de saisie, et F1 sur un paramètre pour son aide.

Aide IBM i de la commande

Texte du F1, IBM i 7.5 en français (bibliothèque QSYS)

Où s'exécute :

  • Batch ILE CL module (*BMOD)
  • Interactive ILE CL module (*IMOD)
Compatible multitâche : Oui

La commande CALLPRC permet d'appeler la procédure liée indiquée et de lui donner le contrôle. Le cas échéant, la procédure exécutant la commande CALLPRC peut passer des paramètres à la procédure appelée. Vous pouvez utiliser cette commande dans des modules et des programmes CL ILE. Si la procédure appelée renvoie une valeur, par exemple un code d'erreur, cette valeur peut être stockée dans une variable CL en indiquant le nom de cette variable au paramètre Variable pour valeur retour (RTNVAL).

Chacune des valeurs de paramètre transmises à la procédure appelée peut être indiquée sous l'une des formes suivantes : constante de chaîne alphanumérique, constante numérique, constante logique, constante en virgule flottante, variable CL ou expression. Une valeur indiquée sous la forme d'une constante en virgule flottante est convertie par défaut au format en virgule flottante binaire double précision avant d'être transmise à la procédure appelée. Lorsque des paramètres sont transmis, la valeur de la constante, de la variable ou de l'expression peut être utilisée par le programme appelé. Les paramètres ne peuvent pas être transmis sous l'une des formes suivantes : listes de valeurs, noms qualifiés ou paramètres de mot clé. Vous pouvez transmettre jusqu'à 300 paramètres à la procédure appelée.

Remarque :Bien que la commande CALLPRC permette de transmettre jusqu'à 300 paramètres, le nombre de paramètres accepté par la procédure appelée dépend du langage utilisé par celle-ci. Par exemple, une procédure en langage CL n'accepte pas plus de 255 paramètres.

Si vous utilisez la commande CALLPRC pour transmettre des paramètres à une procédure, les valeurs de ces paramètres sont transmises dans l'ordre dans lequel elles apparaissent dans la commande. Cet ordre doit correspondre à celui de la liste de paramètres dans la procédure appelée.

La transmission des paramètres s'effectue par référence ou par valeur.

Restrictions :

  • La commande CALLPRC est admise uniquement dans un module CL ILE.

Paramètres

Mot-clé Description Valeurs possibles Remarques
PRC Procédure Valeur caractère Obligatoire, positionnel 1
PARM Paramètres Values (jusqu'à 300 répétitions): Liste d'éléments Facultatif, positionnel 2
Élément 1: Paramètre Sans restriction
Élément 2: Transmis *BYREF, *BYVAL
Élément 3: Type et longueur de paramètre Valeurs uniques: *DFT
Autres valeurs: Liste d'éléments
Élément 1: Type *DEC, *CHAR, *LGL, *INT, *UINT, *FLT
Élément 2: Longueur Entier
Élément 3: Nombre de positions décimales Entier
RTNVAL Variable pour valeur retour CL variable name, *NONE Facultatif, positionnel 3

Procédure (PRC)

Indique le nom de la procédure à appeler.

nom
Indiquez le nom de la procédure à appeler. Celle-ci doit figurer dans le même programme que la procédure appelante ou dans un programme de service précisé lors de la création du programme appelant. Le nom de procédure peut comporter une longueur de 256 octets au maximum. Il respecte la distinction entre les majuscules et les minuscules. Vous ne pouvez pas indiquer une variable CL.

Paramètres (PARM)

Indique les valeurs de paramètre à transmettre à la procédure appelée. La transmission de paramètres est facultative. Si aucun paramètre n'est indiqué, aucun paramètre ne sera transmis à la procédure appelée. Vous pouvez indiquer jusqu'à 300 paramètres.

Elément 1 : Paramètre

*OMIT
Le paramètre est omis. Un pointeur non initialisé doit être transmis à la procédure appelée. Lorsque *OMIT est indiqué pour l'élément 1, vous ne pouvez pas indiquer *BYVAL pour l'élément 2 et les valeurs spécifiées pour l'élément 3 sont ignorées.
valeur-paramètre
Indiquez les valeurs à transmettre à la procédure appelée. La valeur de paramètre peut être indiquée sous l'une des formes suivantes : constante de chaîne alphanumérique, constante numérique, constante logique, constante en virgule flottante à double précision, variable CL ou expression.

Le type et la longueur de chaque paramètre doivent être identiques à ceux des paramètres définis dans les procédures appelées. Leur ordre de transmission et de réception doit également être identique. Le nombre de paramètres indiqué dans la procédure appelante n'est pas nécessairement identique à celui précisé dans la procédure appelée. Si le premier est supérieur au second, les paramètres en trop sont ignorés. S'il est inférieur alors que la procédure appelée fait référence à des paramètres manquants, vous risquez d'obtenir des résultats inattendus.

Les paramètres peuvent être transmis et reçus de la manière suivante :

  • Les constantes de chaîne alphanumérique ne sont pas complétées par des blancs et ne se terminent pas par des valeurs nulles. Le descripteur opérationnel du paramètre aura la même longueur que la chaîne. Vous pouvez contrôler le nombre d'octets transmis pour un paramètre de type constante alphanumérique en spécifiant les informations de longueur de paramètre de manière explicite.
  • Par défaut, pour les constantes numériques, la valeur est transmise sous forme de nombre décimal condensé avec 15 chiffres au total et 5 décimales. Vous pouvez contrôler le type utilisé pour une constante numérique en spécifiant les informations de type de paramètre de manière explicite. Si la valeur *INT ou *UINT est spécifiée pour le type, vous pouvez contrôler le nombre d'octets (2, 4 ou 8) transmis pour ce paramètre de type constante numérique en spécifiant les informations de longueur de paramètre de manière explicite. Si la valeur *DEC est spécifiée pour le type, vous pouvez contrôler le nombre total de chiffres et le nombre de décimales utilisés pour ce paramètre de type constante numérique en spécifiant les informations de longueur de paramètre de manière explicite.
  • Les constantes logiques sont passées sous la forme d'un octet ayant pour valeur logique 'F1'X ou 'F0'X.
  • Les constantes et les valeurs spéciales en virgule flottante (*NAN, *INF et *NEGINF) sont transmises par défaut sous forme de nombres en virgule flottante à double précision au format IEEE. Ces nombres occupent 8 octets et sont indiqués sous la forme sn.nEsn, où s est un signe plus (+) ou moins (-) ; par exemple, -2.47E+3 ou 3.653E24. Vous pouvez contrôler la transmission du paramètre sous la forme d'une simple précision en spécifiant explicitement la valeur 4 comme longueur de paramètre.
  • Une variable CL peut être transmise, auquel cas la procédure appelée doit déclarer la zone de sorte qu'elle corresponde à la variable définie dans la procédure appelante. Par exemple, si une procédure en langage CL définit une variable décimale &CHKNUM de longueur (5 0), la procédure appelée doit déclarer une zone au format condensé composée de 5 chiffres sans aucune position décimale.
  • Les paramètres de type expression alphanumérique ne sont pas complétés par des blancs et ne se terminent pas par des valeurs nulles. Le descripteur opérationnel du paramètre aura la même longueur que la chaîne de résultat intermédiaire. Vous pouvez contrôler le nombre d'octets transmis pour un paramètre de type expression alphanumérique en spécifiant les informations de longueur de paramètre de manière explicite.
  • Par défaut, pour les expressions numériques, la valeur est transmise sous forme de nombre décimal condensé avec 15 chiffres au total et 5 décimales. Vous pouvez contrôler le type utilisé pour une expression numérique en spécifiant les informations de type de paramètre de manière explicite. Si la valeur *INT ou *UINT est spécifiée pour le type, vous pouvez contrôler le nombre d'octets (2, 4 ou 8) transmis pour ce paramètre de type expression numérique en spécifiant les informations de longueur de paramètre de manière explicite. Si la valeur *DEC est spécifiée pour le type, vous pouvez contrôler le nombre total de chiffres et le nombre de décimales utilisés pour ce paramètre de type expression numérique en spécifiant les informations de longueur de paramètre de manière explicite.
  • Des descripteurs opérationnels sont toujours créés pour les arguments alphanumériques passés dans le mot clé PARM. La procédure appelée peut utiliser les informations de ces descripteurs afin de définir la longueur de l'argument. Pour les constantes de chaîne alphanumérique, cette longueur correspond à la longueur réelle de la constante. Pour les variables alphanumériques, il s'agit de la longueur déclarée pour ces dernières. Pour les expressions alphanumériques, il s'agit de la longueur déclarée pour la chaîne de résultat intermédiaire.

Elément 2 : Transmis

*BYREF
Le paramètre doit être transmis par référence. Transmettre un paramètre par référence signifie que le paramètre est en fait un pointeur indiquant l'emplacement de stockage contenant la variable CL, la valeur de la constante ou la valeur de l'expression dans la procédure appelante. Si la procédure appelée est une procédure CL, tous les paramètres doivent être transmis par référence. Lorsqu'une variable CL est transmise par référence, sa valeur peut être modifiée par la procédure appelée et cette modification est prise en compte dans la procédure appelante. Lorsqu'une constante est transmise par référence, une copie de cette dernière est effectuée dans la procédure appelante, puis un pointeur vers cette copie est transmis à la procédure appelée. Si une expression est transmise par référence, une zone de résultat intermédiaire est créée et un pointeur vers cette dernière est transmis à la procédure appelée.
*BYVAL
Le paramètre doit être transmis par valeur. Transmettre un paramètre par valeur signifie que la procédure appelée reçoit une copie de ce paramètre. Si le paramètre est une variable CL, les modifications apportées à ce paramètre par la procédure appelée ne sont pas prises en compte dans la procédure appelante. La procédure appelée doit être définie pour recevoir un paramètre transmis par valeur.

Elément 3 : Type et longueur de paramètre

Indique, pour les valeurs de paramètre numérique et de type constante alphanumérique, ou pour les valeurs d'expression, la façon dont le paramètre est transmis à la procédure appelée. Si une variable CL est indiquée, le type et la longueur de paramètre sont déterminés par le type et la longueur déclarés pour la variable CL.

Valeurs uniques

*DFT
Pour une constante ou une expression alphanumérique, la longueur de paramètre correspond à celle de la chaîne constante ou de la chaîne de résultat intermédiaire de l'expression. Pour une constante ou une expression numérique, le paramètre est transmis sous forme de nombre décimal condensé avec 15 chiffres au total et 5 décimales. Pour les variables CL, les informations de type et de longueur de paramètre correspondent au type et à la longueur déclarés pour la variable.

Elément 1 : Type

Indique le type de paramètre à transmettre. La valeur de ce paramètre ne peut pas être indiquée par une variable CL.

*DEC
Paramètre de type décimal contenant une valeur décimale condensée.
*CHAR
Paramètre de type alphanumérique contenant une valeur de chaîne alphanumérique.
*LGL
Paramètre de type logique contenant la valeur logique '1' ou '0'.
*INT
Paramètre de type entier contenant une valeur binaire signée.
*UINT
Paramètre de type entier contenant une valeur binaire non signée.
*FLT
Paramètre en virgule flottante contenant une valeur en virgule flottante binaire.

Elément 2 : Longueur

entier
Pour les paramètres de type alphanumérique, entier ou en virgule flottante, spécifiez le nombre d'octets pour les paramètres transmis. Pour les paramètres de type décimal, spécifiez le nombre de chiffres pour les paramètres transmis. La longueur ne peut pas être supérieure à la longueur maximale admise pour ce type de paramètre CL. La longueur doit être égale à 2, 4 ou 8 pour les paramètres de type entier. La longueur doit être 4 ou 8 pour les paramètres en virgule flottante.

Elément 3 : Nombre de positions décimales

entier
Cet élément n'est admis que pour les paramètres de type décimal. La longueur de la valeur du paramètre inclut le nombre de positions décimales dans la valeur. La longueur maximale de la valeur décimale est de 24 chiffres (y compris ceux figurant à droite de la virgule décimale). Vous pouvez indiquer jusqu'à neuf positions décimales. Si neuf positions décimales sont spécifiées, la valeur figurant à gauche de la virgule décimale ne peut jamais être supérieure à 999,999,999,999,999, car seuls 15 chiffres sur les 24 restent disponibles pour la partie entière.

Si une longueur en chiffres est indiquée pour un paramètre de type décimal sans que le nombre de positions décimales soit précisé, 0 est utilisé par défaut (aucune position décimale).

La longueur maximale pour chacun des six types de variable est la suivante :

  • Décimal -- 24 chiffres, 9 positions décimales
  • Alphanumérique -- 32767 octets
  • Logique -- 1 octet
  • Entier -- 8 octets pour CL ILE, 4 octets pour CL OPM
  • Entier non signé -- 8 octets pour CL ILE, 4 octets pour CL OPM
  • En virgule flottante -- 8 octets

Remarque :Lorsque les attributs supplémentaires (Type,Longueur,Nombre de positions décimales) pour le paramètre sont spécifiés, le compilateur crée une valeur temporaire définie par ces attributs. Lorsque ces attributs supplémentaires de valeur temporaire ne sont pas identiques à ceux de la valeur de paramètre, une troncature est effectuée. Par exemple, si la constante numérique 1234.45 est transmise avec la valeur (*INT 4) spécifiée, la partie décimale sera tronquée ; si la longueur du résultat intermédiaire de l'expression de type alphanumérique est supérieure à celle de l'attribut Longueur spécifié, la partie la plus longue sera tronquée.

Variable pour valeur retour (RTNVAL)

Indique la variable qui doit contenir la valeur de retour provenant de la procédure appelée. Si la valeur renvoyée par la procédure appelée est un nombre binaire (de type entier ou court en ILE C ou ILE C++), vous devez spécifier soit une variable CL de nombre entier (définie par TYPE(*INT) ou TYPE(*UINT) dans l'instruction DCL) ou recourir à la fonction intégrée %BINARY ou %BIN dans une variable CL alphanumérique (indiquée par TYPE(*CHAR) dans l'instruction DCL) utilisée comme paramètre de valeur de retour.

*NONE
La procédure appelée ne renvoie aucune valeur.
nom-variable-CL
Indiquez le nom de la variable devant contenir la valeur de retour provenant de la procédure appelée. Il peut s'agir d'une variable CL de type alphanumérique, entier ou décimal. Les variables utilisées comme variables de retour seront automatiquement alignées sur une frontière de 16 octets.

Exemples

Exemple 1 : Appel d'une procédure sans aucun paramètre

CALLPRC   PRC(PAYROLL)

La procédure nommée PAYROLL est appelée sans que des paramètres lui aient été transmis. Cette procédure ne renvoie aucune valeur.

Exemple 2 : Transmission d'une constante alphanumérique avec un type et une longueur par défaut

CALLPRC   PRC(PAYROLL)  PARM('1')

La procédure nommée PAYROLL est appelée avec une constante alphanumérique transmise comme chaîne entre apostrophes. Cette procédure ne renvoie aucune valeur.

Exemple 3 : Transmission de paramètres avec des types et des longueurs par défaut

CALLPRC   PRC(PAYROLL)  PARM(CHICAGO 1234 &VAR1) +
          RTNVAL(*NONE)

La procédure nommée PAYROLL est appelée. La procédure appelante transmet trois paramètres : une chaîne alphanumérique (CHICAGO), une constante numérique 1234 est transmise en tant que valeur décimale condensée avec 15 chiffres au total et 5 chiffres décimaux (15 5), et le contenu de la variable CL &VAR1. Les attributs de la variable déterminent ceux du troisième paramètre. Cette procédure ne renvoie aucune valeur.

Exemple 4 : Appel d'une procédure avec des constantes en virgule flottante et des types et des longueurs par défaut

CALLPRC   PRC(PRC1)  PARM(1.5E3 *INF)  RTNVAL(&RVAL)

La procédure nommée PRC1 est appelée avec les deux valeurs en virgule flottante à double précision qui lui sont transmises. La valeur renvoyée est stockée dans la variable &RVAL.

Exemple 5 : Ignorer la valeur de retour d'une procédure

CALLPRC   PRC(PRC1)  PARM(1.5E3 *INF)  RTNVAL(*NONE)

La procédure nommée PRC1 est appelée avec les deux valeurs en virgule flottante à double précision qui lui sont transmises. La valeur renvoyée est ignorée et donc indisponible pour la procédure appelante.

Exemple 6 : Appel d'une procédure renvoyant un nombre binaire à l'aide de %BIN

CALLPRC   PRC(RTNINT)  RTNVAL(%BIN(&RTNV 1 4))

La procédure nommée RTNINT renvoie une valeur binaire à 4 octets. Elle est stockée dans les quatre premiers octets de la variable &RTNV. La variable &RTNV est de type *CHAR et a une longueur au moins égale à 4.

Exemple 7 : Appel d'une procédure qui renvoie un nombre binaire à l'aide d'une variable CL de nombre entier

DCL   VAR(&VAR2)  TYPE(*INT)  LEN(4)
 :
CALLPRC   PRC(RTNINT)  RTNVAL(&VAR2)

La procédure nommée RTNINT renvoie une valeur binaire à 4 octets, stockée dans la variable CL de nombre entier signé à 4 octets &VAR2.

Exemple 8 : Appel d'une procédure - Transmission d'un paramètre par valeur

DCL   VAR(&POS)  TYPE(*INT)  LEN(2)
 :
CALLPRC   PRC(SCAN_STRING)  PARM((&STR1 *BYREF) (' ' *BYVAL)) +
          RTNVAL(&POS)

La procédure nommée SCAN_STRING est appelée avec deux paramètres. La variable CL &STR1 est transmise par référence et la chaîne de caractères constante ' ' (un blanc) est transmise par valeur à SCAN_STRING. La procédure SCAN_STRING doit être définie pour recevoir le premier paramètre en tant que pointeur de chaîne de caractères et le second paramètre en tant que chaîne de caractères à un octet. Elle doit renvoyer une valeur binaire à deux octets, stockée dans la variable CL de nombre entier signé &POS.

Exemple 9 : Transmission de paramètres avec des types et des longueurs explicites

CALLPRC   PRC(MYPROC) +
          PARM(('ABC' *BYVAL (*CHAR 50)) +
               (1234 *BYVAL (*DEC 12 2)) (&VAR1))

La procédure nommée MYPROC est appelée. Le programme appelant transmet trois paramètres : La constante alphanumérique 'ABC' est transmise sous forme de chaîne alphanumérique de 50 octets, la constante numérique 1234 est transmise sous forme de valeur décimale condensée avec 12 chiffres au total et 2 chiffres décimaux (12 2), et la variable CL &VAR1 est transmise par référence. Les attributs de la variable CL déterminent ceux du troisième paramètre.

Exemple 10 : Transmission de paramètres d'expression avec des types et des longueurs par défaut

CALLPRC   PRC(MYPROC) PARM((&CMD) (%SIZE(&CMD)))

La procédure nommée MYPROC est appelée. Le programme appelant transmet deux paramètres : La variable CL &CMD est transmise par référence, l'expression numérique %SIZE(&CMD) est transmise sous forme de valeur décimale condensée avec 15 chiffres au total et 5 chiffres décimaux (15 5). Les attributs de la variable CL déterminent ceux du premier paramètre.

Exemple 11 : Transmission de paramètres d'expression avec des types et des longueurs explicites

CALLPRC   PRC(MYPROC) +
          PARM((%SST(&VAR1 5 2) *BYVAL (*CHAR 50)) +
               ((&VAR2 + 1) *BYVAL (*DEC 12 2)))

La procédure nommée MYPROC est appelée. Le programme appelant transmet deux paramètres : L'expression alphanumérique %SST(&VAR1 5 2) est transmise sous forme de chaîne alphanumérique de 50 octets, l'expression numérique (&VAR2 + 1) est transmise sous forme de valeur décimale condensée avec 12 chiffres au total et 2 chiffres décimaux (12 2).

Exemple 12 : Transmission de paramètres d'expression avec des types et des longueurs explicites

CALLPRC   PRC(MYPROC) PARM((&CMD) +
                           (%SIZE(&CMD) *BYVAL (*INT 4)))

La procédure nommée MYPROC est appelée. Le programme appelant transmet deux paramètres : La variable CL &CMD est transmise par référence, l'expression numérique %SIZE(&CMD) est transmise sous forme de nombre entier de 4 octets. Les attributs de la variable CL déterminent ceux du premier paramètre.

Exemple 13 : Appel d'une procédure avec des constantes en virgule flottante et des types et des longueurs explicites

CALLPRC   PRC(PRC1)  PARM((1.5E3 *BYVAL (*FLT 4)) +
                          (*INF  *BYVAL (*FLT 4))) +
                     RTNVAL(&RVAL)

La procédure nommée PRC1 est appelée avec les deux valeurs en virgule flottante simple précision qui lui sont transmises. La valeur renvoyée est stockée dans la variable &RVAL.

Messages d'erreur

Messages *ESCAPE

CPF0806
Erreur lors du démarrage de la procédure.

© Copyright IBM Corp. Texte d'aide reproduit à des fins de formation.