2012-04-12 45 views
0

當我在MySQL查詢瀏覽器中執行一個函數時,它會給出錯誤消息「 」腳本行: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 ; 

我打算使用此功能按分隔符(逗號)分割字符串並將結果返回給我。

+0

請發佈您在c&p中使用的真實代碼。 'SET temp = REPLACE(str,SUBSTRING(str,1,L1,'');'是一個語法錯誤,BTW,AFAICT'temp'是不必要的 - 你可以'SET str = REPLACE(...) '。 – glglgl 2012-04-12 05:49:29

+1

另外,我不會縮小你的函數將能夠做你想要的:因爲它只返回一個'varchar',它將'50,51,52'轉換爲'505152' - 我不認爲這是你想要什麼... – glglgl 2012-04-12 05:51:10

+0

你的函數應該做些什麼? – Devart 2012-04-12 06:49:53

回答

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