CICS – READ

La commande READ lit un enregistrement à partir d’un fichier à l’aide de la clé primaire. La commande READ est utilisée pour le traitement aléatoire.

Syntaxe:

Vous trouverez ci-dessous la syntaxe de la commande READ :

EXEC CICS READ
   FILE('nomfichier')
   INTO(zone-donnee)
   RIDFLD(zone-donnee) [RBA|RRN]
   LENGTH(valeur-donnee)
   KEYLENGTH(valeur-donnee)
END-EXEC.

Pour les commandes UPDATE et non-UPDATE, vous devez identifier l’enregistrement à récupérer par le champ d’identification d’enregistrement spécifié dans l’option RIDFLD. Immédiatement après l’exécution d’une commande READ UPDATE, la zone de données RIDFLD est disponible pour être réutilisée par le programme d’application.


Voyons les paramètres utilisés dans la commande READ :

  • FILE(nomfichier)
    Spécifie le nom du fichier auquel accéder.
  • INTO(zone-donnee)
    Spécifie la zone de données dans laquelle l’enregistrement extrait de l’ensemble de données doit être écrit.Lorsque INTO est spécifié, LENGTH doit être spécifié explicitement ou doit pouvoir être défini par défaut à partir de l’option INTO à l’aide de la référence d’attribut de longueur dans le langage assembleur
  • LENGTH
    Il spécifie le nombre maximum de caractères pouvant être lus dans la zone de données spécifiée. Il doit s’agir d’une valeur binaire demi-mot (PIC S9(4) COMP). Une fois la commande READ terminée, CICS remplace la valeur maximale que nous spécifions par la longueur réelle de l’enregistrement. Pour cette raison, nous devons spécifier LENGTH comme nom d’une zone de données plutôt qu’un littéral et devons réinitialiser cette zone de données si nous l’utilisons pour LENGTH plus d’une fois dans le programme. Un enregistrement plus long déclenchera une condition d’erreur.
  • RIDFLD(zone-donnee)
    Spécifie le champ d’identification de l’enregistrement.Il porte le nom de la zone de données contenant la clé de l’enregistrement que l’on veut lire.
  • KEYLENGTH(valeur-donnee)
    spécifie la longueur (demi-mot binaire) de la clé qui a été spécifiée dans l’option RIDFLD, sauf lorsque RBA ou RRN est spécifié, auquel cas la valeur KEYLENGTH n’est pas valide. Cette option doit être spécifiée si GENERIC est spécifié, et elle peut être spécifiée chaque fois qu’une clé est spécifiée. Cependant, si la longueur spécifiée est différente de la longueur définie pour l’ensemble de données et que l’opération n’est pas générique, la condition INVREQ se produit. La condition INVREQ se produit également si GENERIC est spécifié et que la valeur KEYLENGTH n’est pas inférieure à celle spécifiée dans la définition VSAM.

Exemple:

Voyons un exemple de programme CICS pour la commande READ :

IDENTIFICATION DIVISION.
PROGRAM-ID. IBMMF.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-REC-LEN         PIC S9(4) COMP.
01 WS-KEY-LEN         PIC S9(4) COMP.
01 WS-REC-KEY         PIC 9(6).
01 WS-REC-DATA        PIC X(80).
PROCEDURE DIVISION.
        MOVE +80           TO WS-REC-LEN.
        MOVE ‘502258’      TO WS-REC-KEY.
        MOVE 6             TO WS-KEY-LEN.
        EXEC CICS READ
          FILE('STDLST')
          INTO(WS-REC-DATA)
          LENGTH(WS-REC-LEN)
          RIDFLD(WS-REC-KEY)
          KEYLENGTH(WS-KEY-LEN)
        END-EXEC.

La description:

Ce programme a lu l’enregistrement dans le fichier ‘STDLST’ pour la valeur de clé ‘502258’ et a écrit les données dans WS-REC-DATA.

Nom de fichier-‘STDLST’ est le nom du fichier que nous voulons lire. Il s’agit du nom de fichier symbolique CICS qui identifie l’entrée FCT (table de contrôle des fichiers) pour le fichier. Les noms de fichiers peuvent comporter jusqu’à 8 caractères et doivent être placés entre guillemets s’ils sont littéraux.

Après l’exécution, WS-REC-DATA fera lire l’enregistrement de données à partir de ‘STDLST’ dont la valeur de clé est ‘502258’.


Options de commande de lecture :

Voyons quelques-unes des options fréquemment utilisées avec la commande READ.

  • GENERIC
    Pour les demandes de clé partielles, l’option GENERIC peut être utilisée. La longueur de la clé partielle doit être spécifiée dans l’option KEYLENGTH.Il est utilisé lorsque nous ne connaissons pas la valeur complète de la clé. Par exemple, nous voulons un enregistrement dont la clé primaire commence par ‘999’ et le reste de la clé peut être n’importe quoi. Bien que la longueur de la clé soit de 6 caractères, nous n’en mentionnons que 3. Il est important de mentionner la longueur de la clé qui donne la longueur pour laquelle elle doit faire la correspondance. Le premier enregistrement qui répond aux critères sera sélectionné.
  • UPDATE
    Spécifie que l’enregistrement doit être obtenu pour la mise à jour ou la suppression. Si cette option est omise, une opération en lecture seule est supposée. UPDATE garantit l’intégrité en lecture.Spécifier UPDATE donne à votre transaction le contrôle exclusif de l’enregistrement demandé.
  • EQUAL
    Il précise que nous ne voulons que l’enregistrement dont la clé correspond exactement à ce qui est spécifié par RIDFLD.
  • GTEQ
    Si la recherche d’un enregistrement qui a la même clé (complète ou générique) que celle spécifiée dans l’option RIDFLD échoue, le premier enregistrement qui a une clé supérieure est récupéré. En d’autres termes, il spécifie que nous voulons le premier enregistrement dont la clé est supérieure ou égale à la clé spécifiée dans le RIDFLD.
  • RBA
    Spécifie que le fichier est ESDS et que l’option RIDFLD doit être interprétée comme l’adresse d’octet relative.
  • RRN
    Spécifie que le fichier est RRDS.

Exemples:

L’exemple suivant vous montre comment lire un enregistrement d’un fichier nommé STDFL dans une zone de données spécifiée.

    EXEC CICS READ
         INTO(WS-RECORD)
         FILE('STDFL')
         RIDFLD(WS-ACCTNO)
    END-EXEC

L’exemple suivant vous montre comment lire un enregistrement à mettre à jour à partir d’un fichier VSAM à l’aide d’une clé générique et en spécifiant une recherche de clé supérieure ou égale.

    EXEC CICS READ
         INTO(RECORD)
         LENGTH(RECLEN)
         FILE('STDFL')
         RIDFLD(ACCTNO)
         KEYLENGTH(4)
         GENERIC
         GTEQ
         UPDATE
    END-EXEC


Lire les conditions d’exception de commande :

ExceptionLa description
DISABLEDUn fichier est désactivé
NOTFNDUne tentative de récupération d’un enregistrement en fonction de l’argument de recherche fourni échoue.
FILENOTFOUNDLe nom de fichier fourni dans l’option FILE n’est pas défini pour CICS.
NOTAUTHUne vérification de la sécurité des ressources a échoué sur FILE(filename).(c’est-à-dire que l’utilisateur n’a pas suffisamment d’autorisations pour accéder au fichier).
LEGERRLa longueur d’un enregistrement lu avec l’option INTO spécifiée dépasse la valeur spécifiée dans l’option LENGTH.
DUPKEYSi plus d’un enregistrement satisfait la condition sur la clé alternative.