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. |
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. |
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 |
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. |
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 |
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') |
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" ' # # # ############################################ |
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) |
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. |
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) |
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) |
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) |
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. |
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 |
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")) ') + |
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 -- |
%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') |
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) |
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 |
- : 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. |
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 |
%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 |
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 |
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) |
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 |
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) |
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 |
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 ...) |
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) |
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 |
* 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.')) -------------- -------------- |
EXEMPLE 2 -------------- -------------- OPNQRYF FILE(FICHA FICHB) FORMAT(JOINAB) + MAPFLD((DATE 'FICHA/DATE')) -------------- -------------- EXEMPLE 3 -------------- -------------- OPNQRYF FILE(FICHA) FORMAT(FICHAA) + MAPFLD((CONCAT 'NOM *cat PRENOM')) -------------- -------------- |
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 |
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 |
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. |
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 |
* 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: |
+ 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). |