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

SQL Procédural MySQL Discussion :

[Proc Stockée] CURSOR dynamique


Sujet :

SQL Procédural MySQL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 19
    Points : 10
    Points
    10
    Par défaut [Proc Stockée] CURSOR dynamique
    Bonjour,

    J'ai une procédue stockée P_PRINCIPALE. Dans cette procédure, j'ai créé un curseur récupérant le résultat d'un select. Mes conditions de ce select sont des variables. Je boucle sur ces variables avec un WHILE. Voici l'algo de la procédure stockée pour mieux comprendre :

    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
     
    CREATE PROCEDURE P_PRINCIPALE ()
    BEGIN
     
    	DECLARE done INT DEFAULT 0; #pour le parcours du curseur
    	DECLARE tlogin CHAR(200); #pour stocker la première valeur du curseur
    	DECLARE tcount INT(20); #pour stocker la deuxième valeur du curseur
            DECLARE stop TINYINT(1) DEFAULT 0; #pour la condition du WHILE
            DECLARE date_debut VARCHAR(50) default "%2008-02-09%"; #Initialisation des variables pour la requête
            DECLARE date_fin VARCHAR(50) default "%2008-02-10%";	
     
            WHILE (stop=0) DO
     
    	DECLARE CursBase CURSOR FOR SELECT login, count(sessionId) AS nb_transactions
            FROM `transactions`
            WHERE `debutTransac` LIKE date_debut
            AND `finTransac` LIKE date_fin
            GROUP BY login;
     
    	DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
     
    	OPEN CursBase;
    	REPEAT
            FETCH CursBase INTO tlogin,tcount;
    	    #Utilisation des variables tlogin et tcount, MAJ de table, ect ect ...
                #Condition pour passer stop à 1, ect ect ...
    	UNTIL done END REPEAT;
    	CLOSE CursBase;
     
            # On incrémente les date debut et fin (je n'ai pas mis le code entier)
            SET date_debut = date_debut+ "1 jour";
            SET date_fin = date_fin+ "1 jour";
     
    	END WHILE;
    END;
    Donc on ne peut pas faire de DECLARE dans une boucle WHILE. Dans ce cas comment faire pour alimenter dynamiquement les conditions de ma requête récupérée par le curseur ?

    Merci d'avance.

    PS : J'allais oublier, version mysql 5.0 et pas de possibilité d'upgrader

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 19
    Points : 10
    Points
    10
    Par défaut
    Ma question n'est peut être pas très claire Je reformule plus simplement :
    Comment utiliser un CURSOR dans une boucle WHILE ?

Discussions similaires

  1. [Proc Stock]Création d'un curseur en SQL dynamique
    Par marsup54 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 12/06/2006, 15h02
  2. [SQL_SVR_2K]Proc Stockée Dynamique
    Par Franck2mars dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 15/05/2006, 11h17
  3. Recopie de procs stocks dynamiques entre serveurs
    Par Chevalier Bayard dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 03/06/2005, 12h29
  4. [Procs stockées] [Débutant] Requête dynamique
    Par stailer dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 25/04/2005, 15h29
  5. Réponses: 2
    Dernier message: 16/10/2003, 18h17

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