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

DB2 Discussion :

Problème de curseur dans une procédure


Sujet :

DB2

  1. #1
    Membre régulier
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Mars 2015
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Mars 2015
    Messages : 104
    Points : 72
    Points
    72
    Par défaut Problème de curseur dans une procédure
    Bonjour,

    J'ai fais une procedure qui lit dans un premier curseur un fichier de travail ou je récupère les infos suivantes: nom de fichier, sa bib et le nom du champ.(ex: Fic1/BIB1/CHAMP1)
    Avec ces infos j'exécute une requête pour savoir si dans ce fichier j'ai une valeur EP1 dans le champ (SELECTCOUNT(*) from BIB1/FIC1 WHERE CHAMP1='EP1')
    Si COUNT*) >0 alors je mets le nom du fichier correspondant dans une table File3 .

    Mais j'ai un pbm dans la déclaration du curseur curcount. A l'exécution, au niveau de j'ai le message "L'instruction préparée WSTMT n'a pas été trouvée" .

    Le code de la procédure

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    CREATE OR REPLACE PROCEDURE NLORG()        
    LANGUAGE SQL                                          
    BEGIN                                                 
        DECLARE SQLSTATE CHAR(5);                         
        DECLARE WStmt  CHAR(200);                      
        DECLARE V_NAME CHAR(10);                      
        DECLARE V_LIB CHAR(10);                       
        DECLARE V_FILE CHAR(10);                      
        DECLARE V_SQL VARCHAR(200);                       
        DECLARE V_RESULT  VARCHAR(200);                   
        DECLARE COTE  CHAR(1) DEFAULT '''';               
        DECLARE CurCount CURSOR FOR wstmt;                                                                 
     
        DECLARE CurFile2 CURSOR FOR                       
            SELECT WhLIB, WHFILE, WHFLDI                  
            FROM ikspobj_pf.file2;                        
     
    	OPEN CurFile2;                                    
        FETCH_LOOP: LOOP                                  
            FETCH CurFile2 INTO V_LIB, V_FILE, V_NAME;    
            IF SQLSTATE = '02000' THEN                    
                LEAVE FETCH_LOOP;                                                   
            END IF;                                                                 
     
        SET wstmt='SELECT COUNT(*) ' ||                                              
            'FROM '||V_LIB || '/' || V_FILE ||                                      
           ' WHERE '||V_NAME ||' = ' ||cote||'EP1'||cote;                           
     
         OPEN CurCount;                                                             
         FETCH CurCount INTO V_RESULT;                                              
         CLOSE CurCount;                                                            
           IF V_RESULT > 0 THEN                                                     
                 SET V_SQL = 'INSERT INTO ikspobj_pf.file3 VALUES ('||V_FILE||')';  
           EXECUTE IMMEDIATE V_SQL;                                                 
          END IF;                                                                   
        END LOOP;                                                                     
        CLOSE CurFile2;                                                               
     END;
    Le pbm est que le curseur change à chaque itération puisque la bib et le fichier change. Et si je mets le déclare dans la boucle du curseur2 à la compile ça passe pas.
    Ensuite s'il y a plus simple , je suis preneur! Une idée escartefigue?

  2. #2
    Membre régulier
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Mars 2015
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Mars 2015
    Messages : 104
    Points : 72
    Points
    72
    Par défaut
    il manquait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    prepare wstmt from wstmt
    entre le Set et l'open;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     SET wstmt='SELECT COUNT(*) ' ||                                              
            'FROM '||V_LIB || '/' || V_FILE ||                                      
           ' WHERE '||V_NAME ||' = ' ||cote||'EP1'||cote;                           
     
         OPEN CurCount;

  3. #3
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 311
    Points : 39 689
    Points
    39 689
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par totofff78 Voir le message
    Avec ces infos j'exécute une requête pour savoir si dans ce fichier j'ai une valeur EP1 dans le champ (SELECTCOUNT(*) from BIB1/FIC1 WHERE CHAMP1='EP1')
    Si COUNT*) >0 alors je mets le nom du fichier correspondant dans une table File3 .
    Deux remarques :
    • dans une table d'une base de données relationnelle, il n'y a pas de champs, il y a des COLONNES.
      Les champs sont les zones des formulaires de saisie et des états.
    • pour vérifier l'existence d'une valeur dans une colonne, il ne faut pas utiliser un comptage, c'est contre performant : la comptage va compter toutes les occurrences de la valeur et donc parcourir toute la table si la colonne n'est pas éligible pour un index et au mieux toutes les valeurs de l'index s'il en existe un éligible.
      Pour ce besoin, il faut utiliser EXISTS qui arrêtera la recherche dès qu'une occurrence sera trouvée et ne transportera qu'un booléen vrai/faux au lieu d'un compteur plus encombrant

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Deplacemnt du curseur dans une ScrollBar
    Par crochepatte dans le forum MFC
    Réponses: 4
    Dernier message: 11/07/2005, 14h04
  2. [MSDE] Problème de curseur dans une SP
    Par papouAlain dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 11/07/2005, 11h28
  3. Comment récupérer l'index du curseur dans une TStringGrid ?
    Par Sydaze dans le forum Composants VCL
    Réponses: 2
    Dernier message: 26/04/2005, 09h17
  4. Appel d'un script SQL dans une procdure stockée
    Par doudou10000 dans le forum Oracle
    Réponses: 10
    Dernier message: 01/12/2004, 10h01
  5. Obtenir la position du curseur dans une Image
    Par bastoune dans le forum Composants VCL
    Réponses: 6
    Dernier message: 14/11/2003, 21h02

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