COBOL utilise les numéros de niveau 01 à 49 pour définir une structure de données dans une hiérarchie de parties constitutives – plus le numéro de niveau est élevé, plus l’élément est bas dans la hiérarchie.
Les numéros eux-mêmes n’ont généralement pas de signification particulière, mais la relation entre les numéros de niveau identifie les niveaux au sein de la hiérarchie.
Cependant, lors du codage des zones de données à utiliser avec SQL, le niveau numéro 49 a une signification particulière.
49 est utilisé pour déclarer des identifiants d’éléments élémentaires de longueur variable – généralement des variables VARCHAR, LONG VARCHAR, VARGRAPHIC et LONG VARGRAPHIC.
Lorsque le niveau 49 est utilisé, le groupe contient un champ Longueur de 2 octets suivi du nom réel du champ (défini comme PIC X(##) avec ## étant la longueur maximale).
Les données du champ varient en longueur et lorsque les données sont placées dans le champ, seul le nombre de caractères défini dans l’élément de longueur est renvoyé, sans caractères de remplissage.
Cela peut causer un problème car les informations précédentes stockées dans ce champ ne sont pas automatiquement effacées et la valeur précédente était plus longue que la valeur actuelle.
Lorsque les données sont récupérées, la longueur et l’élément de données sont renseignés.
Une longueur de 0 indique que la colonne n’est pas remplie.
Voici un exemple d’utilisation du Level 49 :
----+---10----+---20----+---30----+---40----+---50----+
01 NOM-COLONNE.
49 COLONNE-NOM-LEN PIC S9(04) USAGE COMP.
49 COLONNE-NOM-DONNEES PIC X(273).
Voici une explication de cette disposition :
NOM-COLONNE
est le nom de la colonne SQLCOLONNE-NOM-LEN
est un champ entier de 1 à 4 qui contient la longueur des données dansNOM-COLONNE
.COLONNE-NOM-DONNEES
contient les données réelles et la clause PIC indique la plus grande valeur de variable pouvant être affectée à cette variable.
Exemple DCLGEN avec niveau 49
******************************************************************
* DCLGEN TABLE(MYTABLE) *
* LIBRARY('prefix.SRCLIB.DATA(MYTABLE)) *
* LANGUAGE(COBOL) *
* APOST *
* DCLBIT(YES) *
* ... IS THE DCLGEN COMMAND THAT MADE THE FOLLOWING STATEMENTS *
******************************************************************
EXEC SQL DECLARE MYTABLE TABLE
( COL1 CHAR(10) NOT NULL,
COL2 CHAR(10),
COL3 VARCHAR(12) NOT NULL,
COL4 VARCHAR(12) NOT NULL
) END-EXEC.
******************************************************************
* DECLARED VARIABLES FOR 'FOR BIT DATA' COLUMNS *
******************************************************************
EXEC SQL DECLARE
:COL3
,:COL4
VARIABLE FOR BIT DATA END-EXEC.
******************************************************************
* COBOL DECLARATION FOR TABLE MYTABLE *
******************************************************************
01 DCLMYTABLE.
10 COL1 PIC X(10).
10 COL2 PIC X(10).
10 COL3.
49 COL3-LEN PIC S9(4) USAGE COMP.
49 COL3-TEXT PIC X(12).
10 COL4.
49 COL4-LEN PIC S9(4) USAGE COMP.
49 COL4-TEXT PIC X(12).
******************************************************************
* LE NOMBRE DE COLONNES DÉCRIT PAR CETTE DÉCLARATION EST DE 4 *
******************************************************************