2011-04-25 89 views
0

所以,我試圖設置一個mysql存儲過程來使用遊標,無論出於何種原因,遊標無法打開,並且(據我所知)導致SP停止。下面是遊標聲明MySQL遊標打開失敗

DECLARE cur_networks CURSOR FOR 
SELECT td.name FROM drupal5.users u 
LEFT JOIN drupal5.term_user tu 
ON u.uid = tu.uid 
LEFT JOIN drupal5.term_data td 
ON td.tid = tu.tid 
WHERE u.uid = tmpint; 

tmpint早在SP聲明的變量:

DECLARE tmpint int; 

,它的值設置在這裏:

SELECT t1.uid, t1.mail FROM drupal5.users t1 WHERE t1.name = Drupal_User_Name 
     INTO tmpint, Drupal_Email; 

然後我做了一堆其他腳本里的東西看起來都很好,但是當我到達這條線時:

OPEN cur_networks; 

事情崩潰了。我有一些日誌記錄啓用阿拉這篇文章:http://www.bluegecko.net/mysql/debugging-stored-procedures/

這是偉大的工作。如果我在OPEN命令之前終止輸出,我可以看到一切看起來都正常。如果在OPEN命令後終止輸出,則不會將任何內容保存到日誌中,這表示該行是問題所在。我不知道爲什麼。這可能很荒唐簡單,但我似乎無法發現它。提前致謝。如果有必要發現問題,我會發布更多的SP。

回答

0

問題是一個權限問題。執行查詢的MySQL用戶沒有對term_user或term_data表的讀取權限。

故事的寓意是,如果一個應用程序正在執行你的SP並且它不工作,一定要試着直接從MySQL控制檯運行SP。這是從您的流程中獲得反饋的唯一真正方法。