我编写了一个存储过程,它以逗号分隔的字符串作为参数。例如:id_list = '23,45,8,106,9,33'。在我想循环遍历字符串的过程中,一次从字符串中提取一个ID并从数据库中提取数据。基本上,ID将用于过程中的where条件。
所以理想情况下我应该得到这样的ID
23 45 8 106 9 33
我试过这样做,但它只提取第一个id然后停止。
DELIMITER ;;
CREATE PROCEDURE `procedure_test`(IN id_list VARCHAR(255))
BEGIN
DECLARE id_length INT DEFAULT 0;
DECLARE id_sub_str INT DEFAULT 0;
IF id_list IS NULL THEN
SET id_list = '';
END IF;
do_this:
LOOP
SET id_length = LENGTH(id_list);
SELECT mechanics_name, mechanics_id from `mechanics` WHERE employer_id = SUBSTRING_INDEX(id_list, ',', 1);
SET id_sub_str = CHAR_LENGTH(SUBSTRING_INDEX(id_list, ',', 1)) + 2;
SET id_list = MID(id_list, id_sub_str, id_length);
IF id_list = '' THEN
LEAVE do_this;
END IF;
END LOOP do_this;
END;;
DELIMITER ;
有人可以建议我怎么做。感谢
答案 0 :(得分:0)
在我的机器上测试
DELIMITER $$
CREATE PROCEDURE procedurename(IN Param1 VARCHAR(255))
BEGIN
SET @text := TRIM(BOTH ',' FROM Param1);
SET @strLen := 0;
SET @i := 1;
WHILE @strLen < LENGTH(@text) DO
SET @str := SUBSTRING_INDEX(@text, ',', @i);
SET @strLen := LENGTH(@str);
SET @i := @i + 1;
INSERT INTO t VALUES( SUBSTRING_INDEX(@str, ',', -1)); -- Print split value
END WHILE;
END
$$
DELIMITER ;
它将数据插入到具有单列的表t中,因此您需要先创建它。
CREATE TABLE T
(blah INT)
然后只是称之为
CALL procedurename('23, 45, 8, 106, 9, 33');
SELECT * FROM t
23
45
8
106
9
33