У меня есть функция, которая должна возвращать всех детей определенного родителя в таблицу отношений менеджер-работник.
У меня есть CTE, который определяет рекурсивность работающей проблемы, но чтобы позволить выбрать любого родителя, я вложил CTE в функцию.Она создает функцию, но когда я вызываю ее, я получаю сообщение об ошибке: у запроса нет места назначения для данных результата
CREATE OR REPLACE FUNCTION display_full_cat(
PROCURA VARCHAR
)
RETURNS SETOF (categoria varchar, super_categoria varchar) AS $BODY$
BEGIN
WITH RECURSIVE HIERARQUIA AS (
SELECT C.CATEGORIA, C.SUPER_CATEGORIA
FROM CONSTITUIDA C
WHERE C.SUPER_CATEGORIA = PROCURA
UNION
SELECT C.CATEGORIA, C.SUPER_CATEGORIA
FROM CONSTITUIDA C
INNER JOIN HIERARQUIA H ON H.CATEGORIA = C.SUPER_CATEGORIA
) SELECT * FROM HIERARQUIA;
RETURN QUERY
SELECT * FROM HIERARQUIA;
RETURN;
END
$BODY$ LANGUAGE PLPGSQL;
ПРИМЕЧАНИЕ. CONSTITUIDA - это отношение, которое содержит отношение родительский-дочерний элемент, то есть соответственно super_categoria иКатегория.
Для данных
super_categoria | categoria
Organism | Plant
Organism | Animal
Animal | Lion
Animal | Cat
Plant | Apple
Rock | Obsidian
Результат должен быть
super_categoria | categoria
Organism | Plant
Organism | Animal
Animal | Lion
Animal | Cat
Plant | Apple
Но вместо этого я получаю сообщение об ошибке:
ERROR: query has no destination for result data
HINT: If you want to discard the results of a SELECT, use PERFORM instead.
CONTEXT: PL/pgSQL function display_full_cat(character varying) line 3 at SQL statement