簡體   English   中英

使用select語句時無結果的MySql存儲過程通過命令不同步

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM