Estou tentando escrever uma função recursiva do PostgreSQL que basicamente diz:
- Pegue um ID de grupo
- Se houver um item naquele grupo, devolva-o
- Caso contrário, encontre os subgrupos do grupo
- Repita a função em cada um dos subgrupos
A função recebe um ID de grupo e o título de um item a ser encontrado, e o que tenho até agora para o corpo é:
RETURN QUERY SELECT -- ... return children with title, if any
-- If there were none, look for grandchildren (and so on)
IF NOT FOUND THEN
-- Loop through the sub-group IDs
FOR sub_group_id IN
SELECT -- ... sub-groups of the provided group
LOOP
-- Recursion time ... stuck here
O que eu quero expressar é:
- Correr
SELECT * FROM this_function(sub_group_id, title)
; - Se retornar > 0 resultados, retorne esses resultados
- Se isso não acontecer, continue em loop
Mas se eu apenas disser:
LOOP
RETURN QUERY SELECT * FROM this_function(sub_group_id, title);
não tem o efeito desejado. Alguém pode me ajudar a expressar o acima no PostgreSQL?
Você pode escrever SQL recursivo, não precisa de uma função para isso:
violino
Se você precisar de uma função, é claro que pode encapsular o SQL recursivo em uma:
violino