2013-12-11 3 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

답변을하는 동안 업데이트되었을 수도 있지만 데이터베이스에 예제를 넣을 때 계속 오류 1054 알 수없는 열 'WbId'가 나타납니다. – Coffman34

+0

내 대답을 업데이트했습니다. 지금 확인하십시오, 변수 이름을 변경하는 것을 잊었습니다 – Hitesh

+0

이제 올바른 티켓이 추가됩니다. 그러나 항상 1을 반환합니다. SoldOut 값을 반환해야합니다. 그래서 SoldOut = 0이면 티켓을 추가하고 SoldOut = 1이면 티켓을 추가하지 않았습니다. – Coffman34