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édure stockée et nom de table dynamique


Sujet :

SQL Procédural MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 40
    Par défaut Procédure stockée et nom de table dynamique
    Bonsoir,

    Je démarre tout juste avec les procédures stockées sous MySQL et j'ai un soucis lorsque je m'attaque à un nom de table dynamique.

    Voici la procédure que j'utilise :
    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
     
    CREATE PROCEDURE maj (IN paramMarchand VARCHAR(30))
    	BEGIN
    		DECLARE varIdMarchand INT;
    		DECLARE varTable VARCHAR(35);
    		SET varTable = CONCAT('zzz_', paramMarchand);
     
    		SET varIdMarchand = (SELECT id_marchand FROM marchands WHERE code_marchand = paramMarchand AND actif = 1);
     
    		SET @reqMarque = CONCAT('INSERT IGNORE INTO marques (marque) SELECT distinct(marque) FROM ', varTable, ' order by marque');
    		PREPARE rp FROM @reqMarque;
    		EXECUTE rp;
    		DEALLOCATE PREPARE rp; 
     
    	END
    Et j'obtiens l'erreur (en exécutant la procédure) :
    #1312 - PROCEDURE nombase.maj can't return a result set in the given context

    Hors si je crée la même avec un nom de table fixe, soit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    CREATE PROCEDURE maj (IN paramMarchand VARCHAR(30))
    	BEGIN
    		DECLARE varIdMarchand INT;
     
    		SET varIdMarchand = (SELECT id_marchand FROM marchands WHERE code_marchand = paramMarchand AND actif = 1);
     
    		INSERT IGNORE INTO marques (marque) SELECT distinct(marque) FROM zzz_machin order by marque'; 
     
    	END
    Là ça fonctionne, avez-vous une idée du problème ?
    Merci.

  2. #2
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 287
    Par défaut
    Citation Envoyé par chatlumo Voir le message
    ...
    Et j'obtiens l'erreur (en exécutant la procédure) :
    #1312 - PROCEDURE nombase.maj can't return a result set in the given context
    Pour qu'une proc stock renvoie un résultat, il faut que ton SELECT (en l'occurence ton EXECUTE) soit la dernière instruction de ta procédure.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 40
    Par défaut
    Ok merci mais en l'occurrence je demande pas de résultat ?
    Dans tous les cas cela veut-il dire qu'il me faut supprimer la dernière commande soit DEALLOCATE ?

    Merci.

  4. #4
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 287
    Par défaut
    Le résultat, c'est ce que renvoie ton SELECT. Et effectivement, ça suppose que tu renonces à ton DEALLOCATE, ou que tu le fasses en-dehors de ta proc.

Discussions similaires

  1. Procédure Stockée pour créer des TABLE dynamiquement
    Par GuyverZ dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 12/05/2009, 22h29
  2. procédure stocké pour backuper une table
    Par zaki_1982 dans le forum Administration
    Réponses: 4
    Dernier message: 08/01/2009, 09h14
  3. [MS SQL SERVER 2k5]nom de table dynamique dans un curseur
    Par patriceharel dans le forum Développement
    Réponses: 2
    Dernier message: 16/12/2008, 11h03
  4. Réponses: 2
    Dernier message: 22/10/2008, 13h14
  5. Select avec nom de table dynamique
    Par boutss dans le forum SQL
    Réponses: 6
    Dernier message: 31/01/2007, 09h51

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