我正在尝试在测试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);
这让我疯了,我在这里失踪了什么?
非常感谢。