2015-10-10 57 views
0

我正在写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

在定义运行的表之前,您无法声明游标。这是一个逻辑和编程错误。 –

+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包含你的代码的其余部分。

+0

感谢诺伯特准备的声明取得了结果。现在有什么方法可以迭代它们吗?事情是,我需要获得每个值为一个列形式临时表,并与它做一些事情(乙醚传递给其他存储过程或循环)。 –