我正在尝试为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
然后,它会更新,但不会返回任何数据。
答案 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;
请参阅: