首页 文章

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

提问于
浏览
0

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

在userID和otherID中返回0 .

有人可以帮帮我吗?谢谢

如果存在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;结束 ;; DELIMITER;


更新:

对不起,在我经常阅读之后,我得出结论,错误在于我如何调用存储过程,并且Ravinder是正确的 . 谢谢

1 回答

  • 1

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

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

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

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

    要为变量赋值,必须使用 INTO 指令运算符 .

    Example

    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;
    

相关问题