簡體   English   中英

沒有SELECT的MySQL存儲過程的返回值

[英]MySQL Stored Procedure return value without a SELECT

我編寫了以下存儲過程:

DELIMITER $$
CREATE PROCEDURE `getroom`(OUT `free_room` INT)
BEGIN

    SELECT room INTO free_room FROM admins WHERE free = 1 LIMIT 1 FOR UPDATE;
    UPDATE admins SET free = 0 WHERE room = free_room;

END$$
DELIMITER ;

我試圖查詢表中是否有空閑房間,鎖定該行,以便其他用戶無法同時查詢它,並在最后將其設置為非空閑狀態。

我的問題是:

1)如何調用存儲過程並自動獲得free_room值(就像我運行SELECT語句一樣)而無需執行其他SELECT語句?

2)由於我沒有傳遞任何參數(沒有“ IN”值),為什么我不能成功運行CALL getroom() 我收到以下錯誤:

PROCEDURE getroom的參數數目不正確; 預期1,得到0

希望我的問題很清楚!

您可以改為創建函數:

DELIMITER $$
CREATE FUNCTION `getroom`() RETURNS INT
BEGIN
    DECLARE free_room INT;
    SELECT room INTO free_room FROM admins WHERE free = 1 LIMIT 1 FOR UPDATE;
    UPDATE admins SET free = 0 WHERE room = free_room;
    RETURN free_room;
END$$
DELIMITER ;

然后只需使用:

SELECT getroom();

嘗試:

DELIMITER $$

CREATE PROCEDURE `getroom`()
BEGIN 
    SELECT @free_room := room
    FROM admins
    WHERE free = 1
    LIMIT 1
    FOR UPDATE;

    UPDATE admins
    SET free = 0
    WHERE room = @free_room;   
END$$

DELIMITER ;
DELIMITER $$
CREATE PROCEDURE `getroom`()
BEGIN 
DECLARE free_room INT;  
    SELECT room INTO free_room FROM admins WHERE free = 1 LIMIT 1 FOR UPDATE;
    UPDATE admins SET free = 0 WHERE room = free_room;
    SELECT free_room;
END$$
DELIMITER ;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM