La commande OPNQRYF

BoTTom |    Changer de couleur
 
   OUVERTURE D'UN FICHIER D'ANALYSE     O P N Q R Y F .
   --------------------------------
 
 
 
 LA COMMANDE OPNQRYF EST UNE COMMANDE DE LA BASE DE DONNEES VOUS
 
 PERMETTANT D'EXECUTER DES FONCTIONS SUR LES DONNEES DE LA PLUS
 
 SIMPLE DES FACONS:
 
 
 
 
 LA COMMANDE OPNQRYF AGIT COMME 1 FILTRE ENTRE LE PROGRAMME ET
 
 LES ENREGISTREMENTS DE LA BASE DE DONNEES.
 
 
 
 


|    Changer de couleur
 
 
 A L'INVERSE DES FICHIERS CREES PAR CRTPF OU CRTLF CETTE COMMANDE
 
  NE CREE PAS UN OBJET MAIS SEULEMENT UN O.D.P. (OPEN DATA PATH)
 
  QUI SERA UTILISE DANS UN JOB. LE SYSTEME, SUIVANT LES BESOINS
 
  CREERA DES INDEXS, DES FICHIERS TEMPORAIRES DANS QTEMP.
 
 
 
 
 LA COMMANDE OPNQRYF NE NECESSITE PAS DE SOURCE , ELLE DEFINIRA
 
   DYNAMIQUEMENT LE FICHIER.
 
 
 
 
 
 


|    Changer de couleur
 
 CETTE COMMANDE PERMETTRA DYNAMIQUEMENT DE :
 
                 * FAIRE UNE SELECTION D'ENREGISTREMENTS
 
                 * CREER UN CHEMIN D'ACCES
 
                 * DEFINIR DES JONCTIONS
 
                 * TRAITER LES CLES UNIQUES
 
                 * DEFINIR DES ZONES DE TRAVAIL
 
                 * TRAITER DES GROUPES D'ENREGISTREMENTS
 
                 * DONNER DES OPTIONS D'OPTIMISATION
 
 
 
 
 
 


|    Changer de couleur
 
 POUR COMPRENDRE LA COMMANDE VOUS DEVEZ VOUS FAMILIARISER AVEC LES
 
 2 APPROCHES DE BASE.
 
 
           - UTILISER LE FORMAT D'1 FICHIER
 
 
           - UTLISER UN FICHIER AVEC UN FORMAT DIFFERENT
              (ex: pour créer des zones de travail ou réaliser une jonction)
 
 
 
 
 UTILISER LE FORMAT D'UN FICHIER
 
 
 CETTE APPROCHE VOUS PERMETTRA PAR EXEMPLE DE TRAITER LES ENREGISTREMENTS
 
 D'UN FICHIER POUR LESQUELS LA ZONE CODE CONTIENT LA VALEUR A.
 


|    Changer de couleur
 
 VOUS ECRIREZ VOTRE PROGRAMME COMME S'IL N'Y AVAIT QUE CES ENREGISTREMENTS
 
 PUIS VOUS SPECIFIEREZ LE FICHIER DEVANT ETRE TRAITE ET UTILISEREZ LE
 
 FORMAT QUI EXISTE DANS LE FICHIER.
 
 
 EN EXECUTANT LA COMANDE OPNQRYF AVANT L'APPEL DU PROGRAMME, VOTRE
 
 PROGRAMME NE TRAITERA QUE LES ENREGISTREMENTS AYANT "A" DANS LA ZONE CODE.
 
 VOUS POUVEZ UTILISER CETTE APPROCHE QUAND VOUS VOULEZ SELECTIONNER
 
 CERTAINS ENREGISTREMENTS, OBTENIR LES ENREGISTREMENTS DANS UNE
 
 SEQUENCE DIFFERENTE DE CELLE DU FICHIER, OU LES DEUX.
 
  A SELECTION D'ENREGISTREMENT 
 
 ETUDIONS QUELQUES EXEMPLES DE L'UTILISATION DE LA COMMANDE OPNQRYF
 AVEC DES SELECTIONS D'ENREGISTREMENTS


