循环遍历Mysql过程中的字符串

时间:2014-10-29 17:20:36

标签: python mysql stored-procedures

我编写了一个存储过程,它以逗号分隔的字符串作为参数。例如: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 ;

有人可以建议我怎么做。感谢

1 个答案:

答案 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