2012-04-12 3 views
0

Wenn ich eine Funktion in MySQL Query Browser ausführen gibt es Fehlermeldung " " Script-Zeile: 3 Verbindung mit MySQL-Server während der Abfrage verloren ", auch ich kann es nicht fallen lassen. . wenn ich ausführen oder versuchen, es mein Query Browser stecken geblieben drop out wird der Funktionscode unterMySQL-Funktion essen zu viel CPU

gegeben das Argument, dies mag sollte - ('52, 53,50')

DELIMITER $$ 

DROP FUNCTION IF EXISTS `split_string` $$ 
CREATE FUNCTION `split_string`(sStrMain VARCHAR(255)) RETURNS varchar(255) CHARSET latin1 
BEGIN 
DECLARE n,l INT DEFAULT 0; 
DECLARE L1,str,temp,L2,res,Final_res VARCHAR(255); 


SET str = sStrMain; 

WHILE str !='' DO 
    SET L1 = SUBSTRING(str,1,LOCATE(',',str)-1); 
    SET res = lookup_code(L1); 
    SET Final_res = CONCAT_WS(',',Final_res,res); 
    SET temp = REPLACE(str,SUBSTRING(str,1,L1,''); 
    SET str = temp; 
    SET temp = ''; 
    SET n = n + 1; 
END WHILE; 


RETURN Final_res; 

END $$ 

DELIMITER ; 

I Ich werde diese Funktion verwenden, um die Zeichenkette nach Trennzeichen (Komma) zu trennen und das Ergebnis zurückzusenden.

+0

Bitte geben Sie den echten Code ein, den Sie mit c & p verwenden. 'SET temp = REPLACE (str, SUBSTRING (str, 1, L1, '');' ist ein Syntaxfehler. BTW, AFAICT 'temp' ist unnötig - Sie könnten einfach' SET str = REPLACE (...); ' – glglgl

+1

Außerdem bin ich nicht ThinK Ihre Funktion wird in der Lage sein zu tun, was Sie wollen: da es nur eine' varchar' zurückgibt, wandelt es '50,51,52' in' 505152' um - ich denke nicht, dass das ist was willst du ... – glglgl

+0

Was eigentlich sollte deine Funktion tun? – Devart

Antwort

1

Probieren Sie diese Textteilprozedur aus -

CREATE PROCEDURE split_string(sStrMain VARCHAR(255)) 
BEGIN 
    SET @strLen := 0; 
    SET @i := 1; 

    WHILE @strLen < LENGTH(sStrMain) DO 
    SET @str = SUBSTRING_INDEX(sStrMain, ',', @i); 
    SET @strLen = LENGTH(@str); 
    SET @i = @i + 1; 

    SET @res = SUBSTRING_INDEX(@str, ',', -1); 
    SELECT @res; -- Show a value, call your function here 

    END WHILE; 
END