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 stockee avec paramètre IN


Sujet :

SQL Procédural MySQL

  1. #1
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2014
    Messages
    744
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juin 2014
    Messages : 744
    Points : 336
    Points
    336
    Par défaut Procedure stockee avec paramètre IN
    Bonjour.
    Lorsque je crée la PSTK ci-dessous, elle se vrée bien mais lorsque je l'appelle, j'ai une erreur ;
    Erreur dans la requête (1146): Table 'touslesport._tableresultats' doesn't exist
    alors que j'espérai que la table soit 'touslesport.2017resultats.
    Je ne comprends pas pourquoi mon paramètre "2017resultats" n'est pas pris en compte.
    Merci de votre aide.

    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
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
     
    /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
    /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
    /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
    /*!40101 SET NAMES utf8 */;
     
    -- --------------------------------------------------------
     
     
    DELIMITER | 
    DROP PROCEDURE IF EXISTS `sommes_mensuelles`|
     
    CREATE PROCEDURE sommes_mensuelles (IN _tableresultats VARCHAR(13), IN _an INT)
    DETERMINISTIC
    LANGUAGE SQL
     
    BEGIN
     
    DECLARE _nbmois INT DEFAULT 12;
    DECLARE _mois INT DEFAULT 1;
    DECLARE _sport VARCHAR(3);
    DECLARE _nsport INT DEFAULT 0;
    DECLARE _tsport INT DEFAULT 3;
    DECLARE _somme INT DEFAULT 0;
    DECLARE _total INT DEFAULT 0;
     
     
    	WHILE _nsport < _tsport DO
     
    	SET _nsport = _nsport + 1;
     
     
    	IF _nsport = 1 THEN
    		SET _sport = 'V';
     
    	ELSEIF _nsport = 2 THEN
    		SET _sport = 'C';
     
    	ELSEIF _nsport = 3 THEN
    		SET _sport = 'N';
     
    	END IF;
     
     
     
    			WHILE _mois <= _nbmois DO
     
    				 SELECT COALESCE( SUM(distance_parcours), 0 ) AS sum INTO _somme
    					FROM parcours as p
    							INNER JOIN sorties AS s
    								ON p.id_parcours = s.parcours_id_parcours
    					WHERE
    						YEAR(s.date_sorties) = _an
    						AND MONTH(s.date_sorties) = _mois
    						AND p.sport_parcours = _sport;
     
     
    				 INSERT INTO _tableresultats (`sport`, `mois`, `somme`)
    				 VALUES (_sport, _mois, _somme);
     
    			SET _mois = _mois + 1;
    			END WHILE;
     
    			SELECT COALESCE( SUM(somme), 0 ) AS sum INTO _total
    			FROM _tableresultats
    			WHERE sport = _sport;
     
     
    			INSERT INTO _tableresultats (`sport`, `mois`, `somme`)
    			VALUES (_sport, 13, _total);
     
    			SET _mois = 1;
     
    	END WHILE;
     
    END|
    DELIMITER ;
     
     
     
    /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
    /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
    /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    CALL sommes_mensuelles ('2017resultats',2017);

  2. #2
    Membre confirmé Avatar de isabelle.letrong
    Femme Profil pro
    Conseil - Consultante en systèmes d'information
    Inscrit en
    Juillet 2010
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Conseil - Consultante en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2010
    Messages : 109
    Points : 487
    Points
    487
    Par défaut
    INSERT INTO _tableresultats (`sport`, `mois`, `somme`)
    Bonjour 69Pierre,

    Vous ne pouvez pas identifier une table dans du SQL via une variable (ou un paramètre comme _tableresultats).
    La seule manière de faire cela dans une procédure stockée est d'utiliser du SQL Dynamique (via PREPARE, EXECUTE, DEALLOCATE PREPARE...).

    Bien cordialement.

  3. #3
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2014
    Messages
    744
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juin 2014
    Messages : 744
    Points : 336
    Points
    336
    Par défaut
    Super.
    Merci beaucoup.
    J'ai du mal à acquérir ce principe.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 05/05/2011, 10h58
  2. Procedure stockee avec en paramètre un objet
    Par mellya dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 24/11/2007, 19h03
  3. SQL Relay : Procédures stockées avec curseur en return
    Par Tchinkatchuk dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 19/10/2006, 17h21
  4. [C#] Comment appeler une procédure stockée avec multiple SELECT ?
    Par Piolet dans le forum Accès aux données
    Réponses: 2
    Dernier message: 08/06/2006, 16h04

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