La commande READPREV récupère les enregistrements dans l’ordre inverse défini par la commande STARTBR.
La position du fichier peut être modifiée en déplaçant la nouvelle valeur de clé vers le contenu de RIDFLD avant la commande READNEXT ou READPREV.
Syntaxe:
Vous trouverez ci-dessous la syntaxe de la commande READPREV.
EXEC CICS READPREV
FILE(nom-fichier)
RIDFLD(zone-donnee)
INTO(zone-donnee)
LENGTH(WS-LENGTH)
KEYLENGTH(valeur-donnee)
REQID(valeur-donnee)
SYSID(nom-systeme)
END-EXEC.
READNEXT est utilisé pour lire les enregistrements dans le sens aller à partir de la position établie par STARTBR. READPREV est utilisé pour lire les enregistrements dans le sens inverse. READPREV suivi de READNEXT récupère à nouveau le même enregistrement.
Pendant la navigation, si vous souhaitez ignorer un ensemble d’enregistrements, déplacez la clé du prochain enregistrement que vous souhaitez lire vers RIDFLD, puis émettez READNEXT. C’est ce qu’on appelle sauter la lecture séquentielle. Ainsi, RIDFLD peut être utilisé à la fois comme champ d’entrée et comme champ de sortie.
Comme les fichiers VSAM sont de longueur variable dans la plupart des cas, WS-LENGTH doit être rempli avec la longueur d’enregistrement maximale avant d’émettre la commande READ. KEYLENGTH(0) placera le curseur au début du fichier.
Si vous spécifiez READPREV immédiatement après STARTBR, vous devez alors coder la clé d’un enregistrement qui existe sur l’ensemble de données. Sinon, la condition NOTFND se produit sur READPREV.
Voyons les paramètres utilisés dans la commande READPREV.
- FILE(nom-fichier)
Spécifie le nom du fichier auquel accéder. - 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. - 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(WS-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. - 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 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. 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. - REQID(valeur-donnee)
Spécifie en tant que valeur binaire demi-mot un identificateur de requête unique pour un parcours, utilisé pour contrôler plusieurs opérations de parcours sur un fichier. Si cette option n’est pas spécifiée, une valeur par défaut de zéro est supposée. - SYSID(nom-systeme)
Spécifie le nom du système vers lequel la demande est dirigée.