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

时间:2014-04-11 14:31:48

标签: mysql

我在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是正确的。 感谢

1 个答案:

答案 0 :(得分:1)

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

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

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

在上面的语句中,两个表达式都返回boolean。由于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;