2013-02-01 52 views
2

我有一個工作的MySQL 5.5存儲過程,遞歸調用自己。MySQL遞歸存儲過程與光標&視圖不刷新

我需要執行每個調用都唯一的動態sql查詢,然後遍歷查詢中的所有值。爲此,我聲明基於視圖的遊標,並在打開遊標之前使用動態SQL創建視圖。我快速循環遊標,將一些信息捕獲到一個僞數組變量中,然後關閉遊標並放下視圖。然後處理已在數組中捕獲的信息,其中可能包括對相同存儲過程的遞歸調用。

我遇到的問題是,即使每次調用該過程時都創建並刪除視圖,視圖定義在第一次遞歸調用後似乎會卡住(即視圖已創建好)初始調用,它在第一次遞歸調用中創建爲Ok,但第二次遞歸調用中的視圖與第一次遞歸調用中的視圖相同,即使創建視圖的SQL不同)。

該視圖的名稱在每次創建時都是相同的(在MySQL中模擬動態SQL遊標的一部分),並且看起來好像視圖定義被緩存在某處並在創建時「復活」,即使CREATE VIEW語句每次都不相同。

我知道該視圖正在創建並按預期丟棄,因爲有代碼阻止同時發生的用戶無意中使用相同的公共視圖 - 也就是說,如果視圖已經存在,則檢查並延遲執行(另一個缺乏私有的MySQL混亂視圖)。

我已經能夠解決MySQL的所有其他缺點,但這一個讓我難住。預先感謝任何見解/協助!

邁克

+0

小問題更新:我已經編寫了另一個存儲過程,它使用相同的視圖/遊標解決方法來允許動態SQL,但是此例程不使用遞歸,並且它表現出同樣的問題:即使返回以前的結果它被刪除並用不同的SELECT語句重新創建。如果視圖在創建之前存在,那麼例程會檢查並延遲,所以不能鎖定那些被丟棄的東西,可以在那裏?!? – MikeS

回答

0

看起來這可能與事務隔離 - 你在事務中這樣做,你下探後提交,你有沒有自動提交的,等等?