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 ;
Citation:
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:
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:
1 2
|
CALL sommes_mensuelles ('2017resultats',2017); |