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?
Pergunta
ak32
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
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:Mas ele não permite que eu execute isso. Alguém sabe me dizer uma solução para este problema?
Obrigado!!!
Link para o comentário
Compartilhar em outros sites
2 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.