Skip to content

Instantly share code, notes, and snippets.

@ruyjfs
Created July 27, 2016 01:31
Show Gist options
  • Save ruyjfs/ad0f9492dfdb388d0c04e5d6593de649 to your computer and use it in GitHub Desktop.
Save ruyjfs/ad0f9492dfdb388d0c04e5d6593de649 to your computer and use it in GitHub Desktop.
Recursive function in Postgre SQL
WITH RECURSIVE cte_recursiva (entid,entnome,orgentidpai,seq,path, catid, orgstatus )
AS
(
SELECT org.entid, ent.entnome, org.orgentidpai, 0 seq, CAST (org.entid AS varchar) as path, cat.catid, org.orgstatus
FROM entidade.organograma as org
INNER JOIN entidade.entidade as ent on ent.entid = org.entid
LEFT JOIN entidade.categoriaorganograma AS cat ON cat.catid = org.catid
WHERE org.orgentidpai = 756433 -- Filho da auditoria Interna
UNION ALL
SELECT g.entid,e.entnome, g.orgentidpai, seq+1, path || '>' || g.entid, cat.catid, g.orgstatus
FROM entidade.organograma as g
INNER JOIN entidade.entidade as e on e.entid = g.entid
INNER JOIN cte_recursiva as c ON c.entid = g.orgentidpai
INNER JOIN entidade.categoriaorganograma AS cat ON cat.catid = g.catid
)
SELECT entid FROM cte_recursiva WHERE orgstatus = 'A' ORDER BY path
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment