gpt4 book ai didi

MySql 存储过程通过命令在使用 select 语句时不同步而没有结果

转载 作者:行者123 更新时间:2023-11-29 18:09:13 24 4
gpt4 key购买 nike

我在 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 语句不返回结果,那么为什么我会收到这样的错误?

最佳答案

我通过更新 SELECT 查询成功解决了这个问题,如下所示:

SELECT rgt, user_id INTO @r, @u_id FROM filemanager_files WHERE id=mother_id;

我还不明白为什么要使用@r:=rgt, @u_id:user_id 来代替;每当 SELECT 语句没有返回结果时就会遇到错误。

关于MySql 存储过程通过命令在使用 select 语句时不同步而没有结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47538846/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com