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 :

procedure stockée renvoi d'un table


Sujet :

SQL Procédural MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Septembre 2006
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 12
    Par défaut procedure stockée renvoi d'un table
    Bonjour,

    J'ai une procédure stockée qui parcour les enregistrements d'une requête à l'aide d'un curseur.
    A chaque passage dans le curseur, je souhaite ajouter le résultat à une variable temporaire. Pour l'instant j'utilise un CONCAT ce qui me donne un résultat en ligne... Est ce possible d'avoir le résultat sous forme de table ??

    Voici mon code :

    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
    CREATE DEFINER=`adm_dech`@`%` PROCEDURE `test`()
    BEGIN
     
    /* Variable du curseur */
    DECLARE v_FinCurseur BOOLEAN DEFAULT FALSE;
    DECLARE v_Produit INT;
    DECLARE v_Poids INT;
     
    /* Declaration du curseur */
    DECLARE c_Produit CURSOR FOR
    	SELECT IdProduit,Poids
    	FROM PRODUITS;
     
    /* Declaration de l'evenement de fin de parcours du curseur */
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_FinCurseur = TRUE;
     
    /* Initialise ma variable */
    SET @strsql='';
     
    /* Ouverture du curseur */
    OPEN c_Produit;
     
      REPEAT
        FETCH c_Produit INTO v_Produit, v_Poids;
     
        IF NOT v_FinCurseur THEN
    	 IF (@strsql='') THEN
                SET @strsql = v_produit;
    	ELSE 
    	    SET @strsql = CONCAT(@strsql , ' ',v_produit);
    	END IF;
      END IF;
     
      UNTIL v_FinCurseur END REPEAT;
     
    /* Fermeture du curseur */
    CLOSE c_Produit;
     
    END
    ce qui me donne comme resultat :
    +------------------------------------------------------------------------------------------------------------------+
    | @strsql |
    +------------------------------------------------------------------------------------------------------------------+
    | 1 2 3 4 5 6 7 8 9 10 1247 1248 1249 1250 1251 1252 1253 1254 12552 |
    +------------------------------------------------------------------------------------------------------------------+

    Alors que je voudrais :
    +-----------+
    | @strsql |
    +-----------+
    | 1 |
    | 6 |
    | 1247 |
    | 1251 |

  2. #2
    Membre Expert Avatar de fregolo52
    Homme Profil pro
    Développeur C
    Inscrit en
    Août 2004
    Messages
    2 366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Août 2004
    Messages : 2 366
    Par défaut
    salut,

    Au niveau des autorisations sur ta base, ton utilisateur a-t-il le droit de créer une table temporaire ? (CREATE TEMPORARY TABLES)
    si oui

    tu fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    CREATE TEMPORARY TABLE tmp (`produit` int(11)) ENGINE=MyISAM DEFAULT CHARSET=latin1;
     
    ...
    -- dans le fetch
    insert into tmp values(v_produit);
    ...
    -- a la fin de la procedure
    select * from tmp;
    voilà pour le principe (code non testé)

  3. #3
    Membre averti
    Inscrit en
    Septembre 2006
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 12
    Par défaut
    J'aurais pu y penser..... lol

    Merci ça marche parfaitement!

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

Discussions similaires

  1. [2008R2] Appel de procedure stockée dans une Function Table
    Par tazoune dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 18/02/2014, 18h45
  2. trigger ou procedure stockée pour remplir une table
    Par khalid76 dans le forum Développement
    Réponses: 3
    Dernier message: 04/10/2012, 14h10
  3. procedure stocke pour copier des tables
    Par zalalus dans le forum Développement
    Réponses: 3
    Dernier message: 16/07/2010, 12h12
  4. Procedure stockée pour effacer plusieurs tables
    Par devalender dans le forum SQL
    Réponses: 3
    Dernier message: 25/02/2009, 20h33
  5. jointure sur table et procedure stocké
    Par pram dans le forum SQL
    Réponses: 3
    Dernier message: 18/11/2004, 21h56

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