1
我繼承了一些使用存儲過程的代碼,其中一個代碼看起來沒有正常工作。在MySQL中找不到存儲過程中的臨時表
存儲過程使用臨時表稍後在過程中插入數據。但是,當我執行存儲過程時,不會插入任何數據。當我調試它,我得到的錯誤:
Table 'db.testtable' doesn't exist
我剝了下來存儲過程到下面的代碼,這是行不通的。我總是在SELECT語句中得到錯誤。基於我所見過的例子,所有內容都可以看出來。
DROP PROCEDURE IF EXISTS db.insert_record;
CREATE PROCEDURE db.`insert_record`(id int, status int)
BEGIN
DECLARE code varchar(45);
DROP TEMPORARY TABLE IF EXISTS testTable;
CREATE TEMPORARY TABLE testTable AS (SELECT 'TEST' AS fakeColumn);
SELECT fakeColumn INTO code FROM testTable;
END;
我也驗證了我連接的用戶具有創建臨時表的權限;事實上,它具有可
其他細節
在Windows上運行的MySQL 5.6許可每次。
如果我自己拿掉drop/create/select語句並作爲腳本運行,它的行爲與預期相同。
使用Toad for MySQL來調試存儲過程。
原來,這個問題是不是代碼問題,而是一個工具的問題。我在整個存儲過程中添加了select語句,並返回臨時表的結果。 由於某些原因,Toad for MySQL無法處理臨時表的調試。一旦我確定了,我發現在存儲過程的insert語句中存在一個問題。 – drneel 2014-10-31 13:43:47
我們在相同的環境中也遇到同樣的錯誤。在我們的例子中,這不是每次,有時它都有效,有時它給出錯誤表'table_name'不存在。在我們的sp中,我們正在下降並在適當的位置創建臨時表(這在以前的mysql版本5.5中起作用),並且這個sp在循環中被多次調用。 – Anil 2014-11-17 13:29:11