在这种情况下,我必须将逗号分隔的字符串传递给mysql过程,拆分该字符串并将这些值作为行插入表中。
如下所示
例如,如果我将“jhon,swetha,sitha”字符串传递给mysql过程,那么它必须用逗号拆分该字符串,并将这些值作为3条记录插入表中。
CREATE PROCEDURE new_routine (IN str varchar(30))
BEGIN
DECLARE tmp varchar(10);
DECLARE inc INT DEFAULT 0;
WHILE INSTR(str, ',') DO
SET tmp = SUBSTRING(SUBSTRING_INDEX(str,',',inc),LENGTH(SUBSTRING_INDEX(str,',',inc-1))+1),',','');
SET str = REPLACE(str, tmp, '');
//insert tmp into a table.
END WHILE;
END
但这并不能解决任何问题。
1条答案
按热度按时间9o685dep1#
在处理字符串时需要更加小心。你不能使用
REPLACE()
因此,如果逗号分隔列表中的一个元素是另一个元素的子字符串,将替换多个引用,从而损坏数据。这个INSERT()
字符串函数更适合于此,不要与INSERT
用于插入到表中的语句。接下来是一个测试表:
新表为空。
调用程序。
请注意,“1行受影响”并不意味着您所期望的。它指的是我们做的最后一次插入。因为我们一次插入一行,所以如果过程至少插入一行,那么行计数总是1;如果该过程不插入任何内容,则0行将受到影响。
有效吗?