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 27/02/2007, 10h07   #1
Expert Confirmé Sénior
 
Avatar de Baptiste Wicht
 
Homme Baptiste Wicht
Étudiant
Inscription : octobre 2005
Messages : 7 465
Détails du profil
Informations personnelles :
Nom : Homme Baptiste Wicht
Âge : 24
Localisation : Suisse

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2005
Messages : 7 465
Points : 16 862
Points : 16 862
Envoyer un message via MSN à Baptiste Wicht
Par défaut [Mysql5] Fonction retournant le résultat d'un Select

Bonjour,

J'aimerais savoir si c'était possible de faire une fonction stockée qui retournerait le résultat d'une requête SELECT. Et si oui comment ?

En fait, le prof nous demande de changer toutes nos requêtes en procédures stockées, il veut qu'on emploie plus que ça, je trouve pas ça très terrible, mais bon...

J'ai essayé de faire quelque chose comme ça :

Code :
1
2
3
4
CREATE FUNCTION GETLANGUAGES()
BEGIN 
   RETURN (SELECT name FROM t_languages)
END
Mais ca me sort une erreur de syntaxe, je pense qu'il faut mettre le type de retour, mais je sais pas quoi mettre.

d'avance
Baptiste Wicht est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/02/2007, 10h52   #2
Inactif
 
Inscription : mars 2002
Messages : 1 295
Détails du profil
Informations personnelles :
Âge : 41

Informations forums :
Inscription : mars 2002
Messages : 1 295
Points : 1 345
Points : 1 345
Il faut écrire une procédure. Elle retournera le resultat de ton select toute seule.
Code :
1
2
3
4
5
6
7
8
9
DELIMITER $$
 
DROP PROCEDURE IF EXISTS `mabase`.`essai` $$
CREATE PROCEDURE `mabase`.`essai` ()
BEGIN
  SELECT * FROM matable;
END $$
 
DELIMITER ;
Florian est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/02/2007, 11h03   #3
Expert Confirmé Sénior
 
Avatar de Baptiste Wicht
 
Homme Baptiste Wicht
Étudiant
Inscription : octobre 2005
Messages : 7 465
Détails du profil
Informations personnelles :
Nom : Homme Baptiste Wicht
Âge : 24
Localisation : Suisse

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2005
Messages : 7 465
Points : 16 862
Points : 16 862
Envoyer un message via MSN à Baptiste Wicht
Je viens d'essayer d'éxécuter ça :

Code :
1
2
3
4
5
6
7
8
9
DELIMITER $$
 
DROP PROCEDURE IF EXISTS `db_easyupload`.`getLanguages` $$
CREATE PROCEDURE `db_easyupload`.`getLanguages` ()
BEGIN
  SELECT name FROM t_languages;
END $$
 
DELIMITER ;
Mais ça me met encore une erreur de syntaxe :

Citation:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DELIMITER $$

DROP PROCEDURE IF EXISTS `db_easyupload`.`getLanguages` $$
CREA' at line 1
Et ensuite, comment je peux faire pour récupérer le résultat du SELECT ?
Baptiste Wicht est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/02/2007, 11h08   #4
Inactif
 
Inscription : mars 2002
Messages : 1 295
Détails du profil
Informations personnelles :
Âge : 41

Informations forums :
Inscription : mars 2002
Messages : 1 295
Points : 1 345
Points : 1 345
Avec:

call db_easyupload()

C'est étonannt ta syntaxe est bonne. Tu es en local avec mysqlquerybrowser?
Florian est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/02/2007, 11h14   #5
Expert Confirmé Sénior
 
Avatar de Baptiste Wicht
 
Homme Baptiste Wicht
Étudiant
Inscription : octobre 2005
Messages : 7 465
Détails du profil
Informations personnelles :
Nom : Homme Baptiste Wicht
Âge : 24
Localisation : Suisse

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2005
Messages : 7 465
Points : 16 862
Points : 16 862
Envoyer un message via MSN à Baptiste Wicht
Je suis sous phpmyadmin.

