Bonjour.
Je souhaite créer une fonction qui donne le résultat de cette requête avec une variable et un paramètre :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
SELECT SUM(distance)FROM table1 WHERE YEAR(jour) = @annee;
J'ai simplifié ce que je souhaite :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
SET @annee = 2017;
 
CREATE FUNCTION sommes (table1) RETURNS INT
BEGIN
...
	RETURN @somme;
END;
 
 
sommes_mensuelles (table1)
Est ce que je peux faire ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
SET @annee = 2017;
 
CREATE FUNCTION sommes (table1, an) RETURNS INT
BEGIN
...
	RETURN @somme;
END;
 
 
sommes_mensuelles (table1, @annee)


Mon script est plus tordu mais l'idée est la même :
Évidemment ça ne fonctionne pas :
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
SET @annee = 2017;
 
SET @V1 := (SELECT SUM(distance_parcours) FROM parcours as p
INNER JOIN sorties AS s
ON p.id_parcours = s.parcours_id_parcours
WHERE YEAR(s.date_sorties) = @annee AND MONTH(s.date_sorties) = 01 AND p.sport_parcours = 'V');
 
 
CREATE FUNCTION sommes_mensuelles (sport, mois) RETURNS INT
BEGIN
	DECLARE @somme VARCHAR(4);
	DECLARE resultat INT;
 
	SET resultat = 0;
	SET @somme = SELECT CONCAT('@', mois);
 
 
 
	SET resultat = SELECT CONCAT(
	'SET ', 
	@somme, 
	' := (''SELECT SUM(distance_parcours) FROM parcours as p
	INNER JOIN sorties AS s
	ON p.id_parcours = s.parcours_id_parcours
	WHERE YEAR(s.date_sorties) = ''',
	@annee,
	' AND MONTH(s.date_sorties) = ''',
	mois,
	'AND p.sport_parcours = ''',
	sport,
	'' );
 
	RETURN @somme;
END;
 
SET @V2 := sommes_mensuelles ('V', 02, 2017);
Si quelqu'un peut m'indiquer comment faire, je l'en remercie d'avance.