【问题标题】:MySQL Stored Procedure returns 0 in parameters from a SELECTMySQL 存储过程在 SELECT 的参数中返回 0
【发布时间】:2014-05-25 18:44:38
【问题描述】:

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

在 userID 和 otherID 中总是返回 0。

有人可以帮助我吗? 谢谢

如果存在则删除过程 sp_XPTO;

分隔符;;

创建过程 sp_XPTO(

OUT userID INT UNSIGNED,

OUT otherID INT UNSIGNED,

IN bookID INT UNSIGNED

)

开始

选择用户ID=E.userID,其他ID=E.otherID

FROM Exp as E

WHERE E.bookID = bookID;

结束;;

分隔符;


更新:

对不起, 看了很多后,得出的结论是错误在于我如何调用存储过程,而Ravinder是正确的。 谢谢

【问题讨论】:

标签: mysql


【解决方案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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-13
    • 1970-01-01
    • 1970-01-01
    • 2012-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多