Utiliser l’Open Query File.

Opnqryf, comment faire ?

Créer un Open Query File (OQF) consiste à  créer un chemin d’accès temporaire (avec
éventuellement sélection ou omission d’enregistrements) sur un fichier DB2/400. Cela
peut être utile pour un traitement lancé peu fréquemment, ou encore un traitement pour
lequel le chemin d’accès à  un fichier peut changer en fonction de critères saisi par un
utilisateur. Naturellement, un traitement qui lance un OQF sera plus long qu’un traitement
utilisant un fichier logique équivalent, car il faut ajouter au temps d’exécution normal
du traitement le temps de création du chemin d’accès temporaire constitué par l’OQF. Le
programmeur devra donc s’interroger sur la pertinence de créer un OQF ou un fichier
logique, et dans le doute tester les performances des deux solutions.

Voici un exemple de CL utilisant un OQF : il s’agit d’un traitement d’analyse où
l’utilisateur analyse un fichier d’employés (fichier FEMPL). Il souhaite connaître la
liste des employés ayant 3 enfants (zone A0NENF), et il peut choisir de les classer par
numéro (zone A0CODE) ou par nom (zone A0NOMP) au moment de la demande. Le CL reçoit en
paramètre le nombre d’enfants souhaité, ainsi que le type de classement (‘1’ pour
classement par numéro ; ‘2’ pour classement par nom). L’impression de la liste est faite
par le programme P225R qui lit le fichier FEMPL séquentiellement en utilisant à  son insu
le chemin d’accès monté temporairement par l’OQF.

ATTENTION : L’ordre des instructions OVRDBF, OPNQRYF, CLOF et DLTOVR
est important. Regardez également comment est créée la condition (variable &COND)
et le chemin d’accès (mot clé KEYFLD).

PGM         PARM(&NBENF &CLASS)
DCL         VAR(&NBENF) TYPE(*CHAR) LEN(2)
DCL         VAR(&CLASS) TYPE(*CHAR) LEN(1)
DCL         VAR(&COND) TYPE(*CHAR) LEN(60)
CHGVAR      VAR(&NBENF) VALUE('A0NENF *EQ ' *CAT &NBENF)
OVRDBF      FILE(FEMPL) SHARE(*YES)
IF          COND(&CLASS *EQ '1') THEN(DO)
OPNQRYF     FILE((FEMPL)) QRYSLT(&COND) KEYFLD((A0CODE)) OPNID(F1)
ENDDO
ELSE        CMD(DO)
OPNQRYF     FILE((FEMPL)) QRYSLT(&COND) KEYFLD((A0NOMP)) OPNID(F1)
ENDDO
CALL        PGM(P225R) PARM(&NBENF &CLASS)
CLOF        OPNID(F1)
DLTOVR      FILE(*ALL)
ENDPGM

 

On n’est pas obligé d’écrire un programme pour éditer le résultat d’un OPNQRYF. La
commande CPYFRMQRYF (Copier depuis fichier requête) permet de copier tout ou partie d’un
fichier, ouvert à  l’aide de la commande OPNQRYF (Ouvrir un fichier de requête), dans un
fichier physique à  description interne, dans un fichier disquette, DDM ou bande. Vous
pouvez également indiquer *PRINT pour imprimer les enregistrements à  l’aide du fichier
imprimante QSYSPRT, fourni par IBM. Les paramètres de la commande CPYFRMQRYF sont les
suivants :

Copier depuis fichier requête (CPYFRMQRYF)

Indiquez vos choix, puis appuyez sur ENTREE.

ID ouverture fichier d'origine __________ Nom
Fichier de destination . . . . . __________ Nom, *PRINT
Bibliothèque . . . . . . . . . *LIBL Nom, *LIBL, *CURLIB
Membre ou label de destination *FIRST Nom, *FIRST
Remplacement ou ajout enregs . . *NONE *NONE, *ADD, *REPLACE
Créer le fichier . . . . . . . . *NO *NO, *YES
Format d'impression . . . . . . *CHAR *CHAR, *HEX

Autres paramètres

Nombre d'enreg à  copier . . . . *END Nombre, *END
Mappage de zone des formats . . *NONE *NONE, *NOCHK, *CVTSRC...

Nombre d'erreurs admises . . . . 0 Nombre, *NOMAX

Print Friendly, PDF & Email