MySQL使用IN Varchar()存储Proc的Param而不循环游标

时间:2015-03-20 14:27:34

标签: mysql csv stored-procedures

我正在尝试在测试Stored Procedures时让以下内容正常工作,但它没有。有人能指出什么是错的?

我们的想法是将userids列为csv,并将其email addresses作为csv返回。

(这只是用于在mysql中测试存储过程。我知道我只需用常规的SQL查询选择它就可以了)

DELIMITER $$
DROP PROCEDURE IF EXISTS `build_email_list`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `testing_email_list`(IN user_ids VARCHAR(200), INOUT email_list VARCHAR(4000))
BEGIN

    DECLARE v_finished INTEGER DEFAULT 0;
    DECLARE v_email VARCHAR(100) DEFAULT "";     

    DECLARE email_cursor CURSOR FOR
    SELECT email_address FROM users WHERE id IN (user_ids);

    DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_finished = 1;

    OPEN email_cursor;     
    get_email: LOOP

        FETCH email_cursor INTO v_email;     
        IF v_finished = 1 THEN LEAVE get_email; END IF;      
        SET email_list = CONCAT(v_email, ";", email_list);

    END LOOP get_email;

CLOSE email_cursor;     
END$$    
DELIMITER ;

这样称呼:

SET @email_list = "";
CALL testing_email_list("1,8", @email_list);
SELECT @email_list;

但是,它只返回传递的第一个id(即1)。但是,当我更改存储过程以直接使用以下ID时,它可以正常工作:

DECLARE email_cursor CURSOR FOR
SELECT email_address FROM users WHERE id IN (1,8);

这让我疯了,我在这里失踪了什么?

非常感谢。

0 个答案:

没有答案