2012-04-12 5 views
0

Когда я выполняю функцию в MySQL Query Browser, она выдает сообщение об ошибке « « Строка сценария: 3 Потерянное соединение с сервером MySQL во время запроса », даже я не могу его потерять. . когда я выполнение или пытаюсь бросить его из моего запроса браузера застрял код функции приведен нижеФункция MySQL слишком много стоит CPU

аргумент хотел это - ('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 Я буду использовать эту функцию для разделения строки разделителем (запятой) и вернуть мне результат.

+0

Пожалуйста, разместите реальный код, который вы используете с помощью c & p. 'SET temp = REPLACE (str, SUBSTRING (str, 1, L1, '');' является синтаксической ошибкой. BTW, AFAICT 'temp' не требуется - вы можете просто выполнить SET SET = REPLACE (...); '. – glglgl

+1

Кроме того, я не хочу, чтобы ваша функция могла делать то, что вы хотите: поскольку она возвращает только' varchar', она преобразует '50,51,52' в' 505152' - я не думаю, что это что вы хотите ... – glglgl

+0

Что на самом деле должна делать ваша функция? – Devart

ответ

1

Попробуйте эту процедуру разделения текста -

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 
Смежные вопросы