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 11/05/2011, 11h54   #1
Membre du Club
 
Inscription : mai 2007
Messages : 188
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 188
Points : 56
Points : 56
Par défaut Soucis avec une FUNCTION, une idée ? :)

Bonjour,

J'ai un petit soucis lors de la création de ma fonction. J'aimerais retourner dans un tableau un certains nombres d’éléments afin d'avoir des indications précises.

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
DELIMITER $$
DROP FUNCTION IF EXISTS modifierIDS();
CREATE FUNCTION modifierIDS() RETURNS INT AS ARRAY
BEGIN
	DECLARE c_id,u_id,compteur_cids,compteur_uids,compteur_egal_ids INT;
	DECLARE c_code,c_raison_sociale,c_lang,c_pays,a_niveau,u_niveau_max,u_ids,c_ids VARCHAR(255);
	DECLARE array_resultats INT AS ARRAY [0];
	DECLARE cur1 CURSOR FOR	SELECT compte.id, user.id, compte.code,compte.raison_sociale,compte.lang,compte.pays,acces.niveau,user.niveau_max,user.ids,compte.ids 
		FROM compte, acces, user 
		WHERE compte.id=acces.id_compte 
		AND acces.id_user=user.id 
		AND acces.niveau = 'superadmin' 
		AND user.niveau_max = 'superadmin' GROUP BY compte.id;
 
 
	OPEN cur1;
	FETCH cur1 INTO c_id, u_id, c_code, c_raison_sociale, c_lang, c_pays, a_niveau, u_niveau_max, u_ids, c_ids;
 
		IF c_ids IS NULL THEN
		@compteur_cids = @compteur_cids + 1;
		SELECT id FROM compte;			
		END IF;
 
		IF u_ids IS NULL THEN
		@compteur_uids = @compteur_uids + 1;
		SELECT id FROM compte;					
		END IF;
 
 
		IF u_ids = c_ids THEN
		@compteur_egal_ids = @compteur_egal_ids + 1;
		SELECT id FROM compte;						
		END IF;
 
	CLOSE cur1;
 
	@array_resultats[1] = @compteur_cids;
	@array_resultats[2] = @compteur_uids;
	@array_resultats[3] = @compteur_egal_ids;
 
	RETURN @array_resultats;
 
END $$
DELIMITER ;

L'erreur qui m'est retourné:

Citation:
ERROR 1064 (42000): You have an error i
corresponds to your MySQL server versio
CREATE FUNCTION modifierIDS() RETURNS I
BEGIN
DECLARE c_id,u_id,' at line 1

Auriez-vous une idée de où cela pêche ?

Par avance merci
++
Cvbdev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/05/2011, 07h24   #2
Membre Expert
 
Homme Eric Dureuil
Développeur informatique
Inscription : avril 2011
Messages : 843
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 : 843
Points : 1 318
Points : 1 318
Salut,

mysql ne gère pas les tableaux pour les variables...

tu peux contourner le problème en concaténant tes résultats sous forme d'une chaine de caractères par exemple.

à noter que tu devras préciser l'option deterministic dans la déclaration (avant le begin) ou désactiver les logs binaires pour les fonctions pour éviter d'avoir une autre erreur qui apparaisse ensuite

ericd69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/06/2011, 15h03   #3
Membre du Club
 
Inscription : mai 2007
Messages : 188
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 188
Points : 56
Points : 56
Citation:
Envoyé par ericd69 Voir le message
Salut,

mysql ne gère pas les tableaux pour les variables...

tu peux contourner le problème en concaténant tes résultats sous forme d'une chaine de caractères par exemple.

à noter que tu devras préciser l'option deterministic dans la déclaration (avant le begin) ou désactiver les logs binaires pour les fonctions pour éviter d'avoir une autre erreur qui apparaisse ensuite

Merci de ta réponse. Désolé du retard !
C'est la conclusion que j'en n'avais tiré, qu'il ne gérait pas les tableaux...
C'est ce que j'ai fais : utilisation de CONCAT...

merci
++
Cvbdev 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 07h52.


 
 
 
 
Partenaires

Hébergement Web