Précédent   Forum des professionnels en informatique > Bases de données > MySQL > SQL Procédural
SQL Procédural Forum d'entraide sur les triggers, les procédures stockées et les fonctions en MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 14/02/2006, 18h04   #1
Invité régulier
 
Inscription : janvier 2006
Messages : 12
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 12
Points : 6
Points : 6
Par défaut Problème procédure stockée + trie

Voici mon problème :
Je souhaite créer une procédure stockée qui prend comme paramètre en entrée, le nom de la colonne sur laquel je souhaite effectué mon trie.
De ce fait, dans mon code PHP je pourrais directement appeller la procédure stockée avec le trie que je désire.
Malheuresement, ça ne fonctionne pas, voici le code sql de ma procédure stockée :

CREATE PROCEDURE RECUP_STATIONS (trie VARCHAR(30))
BEGIN
SELECT `stations_mesures`.`id`
,`centres_controles`.`nom`
,`stations_mesures`.`numero` ,`stations_mesures`.`longitude`
,`stations_mesures`.`latitude`
,`stations_mesures`.`rayon`
,`stations_mesures`.`type`
FROM `stations_mesures`,`proprietaires`,`centres_controles`
WHERE `stations_mesures`.`fk_adresse`=`adresses`.`id`
AND `stations_mesures`.`fk_proprietaire`=`proprietaires`.`id`
AND `contacts`.`fk_proprietaire`=`proprietaires`.`id`
AND `centres_controles` .`id`=`stations_mesures`.`fk_centre`
GROUP BY `stations_mesures`.`nom`
ORDER BY trie ASC;
END |


Si je remplace "trie" dans ma procédure stockée par "latitude" ou "type" par exemple, cela fonctionne correctement, ce qui est normal.
Par contre impossible de la faire marcher, avec le paramètre d'entré "trie VARCHAR(30)" correspondant au nom de la colonne sur lequel je veux efectuer le trie.
Il y a t'il une solution ?
Ou dois-je faire autant de procédure stockée que de trie désiré ?

Si quelqu'un à la solution, merci de me répondre.

NB: Mysql 5.0.17 PHP5 Apache2
an_merle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2006, 20h10   #2
Provisoirement toléré
 
Avatar de Maximilian
 
Inscription : juin 2003
Messages : 2 622
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 2 622
Points : 2 505
Points : 2 505
Bonjour,

Tu as fait une recherche sur le forum ?

Il faut utiliser une requête paramétrée : http://www.developpez.net/forums/viewtopic.php?t=416091&highlight=proc%E9dure+param%E8tre
__________________
Pensez au bouton
Maximilian est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2006, 22h56   #3
Invité régulier
 
Inscription : janvier 2006
Messages : 12
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 12
Points : 6
Points : 6
Oui j'avais fait des recherches, qui se sont révélées infructueuses !

Merci beaucoup, ça marche maintenant !

Longue vie à Developpez
an_merle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2006, 22h58   #4
Invité régulier
 
Inscription : janvier 2006
Messages : 12
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 12
Points : 6
Points : 6
Voici la solution pour ceux qui sont interessés :

DROP PROCEDURE IF EXISTS RECUP_LIST_STATIONS |
CREATE PROCEDURE RECUP_LIST_STATIONS (IN `sorder` varchar(30))
BEGIN
SET @requete := concat('SELECT `stations_mesures`.`id` as id_station'
,',`centres_controles`.`nom`as nom_centre'
,',`proprietaires`.`type` as type_proprietaire'
,',`proprietaires`.`nom` as nom_proprietaire'
,',`stations_mesures`.`nom` as nom_station'
,',`stations_mesures`.`numero`'
,',`stations_mesures`.`longitude`'
,',`stations_mesures`.`latitude`'
,',`stations_mesures`.`rayon`'
,',`stations_mesures`.`type`'
,',`adresses`.`numero_rue`'
,',`adresses`.`rue`'
,',`adresses`.`lieu_dit`'
,',`adresses`.`code_postale`'
,',`adresses`.`commune`'
,',`adresses`.`pays`'
,',`contacts`.`nom` as nom_contact'
,',`contacts`.`telephone`'
,',`contacts`.`portable`'
,',`contacts`.`fax`'
,',`contacts`.`courriel`'
,',count(*) as nb_contact '
,'FROM `stations_mesures`,`adresses`,`proprietaires`,`contacts`,`centres_controles` '
,'WHERE `stations_mesures`.`fk_adresse`=`adresses`.`id` '
,'AND `stations_mesures`.`fk_proprietaire`=`proprietaires`.`id` '
,'AND `contacts`.`fk_proprietaire`=`proprietaires`.`id` '
,'AND `centres_controles` .`id`=`stations_mesures`.`fk_centre` '
,'GROUP BY `stations_mesures`.`nom` '
,'ORDER BY '
,'`',`sorder`,'`'
,' ASC ');
PREPARE `requete` FROM @requete;
EXECUTE `requete`;
DEALLOCATE PREPARE `requete`;
END |
an_merle est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h28.


 
 
 
 
Partenaires

Hébergement Web