Ir para conteúdo
Fórum Script Brasil
  • 0

Usar uma função dentro de outra função


ak32

Pergunta

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!!!

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

A resposta para a segunda dúvida:

SELECT nome_produto
FROM produto
WHERE categoria IN (
    SELECT *
    from retorna_todas_filhas(5)
)

Acredito que resolve a primeira dúvida também (dica: select FROM)

Editado por Kakao
Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...