Code opération RPG III / RPG/400 · IBM i (AS/400) · Lecture de fichiers
KLIST
Définir une clé composée de plusieurs zones
Déclare une liste de clés : KLIST donne le nom de la liste, chaque KFLD qui le suit ajoute une zone, dans l'ordre de la clé du fichier. La page couvre aussi KFLD.
Syntaxe
C nomlst KLIST
C KFLD zone1
C KFLD zone2
- Facteur 1 (18-27) de KLIST
- Le nom de la liste de clés (6 caractères au plus). On l'écrit ensuite en facteur 1 de
CHAIN,SETLL,SETGT,READEouREDPE. - Zone résultat (43-48) de KFLD
- La zone qui fait partie de la clé. L'ordre des
KFLDdoit être celui des zones de clé du fichier, et chaque zone doit avoir le même type que la zone correspondante. Une liste plus courte que la clé du fichier est une clé partielle. - Effet
KLISTetKFLDne s'exécutent pas : ce sont des déclarations. Les opérations de fichier qui utilisent la liste lisent la valeur actuelle des zones au moment de l'appel.
À quoi ça sert
Dès qu'un fichier est indexé sur plusieurs zones, on ne peut plus donner la clé dans une seule zone. KLIST assemble les zones : ici la clé de CLIENT3V est la ville puis le numéro du client.
Une liste plus courte que la clé complète sert à lire un groupe : SETLL avec la clé complète pour se placer, READE avec la ville seule pour rester dans la ville.
Exemple 1 : CHAIN sur ville + numéro
H* KLIST : cle composee VILLE + NUMCLI sur CLIENT3V
FCLIENT3VIF E K DISK
C CLEVN KLIST
C KFLD CHERCH
C KFLD NUMERO
C MOVEL'Lyon' CHERCH 20
C Z-ADD500 NUMERO 50
C CLEVN CHAINCLIENT3V 99
C *IN99 IFEQ '0'
C NOM DSPLY
C END
C* Le client 300 existe, mais pas a Lyon
C Z-ADD300 NUMERO
C CLEVN CHAINCLIENT3V 99
C *IN99 IFEQ '1'
C 'Absent' DSPLY
C END
C SETON LR
Résultat réel, compilé par CRTRPGPGM et exécuté sur IBM i 7.5 :
Petit Atelier
Absent
La liste CLEVN rassemble CHERCH (ville) et NUMERO. Lyon + 500 existe : Petit Atelier. Lyon + 300 n'existe pas, car le client 300 est à Montpellier : le CHAIN échoue (« Absent »).
Exemple 2 : Clé complète, clé partielle
H* KLIST : cle complete pour SETLL, cle partielle pour READE
FCLIENT3VIF E K DISK
C CLEVN KLIST
C KFLD CHERCH
C KFLD NUMERO
C CLEV KLIST
C KFLD CHERCH
C MOVEL'Lyon' CHERCH 20
C Z-ADD500 NUMERO 50
C* On se place sur Lyon 500 : Lyon 200 est saute
C CLEVN SETLLCLIENT3V
C CLEV READECLIENT3V 99
C *IN99 DOWEQ'0'
C NUMCLI DSPLY
C CLEV READECLIENT3V 99
C END
C SETON LR
Résultat réel, compilé par CRTRPGPGM et exécuté sur IBM i 7.5 :
500
SETLL avec CLEVN (Lyon + 500) se place dans Lyon à partir du client 500 ; READE avec CLEV, qui ne contient que la ville, lit ce client et s'arrête ensuite. Le client 200, de Lyon aussi, est sauté.
Le piège
Les types doivent correspondre à ceux de la clé du fichier. En inversant les deux KFLD (numéro d'abord, ville ensuite), le compilateur répond QRG7072 : « Le type de KFLD diffère de celui de la zone-clé correspondante dans le fichier. La spécification n'est pas prise en compte. ». L'ordre des KFLD est l'ordre de la clé du fichier.
En RPG ILE full free
En RPG ILE full free, la liste de clés est écrite directement dans l'instruction, entre parenthèses : plus de KLIST ni de KFLD.
chain (chercher: numero) client3v;
setll (chercher: numero) client3v;
reade (chercher) client3v;