2015-10-10 56 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

感謝諾伯特准備的聲明取得了結果。現在有什麼方法可以迭代它們嗎?事情是,我需要獲得每個值爲一個列形式臨時表,並與它做一些事情(乙醚傳遞給其他存儲過程或循環)。 –