Accueil du site > Les articles > Utiliser l’Open Query File.
Version à imprimer Enregistrer au format PDF

Utiliser l’Open Query File.

jeudi 12 août 2004, par Grégory Jarrige Visites  4072 Première mise en ligne le lundi 3 novembre 2003.

On utilise se plus en plus SQL. Mais vous pouvez rencontrer plein de programmes existant qu utilisent des OPNQRYF.


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

P.-S.

Moins claire qu’une requête SQL. Efficace quand même.