IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Procédural MySQL Discussion :

Soucis avec une FUNCTION, une idée ? :)


Sujet :

SQL Procédural MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    240
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 240
    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 : 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
    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é:

    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
    ++

  2. #2
    Membre Expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    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 : 1 919
    Billets dans le blog
    1
    Par défaut
    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


  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    240
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 240
    Par défaut
    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
    ++

Discussions similaires

  1. bug avec Find dans une function
    Par paiva44 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 05/01/2010, 18h04
  2. Souci avec result dans une fonction
    Par eLKa. dans le forum Pascal
    Réponses: 2
    Dernier message: 08/12/2008, 04h27
  3. Perte de valeurs d'une function à une autre
    Par Baptiste Wicht dans le forum VBScript
    Réponses: 5
    Dernier message: 08/11/2007, 11h56
  4. INSERT avec condition d'une table à une autre
    Par papipasto dans le forum Langage SQL
    Réponses: 2
    Dernier message: 28/03/2006, 13h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo