【发布时间】:2012-04-12 05:39:04
【问题描述】:
当我在 MySQL 查询浏览器中执行一个函数时,它会给出错误消息,这是“ “脚本行:3 在查询期间丢失与 MySQL 服务器的连接”,即使我无法删除它。当我正在执行或尝试删除它时,我的查询浏览器卡住了。功能代码如下
参数应该是这样的 - ('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 ;
我将使用此函数通过分隔符(逗号)分割字符串并将结果返回给我。
【问题讨论】:
-
请贴出你在c&p中使用的真实代码。
SET temp = REPLACE(str,SUBSTRING(str,1,L1,'');是语法错误。顺便说一句,AFAICTtemp是不必要的 - 你可以这样做SET str = REPLACE(...);。 -
此外,我不认为你的函数能够做你想做的事:因为它只返回一个
varchar,它会将50,51,52转换为505152- 我不认为这就是你想要的...... -
你的函数实际上应该做什么?
-
@Devart 我尝试用逗号分割字符串,提取的值将发送到另一个函数,该函数获取提取值的名称(字符串值)。你可以看到lookup_code(L1)。如果您有更好的想法,请分享。
标签: mysql sql stored-procedures cpu-usage