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 25/07/2011, 12h23   #1
LHT
Candidat au titre de Membre du Club
 
Inscription : juin 2004
Messages : 26
Détails du profil
Informations forums :
Inscription : juin 2004
Messages : 26
Points : 10
Points : 10
Par défaut Function : pb retour résultat

Bonjour, j'ai un souci dans le retour du résultat de ma fonction.
Voici le code de ma fonction. Celle-ci à en paramètre d'entrée une chaîne de caractère et retourne en sortie la position du séparateur trouvé.
Lorsque j'éxecute les premières lignes en mode requête. pas de problèmes.
Le Select me renvoi bien les bon résultat.
J'ai l'impression que c'est mon curseur qui plante.

Merci d'avance à ceux qui pourront dénicher l'erreur.
Bonne journée à tous.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
BEGIN
        DECLARE pos,posMax INT;
	DECLARE c_pos CURSOR FOR
		SELECT MIN(pos),MAX(pos) FROM posi WHERE pos>0;
 
	SET pos = 0;
 
	DROP TEMPORARY TABLE IF EXISTS posi;	
	CREATE TEMPORARY TABLE posi (pos INT); 
	INSERT INTO posi(pos) VALUES(INSTR(nom,''''));
	INSERT INTO posi(pos) VALUES(INSTR(nom,' '));
	INSERT INTO posi(pos) VALUES(INSTR(nom,'-'));
 
	OPEN c_pos;
	FETCH c_pos INTO pos,posMax;
	CLOSE c_pos; 
 
	IF posMax = 0 THEN SET pos = posMax; END IF;
 
	RETURN pos;
END
LHT est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/07/2011, 12h31   #2
LHT
Candidat au titre de Membre du Club
 
Inscription : juin 2004
Messages : 26
Détails du profil
Informations forums :
Inscription : juin 2004
Messages : 26
Points : 10
Points : 10
c'est bon j'ai trouvé. C'est juste un problème de déclaration de variable.
Ma variable pos interagissait avec le champ pos de la table temporaire.
LHT est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/07/2011, 12h35   #3
Membre Expert
 
Avatar de Yanika_bzh
 
Homme Yannick
Ingénieur Etudes & Developpements
Inscription : février 2006
Messages : 1 125
Détails du profil
Informations personnelles :
Nom : Homme Yannick
Localisation : France, Deux Sèvres (Poitou Charente)

Informations professionnelles :
Activité : Ingénieur Etudes & Developpements
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : février 2006
Messages : 1 125
Points : 1 670
Points : 1 670
Cependant, quel est l'interet de votre curseur dans votre script ?
__________________
Dans la connaissance du monde, ceux qui ne savent rien en savent toujours autant que ceux qui n'en savent pas plus qu'eux. (Pierre Dac)
Yanika_bzh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/07/2011, 19h06   #4
Membre Expert
 
Homme Eric Dureuil
Développeur informatique
Inscription : avril 2011
Messages : 856
Détails du profil
Informations personnelles :
Nom : Homme Eric Dureuil
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : avril 2011
Messages : 856
Points : 1 336
Points : 1 336
salut,

oui je me pose aussi la question vu que tu lis une seule ligne... autan faire un simple:
Code sql :
SELECT MIN(pos),MAX(pos) INTO pos,posMax FROM posi WHERE pos>0;

plus optimisé...
__________________
Eric Dureuil, développeur web, c/c++, java indépendant
soyons
pensez à mettre et
ericd69 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/07/2011, 12h01   #5
LHT
Candidat au titre de Membre du Club
 
Inscription : juin 2004
Messages : 26
Détails du profil
Informations forums :
Inscription : juin 2004
Messages : 26
Points : 10
Points : 10
oui j'ai pensé à rectifier mon légèrement mon code.
j'ai cette requête qui me retourne la position minimale en dehors des 0
et j'ai une seconde requête (max sans condition >0) qui me retourne la position maximale.
Si la position maximale est 0 alors je n'ai aucun des éléments recherché.

Pourquoi j'ai mis le curseur ? tout simplement que je suis pas très doué en mySQL et que je n'arrive pas à affecter le résultat à ma variable pour la renvoyer.(mySQL5.0)
J'ai toujours un message d'erreur me disant que je n'ai pas la bonne syntaxe
Code :
SET maVariable = SELECT blabla FROM truc
Donc si vous avez un peu plus d'expérience, je suis partant !

Merci à vous !
LHT est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/07/2011, 12h11   #6
Membre Expert
 
Avatar de Yanika_bzh
 
Homme Yannick
Ingénieur Etudes & Developpements
Inscription : février 2006
Messages : 1 125
Détails du profil
Informations personnelles :
Nom : Homme Yannick
Localisation : France, Deux Sèvres (Poitou Charente)

Informations professionnelles :
Activité : Ingénieur Etudes & Developpements
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : février 2006
Messages : 1 125
Points : 1 670
Points : 1 670
Parce que comme vous l'analyseur, votre syntaxe est incorrecte !

Code :
1
2
3
 
 
SELECT MaColone INTO MaVariable FROM MaTable
Je vous conseille de regarder quelques docs sur MySql

Bon Courage
__________________
Dans la connaissance du monde, ceux qui ne savent rien en savent toujours autant que ceux qui n'en savent pas plus qu'eux. (Pierre Dac)
Yanika_bzh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/07/2011, 12h15   #7
LHT
Candidat au titre de Membre du Club
 
Inscription : juin 2004
Messages : 26
Détails du profil
Informations forums :
Inscription : juin 2004
Messages : 26
Points : 10
Points : 10
merci à vous, j'étais entrain de lire la syntaxe sur la doc mysql. et oui, l'analyseur chez moi est un peu ko
un grand merci à vous ! et moi je vais prendre un peu plus de temps pour creuser ces procédures stockées et la syntaxe sous mysql.(genre passage de paramètre in/out, passage de paramètre dans un curseur, etc.)
LHT est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/07/2011, 15h19   #8
Membre Expert
 
Homme Eric Dureuil
Développeur informatique
Inscription : avril 2011
Messages : 856
Détails du profil
Informations personnelles :
Nom : Homme Eric Dureuil
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : avril 2011
Messages : 856
Points : 1 336
Points : 1 336
pour faire simple:

select into ne dois te retourner qu'une ligne...
le curseur servira lui quand tu en auras possiblement plusieurs et tu devras faire une boucle de lecture...

souvent, si tu as un traitement lourd ou très répétitif, vaut mieux une procédure stockée que de faire un select avec une fonction utilisateur (udf) dedans... en plus tu pourras faire plus de choses dedans...

bon courage
__________________
Eric Dureuil, développeur web, c/c++, java indépendant
soyons
pensez à mettre et
ericd69 est actuellement 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 12h00.


 
 
 
 
Partenaires

Hébergement Web