mysql存储过程选择并更新

时间:2014-03-10 00:57:34

标签: mysql stored-procedures

我正在尝试为mysql编写一个存储过程,基本上,它会选择一个id,并更新所选id的operationdate。

DELIMITER //
 CREATE PROCEDURE getID(
  IN proc_intervaldate datetime
 )

 BEGIN
    DECLARE RUserID BIGINT;
    SELECT 
        UserID 
    INTO RUserID 
    FROM Tasks
    WHERE  OperationDate < proc_intervaldate
    LIMIT 1 ;

    UPDATE Tasks SET OperationDate = now() WHERE UserID = RUserID;

    SELECT RUserID ;


 END //
DELIMITER ;

但是当我使用这个程序时,它会返回UserID但不会更新,如果我发表评论

SELECT RUserID

然后,它会更新,但不会返回任何数据。

1 个答案:

答案 0 :(得分:1)

  

当我使用此过程时,它将返回UserID但不更新,如果我发表评论'SELECT RUserID;',则更新,但不会返回数据。

您可以更改存储过程的定义以使用OUT参数,而不仅仅是IN。这样,您就可以使用脚本语言在同一OUT参数上捕获OUT值。意思是你不需要执行:

SELECT RUserID ;

在您的存储过程中。

更改您的SP定义如下:

DELIMITER //
CREATE PROCEDURE getID( IN proc_intervaldate datetime, OUT RUserID bigint )
BEGIN
    SELECT 
      UserID INTO RUserID 
    FROM Tasks
    WHERE 
      OperationDate < proc_intervaldate
    LIMIT 1 ;

    UPDATE Tasks SET OperationDate = now() WHERE UserID = RUserID;
END;
//
DELIMITER ;

您可以调用此存储过程,例如,在MySQL控制台:

SET @RUserID := 0;
CALL getID( now(), @RUserID );
SELECT @RUserID;

请参阅

  • MySQL: CALL procedure syntax
    • 要使用OUT或INOUT参数从过程中获取值, 通过用户变量传递参数,然后检查 程序返回后变量的值。