2016-10-07 2 views
0

У меня есть 4 SP. get_revenue, get_hotel_revenue, get_region_revenue, get_division_revenueКак вернуть MySQL прикованную хранимую процедуру вызова?

Так get_revenue сначала выберет правильные данные для корма в другой 3 SP. Ниже то, что я пытаюсь:

SELECT @hotel_id := hotel.hotel_id, @region_id := region_id, @division_id := division_id FROM campaign 
LEFT JOIN hotel ON campaign.hotel_id = hotel.id 
WHERE campaign.id = campaign_id; 

#This is the part that doesnt return anything. 
CALL get_hotel_revenue(@hotel_id); 
CALL get_region_revenue(@region_id); 
CALL get_division_revenue(@division_id); 

Но результат возвращает только 3 переменные. Как я могу получить 3 результата из 3 вложенных SP?

Вот SP для get_division_revenue, который похож с другим 2.

DELIMITER ;; 
CREATE DEFINER=`root`@`localhost` PROCEDURE `get_division_revenue`(IN division_id INT(11)) 
BEGIN 
    SELECT sum(revenue) FROM data 
    WHERE data.property_id IN 
    (
    SELECT hotel_id FROM hotel 
    WHERE hotel.division_id = division_id 
); 
END;; 
DELIMITER ; 

ответ

0

Добавить второй параметр как OUT переменные:

DELIMITER ;; 
CREATE PROCEDURE `get_division_revenue`(IN division_id INT(11), OUT out_result int) 
BEGIN 
    -- and store the query result in that variable 
    SET out_result = (
     SELECT sum(revenue) FROM data 
     WHERE data.property_id IN 
     (
     SELECT hotel_id FROM hotel 
     WHERE hotel.division_id = division_id 
    ) 
    ); 

END;; 
DELIMITER ; 

После этого, измените первую хранимую процедуру, добавив сессию переменные:

-- Create the session variables before call procedures 
set @hotel_revenue = null; 
set @region_revenue = null; 
set @division_revenue = null; 

-- Now you can acll the procedures with those variables 
CALL get_hotel_revenue(@hotel_id,@hotel_revenue); 
CALL get_region_revenue(@region_id,@region_revenue); 
CALL get_division_revenue(@division_id,@division_revenue); 

@hotel_revenue, @region_revenue и @division_revenue имеют результат каждой хранимой процедуры по мере необходимости.

В конце вашей процедуры добавить отборное с того, что переменные:

SELECT @hotel_revenue as hotel_revenue, 
    @region_revenue as region_revenue, 
    @division_revenue as division_revenue; 
+0

@resting, я отредактировал мой ответ, я забыл добавить в конце SQL –

+0

спасибо. Я действительно звонил в SP по отдельности, но ваше решение имеет смысл. Итак, конечный результат должен быть примерно таким: https://paste.ee/p/YP1GW ya? – resting

Смежные вопросы