|    Changer de couleur
 
 1er EXEMPLE 
 
 
 NOUS VOULONS SELECTER TOUS LES ENREGISTREMENTS DU FICHIER FICHA
 
 OU LA VALEUR DE LA ZONE CODE EST A.
 
 LE PROGRAMME SERA PGMB
 
 
 OVRDBF     FILE(FICHA) SHARE(*YES)      !-!-- le délimitateur de littéral
                                         v v      est le guillemet (")
 OPNQRYF    FILE(FICHA) QRYSLT('CODE *EQ "A"')
 CALL       PGM(PGMB)          ^
 CLOF       FILE(FICHA)        !---------les quotes (') marquent le début et
 DLTOVR     FILE(FICHA)                  la fin de la sélection, si celle-ci
                                          est une constante.
 
 PRENONS UN EXEMPLE AVEC UNE ZONE NUMERIQUE
 OPNQRYF    FILE(FICHA) QRYSLT('MT *GT 1000.00')
 


|    Changer de couleur
 
 2ème EXEMPLE 
 
 NOUS VOULONS SELECTER TOUS LES ENREGISTREMENTS DU FICHIER FICHA
 
 OU LA VALEUR DE LA ZONE DATE (type *CHAR) EST EGAL A LA VARIABLE &DATEJOUR
 
 VOUS VOUS ASSUREREZ QUE LES 2 DATES ONT LE MEME FORMAT.
 
 LE PROGRAMME SERA PGMB
 
 RTVSYSVAL  SYSVAL(QDATE) RTNVAR(&DATJOUR)
 OVRDBF     FILE(FICHA) SHARE(*YES)
 
 OPNQRYF    FILE(FICHA) QRYSLT('DATE *EQ "' *CAT &DATJOUR *CAT '" ')
 
 CALL       PGM(PGMB)         ############################################ 
 CLOF       FILE(FICHA)       # Résultat:                                # 
 DLTOVR     FILE(FICHA)       #           '   DATE *EQ "aammjj"   '      # 
                              #                                          # 
                              ############################################ 
 


|    Changer de couleur
 
 3ème EXEMPLE 
 
 NOUS VOULONS SELECTER TOUS LES ENREGISTREMENTS DU FICHIER FICHA
 
 OU LA VALEUR DE LA ZONE DATE (type *CHAR) EST DANS L'ANNEE 86
 
 VOUS VOUS ASSUREREZ QUE LA DATE EST DANS LE FORMAT YYYYMMDD.
 
 LE PROGRAMME SERA PGMC
 
 
 OVRDBF     FILE(FICHA) SHARE(*YES)
 
 OPNQRYF    FILE(FICHA) QRYSLT('DATE *EQ %RANGE("19860101" "19861231")')
 
 CALL       PGM(PGMC)
 CLOF       FILE(FICHA)
 DLTOVR     FILE(FICHA)
 
 
 


|    Changer de couleur
 
 4ème EXEMPLE 
 
 NOUS VOULONS SELECTER TOUS LES ENREGISTREMENTS DU FICHIER FICHA
 
 DANS LESQUELS LA ZONE ADDR CONTIENT LA CHAINE DE CARACTERES "PARIS"
 
 QUELQUE SOIT L'ENDROIT OU ELLE APPARAIT DANS LA ZONE:
 
 LE PROGRAMME SERA PGMC
 
 
 OVRDBF     FILE(FICHA) SHARE(*YES)
 
 OPNQRYF    FILE(FICHA) QRYSLT('ADDR *CT "PARIS"')
 
 CALL       PGM(PGMC)
 CLOF       FILE(FICHA)
 DLTOVR     FILE(FICHA)
 
 
 DANS CET EXEMPLE ON SUPPOSERA LES DONNEES EN MAJUSCULES.


|    Changer de couleur
 
 SI L'ON VOULAIT LA SELECTION DANS LE CAS DES MINUSCULES ET DES MAJUSCULES
 
 NOUS SPECIFIERONS UNE FONCTION DE TRADUCTION grâce à la table système
 
 de conversion minuscules/MAJUSCULES "QSYSTRNTBL".
 
 OPNQRYF    FILE(FICHA) QRYSLT('%XLATE(ADDR QSYSTRNTBL) *CT "PARIS"')
 
 5ème EXEMPLE 
 
 NOUS VOULONS SELECTER TOUS LES ENREGISTREMENTS DU FICHIER FICHA
 DANS LESQUELS LA ZONE TOTAL EST EGAL A ZERO ou bien AYANT DERDAT
 (format YYYYMMDD) < ou = à 19851231.
 LE PROGRAMME SERA PGMC
 
 OVRDBF     FILE(FICHA) SHARE(*YES)
 OPNQRYF    FILE(FICHA) QRYSLT('TOTAL *EQ 0 *OR DERDAT *LE "19851231"')
 CALL       PGM(PGMC)
 CLOF       FILE(FICHA)
 DLTOVR     FILE(FICHA)
 


|    Changer de couleur
 
 6ème EXEMPLE 
 
 NOUS AVONS UNE ZONE DATE NUMERIQUE CONDENSEE AYANT LE FORMAT ANGLOSAXON
 (MDY) ET NOUS VOULONS SELECTER TOUS LES ENREGISTREMENTS DE L'ANNEE
 1986. ON NE PEUT PAS EFFECTUER DIRECTEMENT DES SELECTIONS SUR UNE
 PARTIE D'UNE ZONE CONDENSEE. ALORS ON UTILISERA LA FONCTION
 MAPFLD POUR CREER UNE ZONE QUE L'ON POURRA UTILISER POUR EFFECTUER
 LA SELECTION. ON CONVERTIRA LA ZONE CONDENSEE EN ETENDUE PUIS
 LA ZONE ETENDUE EN ALPHANUMERIQUE.
 
 
 OVRDBF     FILE(FICHA) SHARE(*YES)
 
 OPNQRYF    FILE(FICHA) QRYSLT('AN *EQ "1986" ') +
            MAPFLD((ZONE8 DATE *ZONED 8) +
                   (CHAR8 ZONE8 *CHAR 8) +
                   (AN '%SST(CHAR8 5 4)' *CHAR 4))
 CALL       PGM(PGMC)
 CLOF       FILE(FICHA)
 DLTOVR     FILE(FICHA)
 


|    Changer de couleur
 
 UNE AUTRE FACON DE LE FAIRE.
 
 OPNQRYF    FILE(FICHA) QRYSLT('%SST(CHAR8 5 4) *EQ "1986" ') +
            MAPFLD((ZONE8 DATE *ZONED 8) +
                   (CHAR8 ZONE8 *CHAR 8)
 
  ou
 
 OPNQRYF    FILE(FICHA) QRYSLT('%SST(CHAR8 5 4) *EQ "1986" ') +
            MAPFLD((CHAR8 '%DIGITS(DATE)' *CHAR 8)
 
  ou
 
 OPNQRYF    FILE((FICHA)) QRYSLT('%DIGITS(DATE) *EQ %WLDCRD("*1986") ')
 
                                                    (voir ci dessous)
 
 
 
 
 


|    Changer de couleur
 
 EXEMPLE 7 
 
 NOUS AVONS UNE ZONE DATE NUMERIQUE CONDENSEE AYANT LE FORMAT ANGLOSAXON
 (MDY) ET NOUS VOULONS SELECTER TOUS LES ENREGISTREMENTS DE MARS
 1986. POUR FAIRE CECI NOUS ALLONS UTILISER LES FONCTIONS MAPFLD
 ET DANS QRYSLT LA "WILD CARD".
 
 OVRDBF     FILE(FICHA) SHARE(*YES)
 OPNQRYF    FILE(FICHA) QRYSLT('CHAR6 *EQ %WLDCRD("03__1986")') +
            MAPFLD((ZONE8 DATE *ZONED 8) +
                   (CHAR8 ZONE8 *CHAR 8)
 CALL       PGM(PGMC)
 CLOF       FILE(FICHA)
 DLTOVR     FILE(FICHA)
 
 
 LE CARACTERE DE SOULIGNEMENT (_) PERMET D'INDIQUER QU'UN CARACTERE
 N'IMPORTE LEQUEL PEUT SE TROUVER A CET EMPLACEMENT.
 
 UN AUTRE CARACTERE (*) PERMETTRA D'INDIQUER QUE ZERO OU PLUSIEURS
 CARACTERES (N'IMPORTE LESQUELS), PEUVENT SE TROUVER A CET EMPLACEMENT.


|    Changer de couleur
 
 
    EX:  %WLDCRD("A*")')
         TOUS CEUX COMMENCANT PAR A
 
    EX:  %WLDCRD("*A*B*")')
          TOUS CEUX AYANT UN A PUIS UN B QUELQUES SOIENT LEURS
          POSITIONS RESPECTIVES
 
      Soit Z1 = 'AXYC'
           Z2 = 'ABC '
           Z3 = 'TAC '
           Z4 = 'AABCC'
 
           %WLDCRD("A_C*")   est vrai pour Z2
           %WLDCRD("A*C*")   est vrai pour Z1,Z2,Z4
           %WLDCRD("_A*C*")  est vrai pour Z3,Z4
           %WLDCRD("*A*C*")  est vrai pour Z1,Z2,Z3,Z4
 
 
 
 


|    Changer de couleur
 
 EXEMPLE 8 
 
 NOUS POUVONS AUSSI COMBINER PLUSIEURS SELECTIONS
 
      QRYSLT('DATE *EQ "19860101" *AND TOTAL *GT 5000.00')
 
      QRYSLT('DATE *EQ "19860101" *OR TOTAL *GT 5000.00')
 
      QRYSLT('CODE *EQ "A" *AND TYPE *EQ "X" *OR CODE *EQ "B" ')
      QUI PEUT S'ECRIRE AUSSI
      QRYSLT('CODE *EQ "A" & TYPE *EQ "X" ! CODE *EQ "B" ')
 
      ATTENTION LA CONDITION *AND EST exécutEE AVANT LA CONDITION *OR
 
       QRYSLT('(CODE *EQ "A" *OR CODE *EQ "B") *AND TYPE *EQ "X" +
                *OR CODE *EQ "C" ')
 
 NOUS POUVONS AUSSI NIER UNE CONDITION
 
       QRYSLT('*NOT (CHAR6 *EQ %WLDCRD("03__1986")) ') +
 


|    Changer de couleur
 
 DIFFERENCE AVEC LE CL :
 
       *BCAT *TCAT ne sont pas supportés
 
       // (le reste), ** (élévation a la puissance),
 
                      *XOR (ou exclusif) sont supportés
 
      LES CONDITIONS DE SELECTION PEUVENT UTILISER:
 
             LES FONCTIONS : %ABSVAL  valeur absolue
 
                             %SST     extraction
 
                             %DIGITS  conversion numérique/alpha
 
                             %AND     --
                                       !
                             %OR        > fonctions bit à bit.
                                       !
                             %NOT     --


|    Changer de couleur
 
                             %XLATE    conversion
 
                             %RANGE    intervalle
 
                             %VALUES   liste de valeurs
 
                             %WLDCRD   recherche d'une configuration
                                        de caractères
 
                             %LEN(exp) renvoie la lg d'une expression
 
                             %STRIP(chaine C arg)
 
                                       supprime de la chaine les caract (C)
                                       arg: *LEAD = à G, *TRAIL = à D
                                            *BOTH = aux deux extrémités.
 
                             une opération mathématique peut servir
                             aussi comme zone de sélection:
                             ex: QRYSLT('A/B > 2')
                                 QRYSLT('QTE * PU > 10000.00')


|    Changer de couleur
  B OPNQRYF et DATES 
 
 1/comparaison avec une variable de même type   'DATCHG > DATCRT'
                  avec une constante (charactère)  'DATCHG > "01/01/94" '
 
                  attention, respecter le format et les séparateurs.
 
 2/calcul
 
   avec des fonctions intégrées de durée :
        %DURYEAR( ) %DURMONTH( ) %DURDAY( )
        %DURHOUR( ) %DURMINUTE( ) %DURSEC    %DURMICSEC( )
 
 OU
   avec une durée numérique :
        date = décimale 8,0 sous forme yyyymmdd (nombre d'années-mois-jours)
          (le résultat d'une opération date-date est sous ce format)
        heure= décimale 6,0 sous forme hhmmss   (nombre d'heures-minutes-s)
          (le résultat d'une opération heure-heure est sous ce format)
        horodatage= décimale (20,6) sous forme yyyymmddhhmmsscccccc
          (le résultat d'une opération timestamp-timestamp est sous ce
                                                               format)


|    Changer de couleur
 
 3/ avec des opérations + et - .
 
    + : Ajout d'une durée (incrémentation)
 
        DATE + 215 (date + 2 mois et 15 jours)
 
        DATE + %DURMONTH(2) + %DURDAY(15)  (idem)
 
        si l'on ajoute une durée en mois (%DURMONTH) le jour reste inchangé
         sauf s'il est plus grand que le dernier jour du mois auquel cas il
         est remplacé par le dernier jour du mois.
 
        %DATE('30.01.1994') + %DURMONTH(1) devient 28.02.1994
 
        Modifier une partie de date affecte les éléments dépendants
 
         Ajouter un nombre de jours peut modifier le mois et l'année
 
         Ajouter un nombre de mois peut modifier l'année
 
 


|    Changer de couleur
 
    - : différence entre ....
 
        DATE1 - DATE2 (résultat sous forme de durée)
 
        %DATE('15.03.2000') - %DATE('31.12.1999') = 215 (2 mois et 15 jours)
 
      : retrait d'une durée (décrémentation)
 
        DATE - %DAYS(15)         ( - 15 jours)
 
         mêmes remarques que pour l'incrémentation
 
 
 
    Pour une variable de type horodatage
 
     la modification de l'heure(+ ou -)
       peut entrainer la modification de la date.
     la modification des microsecondes
       peut entrainer une modification de l'heure.
 


|    Changer de couleur
 DATES - Liste des Fonctions associées:
 -------------------------------------
 
 %CURDATE, %CURTIME, %CURTIMESTP  sans argument, donnent date/heure en cours
 
   QRYLST('DATCRT = %CURDATE')
 
 %DATE, %TIME, %TIMESTP renvoient date/heure de l'argument
 
         l'argument peut être une variable horodatage pour %DATE, %TIME
                              une constante caractère (attention au format)
                              une variable caractère
 
   QRYSLT('%DATE(DAT8) = %CURDATE) ou %DATE(VHORO) = "12/12/94"   ....
 
 %DAY, %MONTH, %YEAR, %HOUR, %MIN, %SECOND, %MICSEC
 
                         renvoient une PARTIE de l'argument (Binaire 4)
 
 
    QRYSLT('%MONTH(DATE1) = 12)  ou %MONTH(DATE1 - DATE2) > 1
 


|    Changer de couleur
 %CHAR(date/heure format)
 
      renvoie date ou heure sous format caractère
 
   QRYLST('%CHAR(DATE1 "EUR") = "28.02.1994")
 
   sont admis ISO, EUR, USA et JIS. Par défaut c'est le format du job.
 
 
 %DAYS( )               renvoie une date sous format numérique (Binaire 4)
 
                         sous la forme nombre de jours -1 depuis 01/01/0001
 
 
         date1 - date2      produit un résultat aaaammjj = une durée
 
         %days(date1) - days(date2) un résultat   jjjjjj = un nbr de jours
 
 
 %MIN et %MAX acceptent les variables de type DATE, HEURE, HORODATAGE
       comme SQL
 


|    Changer de couleur
 
  C SPECIFICIER DES CLEFS 
 
 
 NOUS POUVONS SPECIFIER D'AUTRES CLEFS QUE CELLES DU FICHIER SUR
 LEQUEL PORTE L'OPNQRYF. MAIS NOUS POUVONS AUSSI CONSERVER CELLES
 DU FICHIER.
 
 
 LA SPECIFICATION DE CLEF SE FERA grâce AU PARAMETRE KEYFLD DE
 LA COMMANDE OPNQRYF.
 
 ATTENTION LA VALEUR PAR DEFAUT EST "*NONE" (sur le n° de rang)
  VOUS DEVEZ INDIQUER "*FILE" POUR UTILISER LES MEME CLEFS QUE LE FICHIER
 
 
 QUELQUES EXEMPLES DE SPECIFICATION DE CLEFS DANS L'OPNQRYF
 
 
 
 
 


|    Changer de couleur
 EXEMPLE 1 
 
 NOUS VOULONS UTILISER LA CLEF NOCLI.
 
 OPNQRYF FILE(FICHA) KEYFLD(NOCLI)
 
 EXEMPLE 2 
 
 NOUS VOULONS SPECIFIER COMME 1ère CLEF NOCLI PUIS DATE 
 
 OPNQRYF FILE(FICHA) KEYFLD(NOCLI DATE)
 
 SI NOUS VOULIONS QUE LA DATE APPARAISSE DANS L'ORDRE DECROISSANT
 
 OPNQRYF FILE(FICHA) KEYFLD((NOCLI) (DATE *DESCEND))
 
 IL EST POSSIBLE AUSSI DE REDEFINIR DES CLEFS POUR UN FICHIER
 LOGIQUE JOINT EN UTILISANT UNE ZONE OU PLUSIEURS ZONES DU
 FORMAT (quel que soit le fichier auquel appartient cette zone)
 
 OPNQRYF FILE(JOINLF) KEYFLD(LIBEL)
 


|    Changer de couleur
 
  D CREER DES JOINTS DYNAMIQUES 
 
 CETTE FONCTION VOUS PERMET DE DEFINIR DES JOINTS SANS AVOIR A
 SPECIFIER DE SOURCE EN LANGAGE S.D.D..
 
 POUR CETTE FONCTION ON DOIT UTILISER LE PARAMETRE FORMAT DE LA COMMANDE
 OPNQRYF. VOUS POUVEZ JOINDRE N'IMPORTE QUEL FICHIER PHYSIQUE OU
 FICHIER LOGIQUE (même des fichiers logiques joints).
 
 AVANT DE POUVOIR UTILISER CETTE FONCTION VOUS DEVREZ CREER UN
 FICHIER QUI CONTIENDRA LA DESCRIPTION DE ZONES QUE VOUS VOULEZ
 UTILISER.(fichier modèle).
 
 SI DES ZONES EXISTENT DANS PLUSIEURS DES FICHIERS PHYSIQUES VOUS
 INDIQUEREZ grâce A LA FONCTION MAPFLD A QUEL FICHIER LA ZONE APPARTIENT
 
 
 EXEMPLE 1
 
 
 Vous voulez joindre FICHA et FICHB ensemble. La zone "joint" est


|    Changer de couleur
 NOCLI,qui exite dans les 2 fichiers. Le format que vous utilisez est
 défini dans le fichier JOINAB. Les enregistrements arrivent dans
 une séquence qui importe peu (pas de KEYFLD)
 
 description de zones des fichiers:
    FICHA        FICHB          JOINAB 
    NOCLI        NOCLI          NOCLI
    NOMCLI       TOTAL          NOMCLI
    ADDR                        TOTAL
 
 JOINAB est un fichier qui ne contient aucune donnée il a été
 créé pour définir un format.
 
    OVRDBF FILE(JOINAB) TOFILE(FICHA) SHARE(*YES)
 
    OPNQRYF FILE(FICHA FICHB) FORMAT(JOINAB) +
            JFLD((FICHA/NOCLI FICHB/NOCLI)) +
            MAPFLD((NOCLI 'FICHA/NOCLI'))
    CALL PGME
    CLOF  FILE(FICHA)
    DLTOVR FILE(JOINAB)
 


|    Changer de couleur
 EXEMPLE 2 
 
 UNE ZONE JOINT PEUT être UNE ZONE RESULTANT D'UNE OPERATION,
 EFFECTUEE grâce AU PARAMETRE MAPFLD.
 
 
    OVRDBF FILE(JOINAB) TOFILE(FICHA) SHARE(*YES)
 
    OPNQRYF FILE(FICHA FICHB) FORMAT(JOINAB) +
            JFLD((AAMMJJ FICHB/DATE)) +
            MAPFLD((AAMMJJ 'AN *CAT MOIS *CAT JOUR'))
 
    CALL PGME
 
    CLOF  FILE(FICHA)
 
    DLTOVR FILE(JOINAB)
 
 
 
 
 IL EST POSSIBLE COMME POUR LES FICHIERS JOINTS CREES grâce AU


|    Changer de couleur
 LANGAGE S.D.D. D'OBTENIR LES ENREGISTREMENTS DU FICHIER PRIMAIRE
 N'AYANT PAS DE CORRESPONDANCE DANS LE(S) SECONDAIRE(S) ET CECI
 grâce AU PARAMETRE JDFTVAL(*YES), DE PLUS VOUS POUVEZ DEMANDER
 grâce A JDFTVAL(*ONLYDFT) DE N'AVOIR QUE CEUX SANS CORRESPONDANCE.
 
 
 Exemple d'utilisation avec JDFTVAL(*ONLYDFT)
 
 
 Liste des clients sans commandes :
 
 (par définition les informations du fichier commande sont sans intérêt)
 
             OVRDBF     FILE(CLIENTP1) SHARE(*YES)
 
             OPNQRYF    FILE((CLIENTP1) (COMMANDP1)) FORMAT(CLIENTP1) +
                        JFLD((1/NOCLI 2/NOCLI *EQ)) JDFTVAL(*ONLYDFT) +
                        MAPFLD((NOCLI '1/NOCLI'))
 
             CALL pgmx (etc ...)
 
 


|    Changer de couleur
 Le fichier client est alors la référence pour le formatage des
  enregistrements ,toutes les variables du fichier commande sont abandonnées
 
 
 
  E TRAITEMENT DES CLEFS UNIQUES 
 
 CETTE FONCTION VOUS PERMETTRA DE NE TRAITER QUE LE PREMIER
 ENREGISTREMENT D'UN GROUPE. LE GROUPE EST DEFINI PAR LES ENREGISTREMENTS
  AYANT LES MEMES VALEURS DANS LEURS ZONES CLEFS.
 
 EXEMPLE 1 
 
    OVRDBF FILE(FICHA)  SHARE(*YES)
 
    OPNQRYF FILE(FICHA) +
            KEYFLD(NOCLI) +      <-- 1 enreg. par client
            UNIQUEKEY(*ALL)
    CALL PGMF
    CLOF  FILE(FICHA)
    DLTOVR FILE(FICHA)
 


|    Changer de couleur
 EXEMPLE 2 
 
 
    OVRDBF FILE(FICHA)  SHARE(*YES)
 
    OPNQRYF FILE(FICHA) +
            KEYFLD(REPRES NOCLI DATE) +  <-- 1 enreg par représentant/client
            UNIQUEKEY(2)                     (celui ayant la date la plus
                                              ancienne, DATE *DESCEND aurait
    CALL PGMF                                 donné la date la plus récente)
    CLOF  FILE(FICHA)
    DLTOVR FILE(FICHA)
 
 
  F DEFINIR DES ZONES DE TRAVAIL 
 
 CETTE FONCTION NOUS PERMET :
 
   * DE CREER DES ZONES NECESSAIRES POUR SPECIFIER DES CRITERES
     DE SELECTION ex: sous chaine d'une zone numérique condensée
 
 


|    Changer de couleur
   * D'EVITER LES AMBIGUITES LORSQU'UNE ZONE EST DEFINIE DANS
     PLUSIEURS FICHIERS, EN CAS DE JONCTION.
 
 
   * CREER DES ZONES QUI CONTIENDRONT LE RESULTAT D'UN CALCUL,
     DES CHAINES DE CARACTERES CONCATENEES, DES SOUS_CHAINES DE
     CARACTERES.
 
 
 
  EXEMPLE 1 
 
 
  --------------
  --------------
  OPNQRYF FILE(FICHA) FORMAT(FICHAA) +
          MAPFLD((MONTANT 'PRIX * QTE') (LIB10 'Constante.'))
  --------------
  --------------
 
 
 


|    Changer de couleur
  EXEMPLE 2 
 
 
  --------------
  --------------
  OPNQRYF FILE(FICHA FICHB) FORMAT(JOINAB) +
            MAPFLD((DATE 'FICHA/DATE'))
  --------------
  --------------
 
  EXEMPLE 3 
 
 
  --------------
  --------------
  OPNQRYF FILE(FICHA) FORMAT(FICHAA) +
          MAPFLD((CONCAT 'NOM *cat PRENOM'))
  --------------
  --------------
 
 
 


|    Changer de couleur
  G TRAITEMENT RECAPITULATIF 
 
 
 CETTE FONCTION NOUS PERMET :
 
 
   * DE N'OBTENIR QU'UN SEUL ENREGISTREMENT PAR GROUPE DE
     TRAITEMENT RECAPITULATIF
 
 
   * LES ZONES ET LES CLEFS NE PEUVENT être QUE RECAPITULATIVES
     OU CALCULEES (FONCTION MAPFLD)
 
 
   * GRPFLD FOURNIT LA OU LES ZONES QUI DEFINISSENT LES GROUPES
     RECAPITULATIFS
     GRPSLT DEFINIT LES CRITERES DE SELECTION D'UN GROUPE APRES
     TRAITEMENT RECAPITULATIF
 
 
 
 


|    Changer de couleur
  EXEMPLE 1 
 
 
  --------------
  OVRDBF FILE(ANALVENTE) TOFILE(VENTES) SHARE(*YES)
  OPNQRYF FILE(VENTES) FORMAT(ANALVANTE) +
          KEYFLD(NOCLI) +
          MAPFLD((NBFACT'%COUNT') (TOTVEN '%SUM(TOTFAC)') +
                (MOYEN '%AVG(TOTFAC)'))  +
          GRPFLD(NUMCLI)
  --------------
  --------------
 
  * FORMAT ANALVENT :      NOCLI
                           NBFACT
                           TOTVEN
                           MOYVEN
 
  * LE PGM A DECLARE LE FICHIER ANALVENT
 
 
  * IL  RECEVRA  UN ENREG PAR CLIENT


|    Changer de couleur
                    LA ZONE NBFACT CONTIENDRA LE NB D'ENREG TRAITES
                     AVANT RECAP (donc le nb de factures)
                    LA ZONE TOTVEN CONTIENDRA LE CUMUL DE LA ZONE TOTFAC
                     (donc le total des montants facturés)
                    LA ZONE MOYVEN CONTIENDRA LE MONTANT MOYEN D'UNE
                     FACTURE POUR CE CLIENT.(TOTVEN / NBFACT)
 
  EXEMPLE 2 
 
 
  --------------
  OVRDBF FILE(ANALVENTE) TOFILE(VENTES) SHARE(*YES)
  OPNQRYF FILE(VENTES) FORMAT(ANALVANTE) +
          KEYFLD(TOTVEN *DESCEND)
          MAPFLD((NBFACT'%COUNT') (TOTVEN '%SUM(TOTFAC)') +
                (MOYEN '%AVG(TOTFAC)'))  +
          GRPFLD(NOCLI) GRPSLT('TOTVEN >= 10000')
  --------------
  --------------
  * LE PGM RECEVRA  UN ENREG PAR CLIENT,SI LE TOTAL DES VENTES POUR CE
    CLIENT EST SUP OU EGAL A 10000F.
 


|    Changer de couleur
      LES FONCTIONS RECAPITULATIVES POSSIBLES SONT:
 
             LES FONCTIONS : %COUNT   Comptage
 
                             %SUM     Somme
 
                             %AVG     Moyenne
 
 ########################    %MIN     Minimum
 #  A NOTER:            # 
 #                      #    %MAX     Maximum
 #  Max et Min ,        # 
 #  fonctionnent aussi  #    %STDDEV  Ecart type
 #  sous la forme:      # 
 #                      #    %VAR     Variance
 #  MAX(PRIV PRIM)      # 
 #                      #    %SQRT    Racine carrée
 #  ==> renvoie la plus # 
 #      grande des 2    #    etc.. etc...
 #      colonnes.       # 
 ######################## 
  H CONSIDERATION SUR LES PERFORMANCES 


|    Changer de couleur
 
 * FONCTIONS UTILISEES PLUS PROCHES DE LA MACHINES DONC PLUS
   PREFORMANTES(seuls les enregs selectés sont traités par l'OS).
 
 * PARTAGE IMPLICITE DU CHEMIN D'ACCES QUAND CELA EST POSSIBLE.
 
   pour avoir des infos en retour (comme avec SQL)
 
   mettez vous en DEBUG (cde STRDBG), avant de passer la commande OPNQRYF
 
   l'optimiseur de requêtes placera des fichiers dans la LOG pour vous
    indiquer:
 
             1/ les indexs éxaminés
             2/ les raisons pour lesquelles il n'a pas choisi un index
             3/ les raisons pour lesquelles il A CHOSI un index
             4/  et bien d'autres infos ...
 
 * EN TRAITEMENT RECAPITULATIF, PREFERER QRYSLT A GRPSLT, LORSQUE CELA
   EST POSSIBLE
 
    EN CONCLUSION: 


|    Changer de couleur
 
      + outil "programmeur" puissant:
 
         -->  exécution proche de la machine (voie la plus rapide)
 
         -->  simplification des programmes
 
         -->  même pgm pour traitements différents
 
         -->  définition et exécution dynamique des fonctions
 
      + à ne fournir aux utilisateurs que dans un environnement
        bien défini
 
         -->  utilisation en BATCH seulement sur gros fichiers
 
         -->  définition préalable des fichiers (si fmt différent)
 
         -->  interrogation seulement (dans la plupart des cas)
 
         --> Penser aux possibilités d'optimisation (paramètre OPTIMIZE).




©AF400