我在MySQL中创建了一个存储过程以从SELECT返回一些参数,但是不起作用。
在userID和otherID中返回0。
有人可以帮帮我吗? 感谢删除程序如果存在sp_XPTO;
DELIMITER ;;
创建程序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;
结束;;
DELIMITER;
更新:
对不起, 在我经常阅读之后,我得出结论,错误在于我如何调用存储过程,并且Ravinder是正确的。 感谢
答案 0 :(得分:1)
我不确定您是否打算检查数据库中是否存在值
因为,您的select
语句正在执行比较,而不是分配。
SELECT userID=E.userID, otherID=E.otherID
通过上述声明,您可能会认为E.userID
参数OUT
已分配userID
的值。但是你使用的语法是错误的。
在上面的语句中,两个表达式都返回boolean
。由于userID
值与E.userID
不匹配,因此比较结果为false
,您看到了0
。 otherID
变量也是如此。
要为变量赋值,必须使用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;