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 :

Pagination - Procédure stockée - FETCH


Sujet :

DB2

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Août 2006
    Messages : 5
    Par défaut Pagination - Procédure stockée - FETCH
    Salut à tous.

    Je souhaite récupérer les n premiers enregistrements d'une, puis les n suivants, etc. pour les afficher dans un programme vb page par page.

    Je voudrais récupérer les résultats dans mon result set, grâce à un curseur, mais là je me demande si c'est possible.

    Ne faut-il pas plutot passer par une table de travail ?

    J'utilise la procédure stockée suivante :

    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
     
     
    CREATE PROCEDURE LIMSPRD.ESSAI07(IN PARALG INTEGER)
    RESULT SETS 
    LANGUAGE SQL 
    BEGIN 
     
    DECLARE LON INTEGER;
    DECLARE IARART CHAR(20); 
    DECLARE IARCAT INTEGER;  
    DECLARE IARD1  CHAR(30);
    DECLARE IARD2  CHAR(30);
    DECLARE IARD3  CHAR(30);   
    DECLARE IARLST CHAR(20);
    DECLARE SQUERY CHAR(512); 
     
    DECLARE C1 DYNAMIC SCROLL CURSOR WITH RETURN FOR SELECT ARART,ARCAT,ARD1,ARD2,ARD3,ARLST FROM LIMSPRD.ART;
     
     
    OPEN C1;                   
    FETCH FIRST FROM C1 FOR 18 ROWS INTO IARART,IARCAT,IARD1,IARD2,IARD3,IARLST;                      
     
    END
    La compilation me crache les messages suivants :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
      Elément syntaxique FOR n'est pas correct.     
      Eléments possibles : INTO.                                
     
      Elément syntaxique IARART n'est pas correct.  
      Eléments possibles : :.

    (config : DB2 400 V5R1)

  2. #2
    Membre confirmé
    Inscrit en
    Avril 2003
    Messages
    288
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Avril 2003
    Messages : 288
    Par défaut
    Je regarde mes sources demain du boulot et j'édite après !

    ++

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Août 2006
    Messages : 5
    Par défaut
    Merci !
    à demain.

  4. #4
    Membre confirmé
    Inscrit en
    Avril 2003
    Messages
    288
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Avril 2003
    Messages : 288
    Par défaut
    A mon avis, le plus simple : il faut que tu passes par une table temporaire (ou une table fixe).

    Voici un exemple de ce que j'ai déjà fait :

    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    CREATE PROCEDURE BIBPROCSQL.proc_SuiviTempsCODIR (IN iAnnee_EXC integer, IN iMois_Select integer)
    DYNAMIC RESULT SETS 2
    LANGUAGE SQL
    MODIFIES SQL DATA
    P1: BEGIN
        -- Déclaration des variables
    	DECLARE iCompteur INT DEFAULT 0;
    	DECLARE iNbLignes BIGINT DEFAULT 0;
        -- Déclaration des variables Ressources
        DECLARE dTempsTotal_Lor DOUBLE DEFAULT 0;
        DECLARE dTempsTotal_Lor_Full DOUBLE DEFAULT 0;
        DECLARE dTempsTotal_Par DOUBLE DEFAULT 0;
        DECLARE dTempsTotal_Par_Full DOUBLE DEFAULT 0;
        DECLARE dTempsTotal_INRS DOUBLE DEFAULT 0;
        DECLARE dTempsTotal_INRS_Full DOUBLE DEFAULT 0;
        DECLARE dTemps DOUBLE DEFAULT 0;
        DECLARE sEntite varchar(10);
        DECLARE sActivite varchar(2);
    	--------------------------------------
    	------ Déclaration des curseurs ------
    	--------------------------------------
        DECLARE c1 CURSOR FOR
    		SELECT SUBSTRING(A.OBGCOD, 1, 2), REPLACE(REPLACE(B.DCTENT,'N','Lorraine'),'P','Paris'), SUM(B.DCTCHEU)
    		FROM SCODSPEFIC.XXOCOM1 A, INRSSPEFIC.DCTHISTOD B WHERE B.DCTEXC = iAnnee_EXC AND SUBSTRING(A.OBGCOD, 1, 2) = '66'
    		AND B.DCTMOI <= iMois_Select AND A.COCOMP = B.DCTNCA
    		GROUP BY SUBSTRING(A.OBGCOD, 1, 2), B.DCTENT ORDER BY 1,2;
    	-- Curseur pour récupérer les données de la table RESSOURCES_CODIR
        DECLARE c3 CURSOR WITH RETURN FOR
    		SELECT A.ENTITE, A.ACTIVITE, A.TEMPS, (DECIMAL(A.POURCENTAGE,4,2) || ' %') AS POURCENTAGE
    		FROM BIBPROCSQL.RESSOURCES_CODIR A ORDER BY A.ENTITE Asc;
    	--------------------------------------------------
    	------ Recherche des Ressources (en heures) ------
    	--------------------------------------------------
    	-- 1) Lorraine
    	SELECT SUM(B.DCTCHEU) into dTempsTotal_Lor FROM SCODSPEFIC.XXOCOM1 A, INRSSPEFIC.DCTHISTOD B 
    	WHERE B.DCTEXC = iAnnee_EXC AND SUBSTRING(A.OBGCOD, 1, 2) = '66' AND A.COCOMP = B.DCTNCA AND B.DCTENT = 'N';
     
    	SELECT SUM(B.DCTCHEU) into dTempsTotal_Lor_Full FROM SCODSPEFIC.XXOCOM1 A, INRSSPEFIC.DCTHISTOD B 
    	WHERE B.DCTEXC = iAnnee_EXC AND SUBSTRING(A.OBGCOD, 1, 1) = '6' AND A.COCOMP = B.DCTNCA AND B.DCTENT = 'N';
    	-- 2) Paris
    	SELECT SUM(B.DCTCHEU) into dTempsTotal_Par FROM SCODSPEFIC.XXOCOM1 A, INRSSPEFIC.DCTHISTOD B 
    	WHERE B.DCTEXC = iAnnee_EXC AND SUBSTRING(A.OBGCOD, 1, 2) = '66' AND A.COCOMP = B.DCTNCA AND B.DCTENT = 'P';
     
    	SELECT SUM(B.DCTCHEU) into dTempsTotal_Par_Full FROM SCODSPEFIC.XXOCOM1 A, INRSSPEFIC.DCTHISTOD B 
    	WHERE B.DCTEXC = iAnnee_EXC AND SUBSTRING(A.OBGCOD, 1, 1) = '6' AND A.COCOMP = B.DCTNCA AND B.DCTENT = 'P';
    	-- 3) INRS
    	SET dTempsTotal_INRS = dTempsTotal_Lor + dTempsTotal_Par;
    	SET dTempsTotal_INRS_Full = dTempsTotal_Lor_Full + dTempsTotal_Par_Full;
     
        -- On supprime au préalable les enregistrements dans la table RESSOURCES_CODIR
    	SELECT count(*) into iNbLignes FROM BIBPROCSQL.RESSOURCES_CODIR A where SUBSTRING(A.ACTIVITE, 1, 1) = '6';
    	IF iNbLignes > 0 THEN
    	    DELETE FROM BIBPROCSQL.RESSOURCES_CODIR A where SUBSTRING(A.ACTIVITE, 1, 1) = '6';
    	    COMMIT;
    	END IF;
        -- Ouverture du curseur c1
    	OPEN c1;
    	SET iCompteur = 0;
        -- boucle de traitement
        WHILE iCompteur < 2 DO
    	    FETCH c1 INTO sActivite, sEntite, dTemps;
    			INSERT INTO BIBPROCSQL.RESSOURCES_CODIR (ACTIVITE,ENTITE,TEMPS,POURCENTAGE)
    			VALUES (sActivite,sEntite,ROUND(dTemps,2),(dTemps/dTempsTotal_INRS*100));
    			SET iCompteur = iCompteur + 1;
        END WHILE;
    	--Fermeture du curseur c1
    	CLOSE c1;
    	-- On commit
    	COMMIT;
    	-- Ouverture du curseur c3
    	OPEN c3;
    END P1
    Dis moi si ça te convient.

  5. #5
    jab
    jab est déconnecté
    Rédacteur
    Avatar de jab
    Homme Profil pro
    SharePoint developpeur
    Inscrit en
    Février 2004
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Belgique

    Informations professionnelles :
    Activité : SharePoint developpeur
    Secteur : Service public

    Informations forums :
    Inscription : Février 2004
    Messages : 1 173
    Par défaut
    Regarde cet ancien post sur le sujet. Tu y trouvera peut être la solution.

    http://www.developpez.net/forums/showthread.php?t=96246

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Août 2006
    Messages : 5
    Par défaut
    @marsup :
    merci pour ton code, je vais essayer de comprendre tout ça... (débutant en DB2 )


    @jab :
    j'ai déja visiter ce topic (merci quand même ) ; je voulais utiliser la fonction ROW_NUMBER() mais elle n'existe pas en V5R1...

    Merci pour vos réponses !
    Je pense que je vais passer par une table, mais il faut que je résolve le problème des accès concurrents.
    Je vous tiens au courant de la suite.

Discussions similaires

  1. passage d'un nom de table dans une procédure stockée
    Par thierry V dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 26/07/2010, 17h48
  2. Procédure stocké:Insert et renvoie de la clé primair
    Par caramel dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 17/04/2003, 10h34
  3. [Pervasive SQL ] procédure stockée
    Par magellan dans le forum Autres SGBD
    Réponses: 2
    Dernier message: 25/10/2002, 14h17
  4. Explication procédure stockée
    Par underworld dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 09/09/2002, 11h51
  5. [Comparatif] Procédures stockées, triggers, etc.
    Par MCZz dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 28/08/2002, 13h27

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