[英]How to call stored procedure and select the return value at a time on 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.