Ne vaudrait-il pas mieux faire une fonction ?
Baptiste Wicht est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/02/2007, 11h19   #6
Inactif
 
Inscription : mars 2002
Messages : 1 295
Détails du profil
Informations personnelles :
Âge : 41

Informations forums :
Inscription : mars 2002
Messages : 1 295
Points : 1 345
Points : 1 345
La fonction ne retournera pas le résultat d'un select:
Citation:
Script line: 4 Not allowed to return a result set from a function
voilà ce que balance mysqlquerybrowser.
Si tu peux, installe mysqlquerybrowser. C'est plus fiable
Florian est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/02/2007, 11h23   #7
Expert Confirmé Sénior
 
Avatar de Baptiste Wicht
 
Homme Baptiste Wicht
Étudiant
Inscription : octobre 2005
Messages : 7 465
Détails du profil
Informations personnelles :
Nom : Homme Baptiste Wicht
Âge : 24
Localisation : Suisse

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2005
Messages : 7 465
Points : 16 862
Points : 16 862
Envoyer un message via MSN à Baptiste Wicht
On ne peut pas retourner le résultat d'une requête avec une fonction ?
Baptiste Wicht est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/02/2007, 11h35   #8
Inactif
 
Inscription : mars 2002
Messages : 1 295
Détails du profil
Informations personnelles :
Âge : 41

Informations forums :
Inscription : mars 2002
Messages : 1 295
Points : 1 345
Points : 1 345
Avec une procédure oui, pas une fonction. La fonction renvoie une valeur unique (y doit y avoir un terme genre "scalaire" pour ça ).
MySqlQueryBrowser est ton ami
Florian est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/02/2007, 11h46   #9
Expert Confirmé Sénior
 
Avatar de Baptiste Wicht
 
Homme Baptiste Wicht
Étudiant
Inscription : octobre 2005
Messages : 7 465
Détails du profil
Informations personnelles :
Nom : Homme Baptiste Wicht
Âge : 24
Localisation : Suisse

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2005
Messages : 7 465
Points : 16 862
Points : 16 862
Envoyer un message via MSN à Baptiste Wicht
Je viens de tester avec mysqlquerybrowser et j'ai réussi à faire une procédure qui éxécute un SELECT, mais le problème, c'est que j'ai besoin de traiter ce résultat dans une application php, j'aimerais donc pouvoir récupérer le résultat de ma requête, alors que si je fais un CALL de ma procédure stockée depuis php, ca marche pas comme j'aurais voulu...
Baptiste Wicht est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/02/2007, 11h54   #10
Inactif
 
Inscription : mars 2002
Messages : 1 295
Détails du profil
Informations personnelles :
Âge : 41

Informations forums :
Inscription : mars 2002
Messages : 1 295
Points : 1 345
Points : 1 345
C'est à dire, pas comme tu l'aurais voulu ? ça doit être le but de ton prof
Florian est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/02/2007, 12h00   #11
Expert Confirmé Sénior
 
Avatar de Baptiste Wicht
 
Homme Baptiste Wicht
Étudiant
Inscription : octobre 2005
Messages : 7 465
Détails du profil
Informations personnelles :
Nom : Homme Baptiste Wicht
Âge : 24
Localisation : Suisse

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2005
Messages : 7 465
Points : 16 862
Points : 16 862
Envoyer un message via MSN à Baptiste Wicht
Non, le but de mon prof, c'est de remplacer tous les select qu'il y a dans le code php par des appels à des procédures (ou fonctions) stockées.

Il veut donc qu'on crée quelque chose de stockée qui renvoie le résultat d'une requête SELECT.
Baptiste Wicht est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/02/2007, 12h02   #12
Inactif
 
Inscription : mars 2002
Messages : 1 295
Détails du profil
Informations personnelles :
Âge : 41

Informations forums :
Inscription : mars 2002
Messages : 1 295
Points : 1 345
Points : 1 345
Qu'est-ce qui coince dans le retour de résultat après appel de la procédure stockée ?
Florian est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h25.


 
 
 
 
Partenaires

Hébergement Web