2009-12-18 4 views
2

Je suis en train d'écrire une procédure stockée qui explose une chaîne passée par un délimiteur passé et renvoie le n-ième élément du résultat. n est passé aussi.Procédure mySQL stockée pour séparer des chaînes par délimiteur

donc ce que je suis venu avec:

CREATE PROCEDURE SPLIT(IN strToSplit text, IN strDelimiter varchar(1), IN nPartToGet int,OUT strSlice varchar(255)) 
BEGIN 

    SET strSlice = replace(substring(substring_index(strToSplit, strDelimiter, nPartToGet), 
    length(substring_index(strToSplit,strDelimiter, nPartToGet - 1)) + 1), strDelimiter, '') 

END 
; 

garde Malheureusement mysql me naging que j'ai une erreur de syntaxe là-dedans. À mon humble avis cela devrait fonctionner. Quelqu'un pourrait-il m'expliquer où je vais mal?

merci à l'avance

K 

Répondre

2

Vous devez mettre fin à votre SET avec un ';' et, étant donné que le client interprète; en tant que délimiteur, vous devez changer le délimiteur pour pouvoir entrer un réel; dans la procédure.

mysql> delimiter // 
mysql> CREATE PROCEDURE SPLIT(IN strToSplit text, IN strDelimiter varchar(1), IN nPartToGet int,OUT strSlice varchar(255)) 
    -> BEGIN 
    -> SET strSlice = replace(substring(substring_index(strToSplit, strDelimiter, 
    -> nPartToGet),  length(substring_index(strToSplit,strDelimiter, 
    -> nPartToGet - 1)) + 1), strDelimiter, ''); 
    -> END 
    -> // 
Query OK, 0 rows affected (0.01 sec) 
mysql> delimiter ; 
mysql> CALL SPLIT('1;2;3;4;5',';',3,@str); 
Query OK, 0 rows affected (0.00 sec) 

mysql> SELECT @str; 
+------+ 
| @str | 
+------+ 
| 3 | 
+------+ 
1 row in set (0.00 sec) 

docs pertinents: http://dev.mysql.com/doc/refman/5.0/en/stored-routines.html

+0

Merci pour la réponse rapide, d'élaboration. – KB22

Questions connexes