2016-11-15 5 views
0

У меня есть функция SQL, называемая compare_two_regions, которая возвращает тип данных BIT. Я хочу вызвать эту функцию для функции с именем compare_two_series. Я упростил эту функцию до той точки, где я хочу только вернуть значение из функции compare_two_regions. Тем не менее, я хотел бы назвать compare_two_regions функцию в цикле, но даже в этом упрощенном случае:SQL: Не разрешено возвращать результирующий набор из функции

DELIMITER $$ 

create function compare_two_series(serieA varchar(255), serieB varchar(255)) 
returns BIT 
begin 
declare result BIT; 

/*falta ver*/ 
SELECT P1.x1,P1.y1,P1.x2,P1.y2,P2.x1,P2.y1,P2.x2,P2.y2 
FROM region as P1, region as P2 
WHERE P1.region.series_id = serieA AND P2.region.series_id = serieB; 

SELECT compare_two_regions(P1.x1,P1.y1,P1.x2,P1.y2,P2.x1,P2.y1,P2.x2,P2.y2) into result; 
return result; 
end$$ 
DELIMITER ; 

я получаю следующее сообщение об ошибке: Not allowed to return a result set from a function

ответ

1

Вы можете попробовать изменить эту

SELECT P1.x1,P1.y1,P1.x2,P1.y2,P2.x1,P2.y1,P2.x2,P2.y2 
FROM region as P1, region as P2 
WHERE P1.region.series_id = serieA AND P2.region.series_id = serieB; 

SELECT compare_two_regions(P1.x1,P1.y1,P1.x2,P1.y2,P2.x1,P2.y1,P2.x2,P2.y2) into result; 

к этому

SELECT compare_two_regions(P1.x1,P1.y1,P1.x2,P1.y2,P2.x1,P2.y1,P2.x2,P2.y2) into result 
FROM region as P1, region as P2 
WHERE P1.region.series_id = serieA AND P2.region.series_id = serieB; 

Это не удастся, если результат t запроса возвращает более одной строки. Если вы хотите использовать цикл, вам нужно будет настроить курсор.

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