IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AS/400 Discussion :

SQLRPG: Comptage des enreg.


Sujet :

AS/400

  1. #21
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 60
    Points : 21
    Points
    21
    Par défaut
    Sans C/FREE et C/END-FREE , les syntaxes ne sont pas acceptés...Je suis en V6R1 de l'OS400.

    Et maintenant que le LR est mis avant la routine, c'est le ENDSR qui pose souci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    
    SQL0104  30      34  Position 9 Token ENDSR was not valid. Valid tokens:     
    <END-OF-STATEMENT>.
    La compilation est pris en source en CRTSQLRPGI

  2. #22
    Membre éprouvé
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Octobre 2006
    Messages
    691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Jura (Franche Comté)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Octobre 2006
    Messages : 691
    Points : 996
    Points
    996
    Par défaut
    A tous les coups, tu as oublié un point virgule pour clore une ligne.
    Copie colle ton code ici.

  3. #23
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 60
    Points : 21
    Points
    21
    Par défaut
    Et voici le source en SQLRPG :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    
    D*******************************************
    D REQ                S            512    VARYING                                  
    D COMPT            S               2                                              
    D CODESTE         S               8  0 
    
    C/FREE                                                                     
       REQ = 'SELECT COMPT, COUNT(*) FROM FICAGENCE GROUP BY COMPT';   
       EXEC SQL PREPARE S1 FROM :REQ;                                          
       EXEC SQL DECLARE C1 CURSOR FOR S1;                                      
       EXEC SQL OPEN C1;                                                       
       EXSR LECTURE;                                                           
                                                                               
       EVAL SQLCOD = 0;                                                        
       DOW SQLCOD = 0;                                                         
       EXSR LECTURE;                                                           
       EXEC SQL INSERT INTO FICSOC VALUES (:COMPT, :CODESTE);       
       ENDDO;                                                                  
       EXEC SQL CLOSE C1;                                                      
       EVAL *INLR = *ON;                                                       
                                                                               
       BEGSR LECTURE;                                                          
       EXEC SQL FETCH NEXT FROM C1 INTO :COMPT, :CODESTE;               
       ENDSR;  
     C/END-FREE
    Formulary aurait-il raison au sujet de l'acceptation des balises Free après la V5 de l'AS400 ?

  4. #24
    Membre éprouvé
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Octobre 2006
    Messages
    691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Jura (Franche Comté)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Octobre 2006
    Messages : 691
    Points : 996
    Points
    996
    Par défaut
    J'utilise les balises Free depuis belle lurette, elles existent depuis bien avant la V5 !

    Alors tu n'as pas fais ce que je t'ai demandé !
    Vire moi les C devant /Free et /End-Free !
    Pour une meilleure lisibilité, pense à indenter. Le format libre est fait pour çà.
    J'ai tendance aussi à utiliser les majsucules / minuscules dans le même but de lisibilité.
    Ce code compile en V5R4 et V6R1. Essayé sur mes deux 520. On est bien d'accord, le type de source est SQLRPGLE :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    D REQ             s            512    Varying                   
    D COMPT           s              2                              
    D CODESTE         s              8  0                           
     /Free                                                          
       REQ = 'Select COMPT, COUNT(*) From FICAGENCE Group by COMPT';
       Exec SQL Prepare S1 From :REQ;                               
       Exec SQL Declare C1 Cursor for S1;                           
       Exec SQL Open C1;                                            
       ExSR LECTURE;                                                
                                                                    
       Eval SQLCOD = 0;                                             
       DoW SQLCOD = 0;                                              
         ExSR LECTURE;                                              
         Exec SQL Insert into FICSOC Values (:COMPT, :CODESTE);     
       EndDo;                                                       
       Exec SQL Close C1;                                           
       Eval *INLR = *ON;                                            
                                                                    
       BegSR LECTURE;                                               
         Exec SQL Fetch next From C1 Into :COMPT, :CODESTE;         
       EndSR;                                                       
      /End-Free

  5. #25
    Membre habitué
    Inscrit en
    Mars 2011
    Messages
    88
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 88
    Points : 133
    Points
    133
    Par défaut
    Citation Envoyé par ventures Voir le message
    Formulary aurait-il raison au sujet de l'acceptation des balises Free après la V5 de l'AS400 ?

    Citation Envoyé par m4k-Hurrican Voir le message
    J'utilise les balises Free depuis belle lurette, elles existent depuis bien avant la V5 !
    Bonsoir,

    Je vais mettre mon grain de sel dans la discussion, juste pour confirmer que les balises /free /end-free ne sont disponibles que depuis ... la V5R1, comme le disais Formulary.

    Hurrican, le format libre est une nouveauté V5R1 du RPG, et cela n'existait pas avant.

    Redbook SC09-2507-03 (WebSphere Development Studio: ILE RPG Programmer’s Guide Version 5 - May 2001)
    http://publib.boulder.ibm.com/iserie...s/c0925073.pdf

    What's New This Release?

    - A new free-form syntax for calculation specifications. A block of free-form calculation specifcations is delimited by the compile directives /FREE and /END-FREE

  6. #26
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 60
    Points : 21
    Points
    21
    Par défaut
    Je comprend bien tout ça
    et je suis qui plus est en V6R1
    Et pourtant, si la carte C nest pas rattachée à /FREE, l'éditeur source sous PDM QRPGLESRC / SQLRPGSRC rejette en noircissant la ligne.

    Mais je viens de lire sur le Net qu'il faut impérativement commencer le '/Free' en colonne 7 sans la carte C.
    Il y a donc tout de même une contrainte de colonnage pas si libre que ça...

    Je resteste donc...A suivre

  7. #27
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 60
    Points : 21
    Points
    21
    Par défaut
    La compilation a passée
    mais léxécution du programme ne s'effectue à cause du fichier en sortie qu'il faut journaliser selon le message :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
      Message . . . . :  -CALL PGM(SQLCOMPT)                                         
    50   09/09/13  09:22:34.131055  QTNOPNCLS    QSYS        *STMT    QSQRUN3     QSYS 
      From module . . . . . . . . :   QTNOPNSP                                         
      From procedure  . . . . . . :   SIGNAL                                           
      Statement . . . . . . . . . :   5611                                             
      To module . . . . . . . . . :   QSQOPEN                                          
      To procedure  . . . . . . . :   FULL_OPEN                                        
      Statement . . . . . . . . . :   29200                                            
    
      Message . . . . :   Member FICSOC not journaled to journal *N.
    Faut-il absolument journaliser le fichier (STRJRNPF) ou peut-on faire autrement lors de la compilation ?

  8. #28
    Membre éprouvé
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Octobre 2006
    Messages
    691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Jura (Franche Comté)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Octobre 2006
    Messages : 691
    Points : 996
    Points
    996
    Par défaut
    Options de compilation :
    Commit(*NONE)

  9. #29
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 60
    Points : 21
    Points
    21
    Par défaut
    Merci Hurricane

    Le programme tourne mais boucle malheureusement
    L'écriture 'INSERT INTO' est mal placée, car il y a écriture à chaque lecture d'enregistrements. Donc le fichier en entrée ayant plus de 20 millions d'enreg. => + 20 millions d'écriture

    C'est le total du comptage que je veux obtenir et écrire ce total dans le fichier FICSOC en sortie par société trouvée.

    Et pourquoi ça boucle ?

  10. #30
    Membre éprouvé
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Octobre 2006
    Messages
    691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Jura (Franche Comté)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Octobre 2006
    Messages : 691
    Points : 996
    Points
    996
    Par défaut
    Pourquoi çà boucle ? Parce que j'ai pas fait plus gaffe que toi, et qu'on a une belle boulette.
    Si on fait un Insert SQL, la valeur SQLCOD est renseigné par l'Insert. Et comme il se passe correctement SQLCOD est à 0, on reteste la boucle est vlan. Dans le DoW, le ExSR LECTURE devrait être décalé après l'Insert ! C'est pour çà d'ailleurs que j'ai mis une lecture avant la boucle. C'est de la prog classique.

  11. #31
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 60
    Points : 21
    Points
    21
    Par défaut
    Merci Hurricane
    Ca fonctionne bien maintenant que la lecture vient ensuite de l'écriture dans la boucle. Le comptage s'effectue bien et donne le total pour chaque société.

    Le temps de traitement est bien plus performant qu'en comptage RPG ou Query 400, soit moins d'une minute pour plus de 20 millions d'enreg.
    en soumission batch.

    C'est une façon performante de compter applicable pour d'autres tables à forte volumétrie.

  12. #32
    Membre éprouvé
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Octobre 2006
    Messages
    691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Jura (Franche Comté)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Octobre 2006
    Messages : 691
    Points : 996
    Points
    996
    Par défaut
    Hé ben voilà.
    Ça me semblait évident que ce serait plus performant. C'est sur ce genre de traitement que SQL est vraiment plus rapide.
    Tu peux passer le sujet à résolu alors !

  13. #33
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 60
    Points : 21
    Points
    21
    Par défaut
    Avant de clore, le passage en paramètre dans une commande SQL peut-elle se faire de la sorte avec un passage de paramètre par la PLIST : ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    C          *ENTRY      PLIST
    C                LIB                               10
    C                NOMFIC                        10 
    C*
      /FREE
    
    REQ = 'Select COMPT, COUNT(*) From :LIB/:NOMFIC Group by COMPT';
    ....

  14. #34
    Membre éprouvé
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Octobre 2006
    Messages
    691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Jura (Franche Comté)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Octobre 2006
    Messages : 691
    Points : 996
    Points
    996
    Par défaut
    Oui mais pas comme çà.
    Il faut construire la chaîne. Genre REQ = 'Select * from ' + %trim(NomLib) + '/' + %trim(NomFic)

  15. #35
    Membre averti
    Homme Profil pro
    Analyste-Programmeur IBM i, IBM Cognos TM1
    Inscrit en
    Août 2002
    Messages
    234
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste-Programmeur IBM i, IBM Cognos TM1
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2002
    Messages : 234
    Points : 355
    Points
    355
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    /free                                       
     sql = 'ma requête sql';                           
     exec sql prepare s1 from :sql;             
     exec sql declare c1 cursor for s1;         
     exec sql open c1;                          
     exec sql fetch next from c1 into :sql_out (une data structure);
     dow sqlCod = *Zero; 
        exec sql fetch next from c1 into :sql_out (une data structure);
     enddo;                   
     exec sql close c1;                         
     *inlr = *on;                               
    /end-free
    Pour faire propre...

    Larry57

Discussions similaires

  1. Problème avec fListeFichier : comptage des fichiers
    Par Cazaux-Moutou-Philippe dans le forum WinDev
    Réponses: 2
    Dernier message: 23/10/2006, 21h09
  2. affichage des enreg. dans sous-formulaire
    Par OBIWAN64 dans le forum Access
    Réponses: 5
    Dernier message: 27/04/2006, 08h10
  3. Unlock des enreg lockés sous une session inconnue
    Par Maglight dans le forum Oracle
    Réponses: 7
    Dernier message: 16/02/2006, 11h36
  4. Unlock des enreg lockés sous une session inconnue
    Par Maglight dans le forum Bases de données
    Réponses: 1
    Dernier message: 15/02/2006, 16h44
  5. [STATS] Outils de comptage des E/S
    Par BiM dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 08/08/2005, 12h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo