我正在编写MySQL存储过程,我在使用游标迭代临时表行时遇到问题。我假设在填充表之前选择了数据,但不确定。以下是我的程序中的基本步骤:
- DECLARE articles_cursor CURSOR FOR SELECT DISTINCT title FROM FoundIn;
- CREATE TEMPORARY TABLE IF NOT EXISTS FoundIn ( ... );
- Populate the table ...
- Open the cursor and try to fetch data
每次我在光标中找不到。如果问题是在表之前声明了游标,有没有办法解决它?此外,我需要不同的值来迭代槽,所以我认为WHILE循环不是一个选项。
答案 0 :(得分:1)
要使其工作,您需要使用预准备语句:
CREATE PROCEDURE someProc()
BEGIN
CREATE TEMPORARY TABLE IF NOT EXISTS FoundIn ( ... );
SET @selectSql=CONCAT("SELECT * FROM FoundIn");
PREPARE stmt FROM @selectSql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END;
或替代方案:使用2个程序:
CREATE PROCEDURE someProc()
BEGIN
CREATE TEMPORARY TABLE IF NOT EXISTS FoundIn ( ... );
CALL someProc2();
END;
其中someProc2包含其余代码。