【发布时间】:2018-05-12 08:08:42
【问题描述】:
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 子句而没有返回结果时,我都会收到这样的错误。 我的过程有 @r 和 @u_id 变量的默认值,以防后面的 SELECT 语句不返回结果,我为什么会收到这样的错误?
【问题讨论】: