MySQL临时表游标

时间:2015-10-10 14:17:38

标签: mysql

我正在编写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循环不是一个选项。

1 个答案:

答案 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包含其余代码。