gpt4 book ai didi

MySQL 存储过程在 SELECT 的参数中返回 0

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

我在 MySQL 中创建了一个存储过程来从 SELECT 返回一些参数,但不起作用。

在 userID 和 otherID 中返回 0。

有人可以帮助我吗?谢谢

DROP PROCEDURE IF EXISTS sp_XPTO;

DELIMITER ;;

CREATE PROCEDURE sp_XPTO(

OUT userID INT UNSIGNED,

OUT otherID INT UNSIGNED,

IN bookID INT UNSIGNED

)

BEGIN

SELECT userID=E.userID, otherID=E.otherID

FROM Exp as E

WHERE E.bookID = bookID;

END ;;

DELIMITER ;

<小时/>

更新:

抱歉,在我阅读了很多内容之后,我得出结论,错误在于我如何调用存储过程,而Ravinder是正确的。谢谢

最佳答案

我不确定您的意图是否是检查数据库中是否存在值。
因为,您的 select 语句正在执行比较,而不是赋值。

SELECT userID=E.userID, otherID=E.otherID

通过上面的语句,您可能会认为E.userID的值已分配给OUT参数userID。但您使用的语法是错误的。

在上面的语句中,两个表达式都返回一个 bool 值。由于 userID 值与 E.userID 不匹配,比较结果为 false,您看到的是 0otherID 变量也是如此。

要将值分配给变量,您必须使用INTO指令运算符。

示例:

SELECT E.userID, E.otherID 
INTO userID, otherID

更改您的存储过程如下:

DROP PROCEDURE IF EXISTS sp_XPTO;

DELIMITER //

CREATE PROCEDURE sp_XPTO(
OUT userID INT UNSIGNED,
OUT otherID INT UNSIGNED,
IN bookID INT UNSIGNED
)
BEGIN
SELECT E.userID, E.otherID
INTO userID, otherID
FROM Exp as E
WHERE E.bookID = bookID; -- <- there was a ')'. removed.
END;
//

DELIMITER ;

使用所需参数调用该过程并读取输出参数。

call sp_XPTO( @userID, @otherID, 234 ); -- where book id is 234
select @userID, @otherID;

关于MySQL 存储过程在 SELECT 的参数中返回 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23015504/

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