![](/img/trans.png)
[英]MySql Commands out of sync when storing stored procedure result in dataframe
[英]MySql stored procedure through Commands out of sync when using select statement with no result
我在MySql中具有以下存儲過程
CREATE PROCEDURE fileAdd (OUT `file_id` INT UNSIGNED, IN `mother_id` INT UNSIGNED, IN `input_filename` VARCHAR(255), IN `input_dte` INT UNSIGNED, IN `input_user_id` SMALLINT UNSIGNED, IN `input_type` TINYINT(1) UNSIGNED)
BEGIN
SET @r = 1;
SET @u_id = 0;
SELECT @r:=rgt, @u_id:=user_id FROM filemanager_files WHERE id=mother_id;
IF @u_id = 0 THEN
SET @u_id = input_user_id;
END IF;
UPDATE filemanager_files SET lft = lft + 2 WHERE lft >= @r;
UPDATE filemanager_files SET rgt = rgt + 2 WHERE rgt >= @r;
INSERT INTO filemanager_files (rgt, lft, filename, dte_created, dte_updated, user_id, type) VALUES (@r+1, @r, input_filename, input_dte, input_dte, @u_id, input_type);
SET file_id = LAST_INSERT_ID();
END
主要輸入變量是mother_id,這使我遇到了問題。 當我使用參數mother_id = 0調用它時,內部語句運行良好,並且在表中插入了新行,但出現以下錯誤:
SQL查詢:SET FOREIGN_KEY_CHECKS = ON;
MySQL說:#2014-命令不同步; 您現在不能運行此命令
令人驚訝的是,當我使用參數mother_id =“ A_VALID_ROW_ID”調用相同的過程時,一切正常,並且我沒有收到任何錯誤。 我從程序中刪除了以下語句
SELECT @r:=rgt, @u_id:=user_id FROM filemanager_files WHERE id=mother_id;
我再次使用參數mother_id = 0對其進行了測試,這次我沒有收到任何錯誤。
似乎每當select語句由於where子句而沒有返回任何結果時,我會收到這樣的錯誤。 在以下SELECT語句未返回結果的情況下,我的過程具有@r和@u_id變量的默認值,為什么我應該收到這樣的錯誤?
我設法通過更新SELECT查詢來解決此問題,如下所示:
SELECT rgt, user_id INTO @r, @u_id FROM filemanager_files WHERE id=mother_id;
我還不明白為什么要使用@r:= rgt,@u_id:user_id; SELECT語句不返回結果時遇到錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.