我希望以下Stored Routine返回一系列行,而它只返回1
CREATE PROCEDURE example()
BEGIN
DECLARE current_id INT;
DECLARE done INT DEFAULT 0;
DECLARE cur_main CURSOR FOR SELECT id from tasks;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
OPEN cur_main;
FETCH cur_main into current_id;
lp:WHILE not done DO
FETCH cur_main into current_id;
IF done = 1 THEN
LEAVE lp;
END IF;
SELECT * from tasks WHERE id = current_id;
END WHILE lp;
CLOSE cur_main;
END
有任何帮助吗?这是我第一次使用MySQL存储的例程。
答案 0 :(得分:1)
不幸的是,MySQL
不会以这种方式返回多行。
此程序:
CREATE PROCEDURE example()
BEGIN
SELECT 1;
SELECT 2;
END;
将返回多个结果集,而不是行。
您能否描述一下您希望通过此存储过程实现哪些任务?
答案 1 :(得分:0)
您可能希望尝试此语句而不是现有测试。
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
对于不匹配的SQLSTATE值,continue处理程序的默认操作是EXIT。 “未找到”常量涵盖所有有效的020条件。
答案 2 :(得分:0)
这是另一种可能性。再看一下你的代码,我注意到你在while循环之前做了一个FETCH,它会给你第一条记录。您进入WHILE循环,然后执行另一个FETCH。通常,您将进入while循环,使用当前记录进行处理,然后在循环循环之前再执行另一个FETCH。此外,通过将下一个FETCH移动到循环体的末端,您也可以删除IF测试。
FETCH cur_main into current_id;
lp:WHILE not done DO
SELECT * from tasks WHERE id = current_id;
FETCH cur_main into current_id;
END WHILE lp;
答案 3 :(得分:0)
谢谢你的回复。 我设法在临时表的帮助下做我所做的事情,其中我插入所有结果,然后选择* FROM该表。