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 :

[Procédure stockée] Erreur 1305


Sujet :

SQL Procédural MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Avril 2005
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 16
    Par défaut [Procédure stockée] Erreur 1305
    Bonjour,

    Ayant récemment découvert avec plaisir les nouvelles fonctionnalités de la version 5.0 avec notamment les procédures stockées, j'ai eu quelques petites déconvenues lors de la création d'une de mes fonctions.

    Je bosse sous MySQL 5.0.15 et MySQL Query Browser (le client officiel, car PhPMyAdmin accepte mal triggers et procédures stockées).

    Le but est de retourner plusieurs ligne d'une requête sous forme de chaîne de caractère varchar, en concaténant chaque ligne avec un ",".

    Voici le code de ma fonction :

    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
     
    DELIMITER $$
     
    CREATE FUNCTION sites_paruser (id tinyint(3)) RETURNS VARCHAR(128)
    BEGIN
      DECLARE fini TINYINT DEFAULT 0;
      DECLARE chainefinale varchar(128);
      DECLARE i integer(2) DEFAULT 0;
      DECLARE motcourant varchar(32);
      DECLARE curseur CURSOR FOR SELECT sit_nom FROM sites WHERE sit_id IN (SELECT aff_sit FROM affectation WHERE aff_usr = id);
      DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET fini = 1;
     
      OPEN curseur;
      BOUCLE: REPEAT
        IF i <> 0 THEN
          SET chainefinale := CONCAT (chainefinale, ', ');
        END IF;
        SET chainefinale := CONCAT (chainefinale, motcourant);
        SET i := i + 1;
        IF i > 4 THEN
          SET fini := 1;
          SET chainefinale := CONCAT (chainefinale, '...');
          LEAVE BOUCLE;
        END IF;
      UNTIL fini END REPEAT BOUCLE;
      CLOSE curseur;
      RETURN chainefinale;
    END $$
    DELIMITER ;
    Bien, maintenant, le problème : à la compilation de la fonction, tout se passe bien.
    A l'appel de la fonction (par un select sites_paruser(usr_id) from users), j'obtiens le message d'erreur suivant :

    FUNCTION mabase.CONCAT does not exist.
    Autrement dit, il ne trouve pas la fonction CONCAT qui est pourtant une fonction système intégrée dans MySQL... il va par contre la chercher dans ma base (ou plutôt mon schéma) où, évidemment, elle n'y est pas. Et comme MySQL ne supporte pas l'opérateur "||" pour la concaténation, je suis bloqué...

    Si quelqu'un peut m'aider je lui en serai reconnaissant !

  2. #2
    Membre Expert
    Avatar de Adjanakis
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    739
    Détails du profil
    Informations personnelles :
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2004
    Messages : 739
    Par défaut
    Bonsoir,

    Ce problème vient peut-être des ' ' qui sont placés entre CONCAT et la parenthèse ouvrante. Néanmoins, cette façon de faire fonctionne très bien en plaçant les bonnes valeurs dans la variable SQL MODE.

    Pour plus d'informations :
    http://dev.mysql.com/doc/refman/5.0/...-sql-mode.html

    Note : PIPE_AS_CONCAT pourrait te faire plaisir

  3. #3
    Membre averti
    Inscrit en
    Avril 2005
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 16
    Par défaut
    Ah, c'est mieux en virant les espaces entre le nom de la fonction et la parenthèse ouvrante effectivement ! (Bizzarre d'ailleurs...)

    Il y avait aussi d'autres erreurs dans la fonction, que j'ai pu corriger.
    Merci encore pour la réponse

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Procédure stocké] Erreur d'execution VB.
    Par GarsDuCalvados dans le forum VB.NET
    Réponses: 4
    Dernier message: 29/07/2007, 11h21
  2. Procédure stockée : erreur de création
    Par jeromesteffe dans le forum SQL Procédural
    Réponses: 7
    Dernier message: 21/06/2007, 17h45
  3. [procédure stockée] Erreur dans un while
    Par LE NEINDRE dans le forum MS SQL Server
    Réponses: 11
    Dernier message: 19/06/2007, 16h46
  4. Réponses: 7
    Dernier message: 03/05/2007, 12h44
  5. Création de procédure stocké erreur
    Par ran_hery dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 22/02/2007, 09h39

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