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 :
Bien, maintenant, le problème : à la compilation de la fonction, tout se passe bien.
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 ;
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 !![]()
Partager