2013-12-11 48 views
0

我有一個存儲過程:的MySQL函數返回

CREATE DEFINER=`root`@`localhost` PROCEDURE `InsertRaffleTicket`(IN userId BIGINT, IN raffleId BIGINT) 
BEGIN 
    INSERT INTO RaffleTicket(UserId, RaffleId) 
    SELECT userId, raffleId 
    FROM RaffleStatus rs 
    WHERE rs.RaffleId = raffleId 
    AND rs.SoldOut = 0; 
END 

如何,我可以把它變成一個功能,將返回在成功插入一個值到表?

我曾嘗試:

CREATE DEFINER=`root`@`localhost` FUNCTION `addTicket`(UserId int, RaffleId int) RETURNS int(11) 
BEGIN 
    INSERT INTO RaffleTicket(UserId, RaffleId) 
    SELECT userId, raffleId 
    FROM RaffleStatus rs 
    WHERE rs.RaffleId = raffleId 
    AND rs.SoldOut = 0; 
    return rs.SoldOut; 
RETURN 1; 
END 

但它給我的字段列表錯誤1109未知表「RS」。

回答

1
CREATE DEFINER=`root`@`localhost` FUNCTION `InsertRaffleTicket`(
userId BIGINT, 
raffleId BIGINT 
) RETURNS int 
BEGIN 

DECLARE retValue int; 

select SoldOut into retValue from RaffleStatus where RaffleId = raffleId; 

INSERT INTO RaffleTicket(UserId, RaffleId) 
SELECT userId, raffleId 
FROM RaffleStatus rs 
WHERE rs.RaffleId = raffleId 
AND rs.SoldOut = 0; 

RETURN retValue; 

END 
+0

我在回答時可能已經更新了,但是當我將您的示例放入我的數據庫時,我一直收到Error 1054 Unkown列'WbId'。 – Coffman34

+0

我已經更新了我的答案,請現在檢查,我忘記更改變量名稱 – Hitesh

+0

現在添加正確的票證。但它總是返回1.我需要它返回SoldOut值。所以我知道如果SoldOut = 0,它添加了票證,如果SoldOut = 1,它不添加票證。 – Coffman34