Bom dia amigos, precisava urgente de uma ajuda de vocês, o meu problema é:
ao desativar uma unidade pai, preciso desativar todas as unidades filhas
recursivamente: tenho tentado da seguinte forma...

ESTRUTURA DA TABELA:

select * from estrutura_organizacional;

 id_unidade | id_unid_superior |                        nm_unidade
              | nm_sgl_unidade | tp_status | id_tipo_unidade
------------+------------------+-----------------------------------------------------------+----------------+-----------+-----------------
         11 |               10 | Setor de Processamento
               | SEPRO                       | A         |               4
         12 |               10 | Setor de Relatórios e estatísticas
               | SEREL                        | A         |               4
          7 |                4 | Setor de acompanhamento de processos e
sistemas de gestão | SAPGE      | A         |               4
          8 |                4 | Setor de Arquivo
               | SEARQ                              | A         |
    4
          9 |                4 | Setor de Matrícula
               | SEMAT                              | A         |
    4
         15 |               14 | Setor de Registro
              | SEREG                             | A         |
  4
         16 |               14 | Setor de Conferência Documental e Expedição
de Diplomas   | SEDIP        | A         |               4
          3 |                1 | Diretoria de administracao e controle
academico           | DIRAC                  | A         |               2
          1 |                  | Pro Reitoria UFU
               | PROGRAD                          | A         |

         10 |                3 | Divisão de controle acadêmico
              | DICOA                         | A         |               3
          4 |                3 | Divisão de administração
               | DIADM                            | A         |
  3
         13 |                3 | Divisão de Informações e atendimento ao
acadêmico         | DINFA             | A         |               3
         14 |                3 | Divisão de Registro
              | DIVRE                               | A         |
    3
(13 registros)


QUERY:

update estrutura_organizacional set tp_status='D' where id_unid_superior=10
or id_unidade in (
WITH RECURSIVE eotree(id_unidade,nm_sgl_unidade,id_unid_superior,tp_status)
AS(
select id_unidade,nm_sgl_unidade,id_unid_superior,tp_status
from estrutura_organizacional
where id_unid_superior is null
union all
select eo.id_unidade,eo.nm_sgl_unidade,eo.id_unid_superior,eo.tp_status
from estrutura_organizacional as eo
inner join estrutura_organizacional eoe
on(eo.id_unid_superior=eoe.id_unidade)
) )

A unidade de id=10 é a Divisão de Controle Acadêmico, ao desativá-la preciso
desativar também seus 2 setores:
SEREL e SEPRO.


Obrigado pela atenção!




-- 
- Tarcisio Martins Ferreira, 2010
- Analista Desenvolvedor de Sistemas
- Bacharel em Ciências da Comp.
- Universidade Federal de Uberlândia
- Minas Gerais
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a