Olá galera, sou novo aqui no forum, muito prazer! Tenho duas dúvidas a respeito de funções A primeira é a seguinte: Criei uma função que me retorna as categorias filhas de determinada categoria passada por parâmetro. Ou seja, ao passar o id de determinada categoria, todas as possíveis categorias filhas abaixo dela são retornadas. Como é um auto-relacionamento, é uma chamada recursiva as categorias. Por exemplo: - A categoria 5 tem como filha a 6 - A categoria 6 tem como filha a 7 e 8 - A categoria 8 tem como filha a 9 Se eu executar a função retorna_todas_filhas(5) ele retornará: 6, 7, 8, 9 CREATE OR REPLACE FUNCTION retorna_todas_filhas(integer)
RETURNS SETOF resultado AS
DECLARE
var_cat ALIAS FOR $1;
BEGIN
RETURN QUERY
WITH cat_filhas AS ( SELECT idsubcategoria AS filhas
FROM tabsubcategoria
WHERE idcategoria = var_cat
)
, cat_maes AS ( SELECT idsubcategoria AS filhas_filhas
FROM tabsubcategoria
WHERE idcategoria IN (SELECT filhas FROM cat_filhas)
)
, resultado AS ( SELECT filhas FROM cat_filhas
UNION
SELECT filhas_filhas FROM cat_maes
)
SELECT filhas FROM resultado;
RETURN;
Executando, ele me retorna exatamente o seguinte
retorna_todas_filhas
(6)
(7)
(8)
(9)
Acima, ele retorna os números entre parenteses, isso é normal?
A segunda dúvida é a respeito desta mesma função usada dentro de outra função.
Preciso usar esta função para fazer a função de busca dentro das categorias que ela me retorna
Ou mesmo, usa-la em um select
exemplo:
SELECT nome_produto
FROM produto
WHERE categoria IN (SELECT retorna_todas_filhas(5)); Mas ele não permite que eu execute isso. Alguém sabe me dizer uma solução para este problema? Obrigado!!!