Jump to content
Fórum Script Brasil
  • 0

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


ak32

Question

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 to comment
Share on other sites

2 answers to this question

Recommended Posts

  • 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)

Edited by Kakao
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152k
    • Total Posts
      651.7k
×
×
  • Create New...