DCL
Déclarer une variable CL
En bref
La commande DCL (Déclarer une variable CL) permet de définir les variables des programmes CL utilisés dans un programme CL ou une procédure CL ILE.
Syntaxe minimale
DCL VAR(…) TYPE(…)
Paramètres
-
VARNom de la variable CL obligatoire -
TYPEType obligatoire -
STGMémoire secondaire -
LENLongueur de la variable -
VALUEValeur initiale -
BASPTRVariable de pointeur base -
DEFVARDéfinie sur variable -
ADDRESSAdresse
Astuce : dans une session 5250, tapez DCL 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 :
- Programme batch (*BPGM)
- Programme interactif (*IPGM)
La commande DCL (Déclarer une variable CL) permet de définir les variables des programmes CL utilisés dans un programme CL ou une procédure CL ILE. Ces variables sont utilisées pour le stockage et la mise à jour des données et la réception de paramètres provenant d'un autre programme lors d'un appel. Une variable CL n'est reconnue par son nom que dans le programme qui la déclare. Elle n'est pas utilisable en dehors d'un programme CL ou d'une procédure CL ILE sauf si elle est référencée par certaines commandes (telles que DSPPGMVAR) utilisées par les programmes de débogage. Cependant, la valeur de la variable peut être transmise en tant que paramètre à un autre programme. Si une variable est déclarée mais non référencée par une autre commande dans un programme CL ou une procédure CL ILE, elle n'est pas incluse dans le programme lors de la compilation. Chaque commande DCL permet de définir les attributs d'une variable CL et de déclarer son nom dans le programme qui l'utilise.
Chaque variable CL figurant dans un programme doit être identifiée par l'une des deux commandes de déclaration. La commande DCLF (Déclarer un fichier) permet de déclarer des variables CL pour les fichiers écran et les fichiers base de données. La commande DCL permet de déclarer toutes les autres variables CL.
Restrictions: La commande DCL est admise uniquement dans un programme CL ou une procédure CL ILE. Toutes les commandes de déclaration (DCL, COPYRIGHT, DCLF et DCLPRCOPT) doivent suivre la commande PGM (Programme) et précéder les autres commandes du programme. Elles peuvent être entrées dans n'importe quel ordre.
Paramètres
| Mot-clé | Description | Valeurs possibles | Remarques |
|---|---|---|---|
| VAR | Nom de la variable CL | CL variable name | Obligatoire, positionnel 1 |
| TYPE | Type | *DEC, *CHAR, *LGL, *INT, *UINT, *PTR | Obligatoire, positionnel 2 |
| STG | Mémoire secondaire | *AUTO, *BASED, *DEFINED | Facultatif |
| LEN | Longueur de la variable | Liste d'éléments | Facultatif, positionnel 3 |
| Élément 1: Longueur | Entier | ||
| Élément 2: Nombre de positions décimales | Entier | ||
| VALUE | Valeur initiale | Valeur caractère | Facultatif, positionnel 4 |
| BASPTR | Variable de pointeur base | CL variable name | Facultatif |
| DEFVAR | Définie sur variable | Liste d'éléments | Facultatif |
| Élément 1: Nom de la variable CL | CL variable name | ||
| Élément 2: Position | 1-32767, 1 | ||
| ADDRESS | Adresse | Valeurs uniques: *NULL Autres valeurs: Liste d'éléments |
Facultatif |
| Élément 1: Nom de la variable CL | CL variable name | ||
| Élément 2: Décalage | 0-32766, 0 |
Nom de la variable CL (VAR)
Indique la variable CL à déclarer dans le programme CL ou la procédure CL ILE. La variable n'existe alors qu'au sein de ce dernier. Elle peut être transmise en tant que paramètre lors de l'appel à un autre programme, auquel cas celui-ci peut la traiter. Le nom de la variable doit commencer par une perluète (&).
Ce paramètre est obligatoire.
Type (TYPE)
Indique le type de la valeur contenue dans la variable CL à déclarer. La valeur de ce paramètre ne peut pas être indiquée par une variable CL.
Ce paramètre est obligatoire.
- *DEC
- Variable décimale contenant une valeur décimale condensée.
- *CHAR
- Variable alphanumérique contenant une valeur de chaîne alphanumérique.
- *LGL
- Variable logique contenant la valeur logique '1' ou '0'.
- *INT
- Variable de nombre entier contenant une valeur binaire signée.
- *UINT
- Variable de nombre entier contenant une valeur binaire non signée.
- *PTR
- Une variable de pointeur contenant une adresse.
Mémoire secondaire (STG)
Indique le type de mémoire pour la variable. La valeur de ce paramètre ne peut pas être indiquée par une variable CL.
- *AUTO
- La mémoire pour cette variable est allouée de façon automatique.
- *BASED
- La mémoire pour cette variable est basée sur la variable de pointeur indiquée au paramètre BASPTR (Variable de pointeur base). Une variable CL basée ne peut pas être utilisée sauf si une adresse admise a été définie pour la variable du pointeur de base.
- *DEFINED
- La mémoire pour cette variable est fournie par la variable CL indiquée au paramètre DEFVAR.
Longueur de la variable (LEN)
Indique la longueur de la variable CL à déclarer. S'il s'agit d'une valeur décimale, le nombre de chiffres figurant à droite de la virgule décimale peut être facultativement précisé. La valeur de ce paramètre LEN ne peut pas être indiquée par une variable CL.
Remarque :Si la valeur *PTR est indiquée au paramètre TYPE, vous ne pouvez pas spécifier une valeur pour ce paramètre. Les pointeurs ont une longueur fixe de 16 octets.
Elément 1 : Longueur
- longueur
- Pour les variables CL de type caractère ou entier, indiquez le nombre d'octets correspondant. Pour les variables CL décimales, indiquez le nombre maximal de chiffres correspondant. La longueur ne peut pas être supérieure à la longueur maximale admise pour ce type de variable CL. La longueur doit être égale à 2, 4 ou 8 pour les variables CL de type entier. Seules les procédures CL ILE admettent une longueur égale à 8 pour les variables CL de type entier.
Elément 2 : Nombre de positions décimales
- positions-décimales
- Cet élément n'est admis que pour les variables décimales. La longueur de la valeur inclut le nombre de positions décimales. La longueur maximale de la valeur décimale est de 15 chiffres (y compris ceux figurant à droite de la virgule décimale). Vous pouvez indiquer jusqu'à neuf positions décimales. Dans ce cas, la valeur figurant à gauche de la virgule décimale ne peut jamais être supérieure à 999,999, car seuls 6 chiffres sur les 15 restent disponibles pour la partie entière.
Si une longueur en chiffres est indiquée pour une variable décimale 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 cinq types de variable est la suivante :
- Décimal -- 15 chiffres, 9 positions décimales
- Caractère -- 32767 octets
Remarque :La valeur initiale (indiquée pour le paramètre VALUE) d'une variable CL ne peut pas dépasser 5000 caractères.
- 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
La longueur par défaut pour chacun des cinq types de variable est la suivante :
- Décimal -- 15 chiffres, 5 positions décimales
- Alphanumérique -- 32 octets
- Logique -- 1 octet
- Entier -- 4 octets
- Entier non signé -- 4 octets
Remarque :Pour les types décimal et alphanumérique, la longueur par défaut est identique à la longueur initiale de la valeur, si celle-ci est précisée au paramètre VALUE.
Valeur initiale (VALUE)
Indique la valeur initiale attribuée à la variable CL lors de sa déclaration dans le programme. Cette valeur doit être du même type que celui spécifié au paramètre TYPE. Si aucune valeur n'est indiquée, la variable prend par défaut des blancs si elle est de type caractère, la valeur 0 si elle est de type décimal, entier ou entier non signé, et la valeur '0' s'il s'agit d'une variable logique. La valeur du paramètre VALUE ne peut pas être indiquée par une variable CL.
Le paramètre VALUE ne peut pas être spécifié pour les variables CL *PTR ou les variables CL déclarées avec les valeurs *DEFINED ou *BASED indiquées au paramètre STG (Mémoire secondaire).
Si le nom de la variable déclarée est indiqué pour le paramètre PARM de la commande PGM dans le programme où la variable a été déclarée, aucune valeur initiale ne peut être spécifiée pour la variable. Dans ce cas, celle-ci reçoit sa valeur du programme appelant.
Variable de pointeur base (BASPTR)
Indique le pointeur de base d'une variable CL déclarée avec une mémoire *BASED.
Remarque :Ce paramètre est requis si la valeur *BASED est spécifiée au paramètre STG (Mémoire secondaire).
- nom-variable-CL
- Indiquez le nom d'une variable CL déclarée avec TYPE(*PTR) qui servira de pointeur de base pour la variable CL basée en cours de déclaration. Ce pointeur doit être initialisé avec une valeur avant que la variable basée puisse être utilisée.
Le nom de la variable doit commencer par une perluète (&).
Définie sur variable
Indique la variable CL sur laquelle la variable en cours de déclaration doit être définie.
Remarque :Ce paramètre est requis si la valeur *DEFINED est indiquée au paramètre STG (Mémoire secondaire).
Remarque :Une variable déclarée avec STG(*DEFINED) ne peut pas être étendue au-delà du dernier octet de la variable CL sur laquelle elle est définie.
Elément 1 : Nom de la variable CL
- nom-variable-CL
- Indiquez le nom de la variable CL sur laquelle la variable en cours de déclaration est définie.
Elément 2 : Position de début
- 1
- La variable en cours de déclaration démarre au début de la variable de définition.
- 1 à 32767
- Indiquez la position de début de la variable en cours de déclaration depuis le début de la variable de définition.
Adresse (ADDRESS)
Indique l'adresse initiale d'une variable CL déclarée avec TYPE(*PTR).
Remarque :Aucune valeur ne peut être indiquée pour ce paramètre sauf si la variable en cours de déclaration est une variable de pointeur et que le paramètre STG a pour valeur *AUTO.
Valeurs uniques
- *NULL
- Le pointeur sera initialisé avec une valeur NULL.
Elément 1 : Nom de la variable CL
- nom-variable-CL
- Indique le nom d'une variable CL destinée à être l'adresse initiale pour la variable de pointeur.
Le nom de la variable doit commencer par une perluète (&).
Elément 2 : Décalage
- 0
- La variable de pointeur a pour valeur le premier octet de la variable CL en cours d'adressage.
- 0 à 32766
- Indiquez le nombre d'octets depuis le début de la variable en cours d'adressage qui devront correspondre à la définition du pointeur.
Exemples
Exemple 1 : Indication de la longueur de la variable CL
DCL &ABLE *DEC LEN(5 2)
Cette commande déclare la variable CL &ABLE contenant une valeur décimale. Cette valeur ne peut dépasser 999.99 car LEN indique jusqu'à 5 chiffres, dont deux figurant à droite du symbole décimal. Le paramètre VALUE n'étant pas précisé et s'agissant d'une valeur numérique, &ABLE prend la valeur zéro (000.00).
Exemple 2 : Indication d'une valeur logique
DCL &SWITCH *LGL
Cette commande déclare la variable CL &SWITCH afin qu'elle contienne une valeur logique. Le type du paramètre indiquant qu'il s'agit d'une valeur logique, la variable a une longueur d'un caractère et prend la valeur '0'.
Exemple 3 : Indication de la valeur initiale de la variable CL
DCL &FILNAM *CHAR VALUE(FILEA)
Cette commande déclare la variable CL &FILNAM dont la valeur est FILEA. Cette valeur comportant 5 caractères et le paramètre LEN n'étant pas indiqué, la longueur de la variable est également de 5 caractères.
Exemple 4 : Indication de variables CL définies
DCL &QUALOBJ *CHAR LEN(20) DCL &OBJ *CHAR LEN(10) STG(*DEFINED) DEFVAR(&QUALOBJ 1) DCL &LIB *CHAR LEN(10) STG(*DEFINED) DEFVAR(&QUALOBJ 11)
La première commande DCL déclare une variable de 20 caractères dans la mémoire automatique du programme. La seconde commande DCL déclare une variable nommée &OBJ qui fait référence aux 10 premiers caractères de la variable &QUALOBJ. La dernière commande DCL déclare une variable nommée &LIB qui peut être utilisée pour faire référence aux 10 derniers caractères de la variable &QUALOBJ.
Exemple 5 : Indication de variables CL de pointeur
DCL &CHAR *CHAR LEN(10) DCL &PTR *PTR ADDRESS(&CHAR)
La seconde commande DCL déclare une variable de pointeur initialisée pour désigner la variable &CHAR dans la mémoire automatique du programme.
Exemple 6 : Indication de variables CL basées
DCL &PTR *PTR DCL &CHAR *CHAR LEN(10) STG(*BASED) BASPTR(&PTR)
La seconde commande DCL déclare une variable de type caractère détectée à l'endroit adressé par la variable &PTR. Avant que la variable &CHAR puisse être utilisée, la variable &PTR doit être initialisée avec une adresse admise en utilisant la fonction intégrée %ADDRESS.
Exemple 7 : Indication de variables CL de pointeur définies
DCL &CHAR *CHAR LEN(48) DCL &PTR *PTR STG(*DEFINED) DEFVAR(&CHAR 17)
La seconde commande DCL déclare une variable de pointeur dans les octets 17 à 32 de la variable &CHAR.
Exemple 8 : Déclaration d'un pointeur initialisé avec une valeur NULL
DCL &PAYREC *PTR STG(*AUTO) ADDRESS(*NULL)
La variable de pointer &PAYREC est déclarée avec une adresse initiale prenant une valeur NULL.
Messages d'erreur
Aucun
© Copyright IBM Corp. Texte d'aide reproduit à des fins de formation.