Re: [pgbr-geral] UPDATE recursivo

2015-07-13 Por tôpico Danilo Silva
Em 13 de julho de 2015 21:12, Cleiton Luiz Domazak cleitondoma...@gmail.com
 escreveu:

 Boa noite.

 Não sei se alguém já precisou disso.

 Preciso fazer um UPDATE em várias tabelas em um campo chave, porém existe
 relacionamento entre elas via FK, e preciso gerar o script de UPDATE desses
 campos dinamicamente, pois não quero engessar o script, caso alguma tabela
 seja adicionada ou removida do banco, o script deve continuar funcionando.
 Ou se existir uma ferramenta que pelo menos monte essa hierarquia.

 Segue um exemplo:

 CREATE TABLE pai
 (
   id bigint NOT NULL,
   value character varying(255),
   CONSTRAINT pai_pkey PRIMARY KEY (id)
 );


 CREATE TABLE filho
 (
   id bigint NOT NULL,
   id_pai bigint,integridade
   CONSTRAINT filho_pkey PRIMARY KEY (id),
   CONSTRAINT filho_id_pai_fkey FOREIGN KEY (id_pai)
   REFERENCES pai (id) MATCH SIMPLE
   ON UPDATE NO ACTION ON DELETE NO ACTION
 );

 CREATE TABLE neto
 (
   id bigint NOT NULL,
   id_filho bigint,
   CONSTRAINT neto_pkey PRIMARY KEY (id),
   CONSTRAINT neto_id_filho_fkey FOREIGN KEY (id_filho)
   REFERENCES filho (id) MATCH SIMPLE
   ON UPDATE NO ACTION ON DELETE NO ACTION
 );


 Para eu realizar o UPDATE na tabela PAI eu teria que primeiro fazer um
 UPDATE na tabela FILHO que por sua vez depende de um UPDATE na tabela
 NETO (sim, nome bizarro só pra identificar :D), e eu não tenho como
 garantir quantos níveis eu tenho.

 ​Troque suas constraints para MATCH SIMPLE ON UPDATE CASCADE ON DELETE
RESTRICT, assim quando o id da tabela pai for alterado, as tabelas que
fazem referencia a tabela pai também serão alterados.

[]s
Danilo​
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


[pgbr-geral] Update recursivo em uma arvore de estrutura organizacional

2011-08-04 Por tôpico Tarcisio Martins
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
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Update recursivo em uma arvore de estrutura organizacional

2011-08-04 Por tôpico Pedro B. Alves
Qual banco de dados você utiliza?

Em 4 de agosto de 2011 09:00, Tarcisio Martins
martins.tarci...@gmail.com escreveu:
 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
 pgbr-geral@listas.postgresql.org.br
 https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Update recursivo em uma arvore de estrutura organizacional

2011-08-04 Por tôpico Tarcisio Martins
Postgres 9.0.3 

Em 4 de agosto de 2011 09:14, Pedro B. Alves pedroalve...@gmail.comescreveu:

 Qual banco de dados você utiliza?

 Em 4 de agosto de 2011 09:00, Tarcisio Martins
 martins.tarci...@gmail.com escreveu:
  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
  pgbr-geral@listas.postgresql.org.br
  https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
 
 
 ___
 pgbr-geral mailing list
 pgbr-geral@listas.postgresql.org.br
 https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral




-- 
- 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
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Update recursivo em uma arvore de estrutura organizacional

2011-08-04 Por tôpico Guimarães Faria Corcete DUTRA , Leandro
2011/8/4 Tarcisio Martins martins.tarci...@gmail.com:
 Postgres 9.0.3 

Tarefa de casa: já olhaste o RECURSIVE WITH?


-- 
Skype:leandro.gfc.dutra?chat   Yahoo!: ymsgr:sendIM?lgcdutra
+55 (61) 3546 7191 Google Talk: xmpp:leand...@jabber.org
+55 (11) 9406 7191  MSNIM:chat?contact=lean...@dutra.fastmail.fm
sip:leand...@iptel.org ICQ: AIM:GoIM?screenname=61287803
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Update recursivo em uma arvore de estrutura organizacional

2011-08-04 Por tôpico Tarcisio Martins
Conseguí.. obg a todos

UPDATE public.estrutura_organizacional
  SET tp_status = ?,
  dt_desativacao = ?
  WHERE 1 = 1 AND
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_unidade = ?
union all
select eo.id_unidade,
   eo.nm_sgl_unidade,
   eo.id_unid_superior,
   eo.tp_status
from estrutura_organizacional as eo
 inner join eotree on (eo.id_unid_superior = eotree.id_unidade)
)
  select id_unidade
  from eotree)

Em 4 de agosto de 2011 11:11, Guimarães Faria Corcete DUTRA, Leandro 
lean...@dutras.org escreveu:

 2011/8/4 Tarcisio Martins martins.tarci...@gmail.com:
  Postgres 9.0.3 

 Tarefa de casa: já olhaste o RECURSIVE WITH?


 --
 Skype:leandro.gfc.dutra?chat   Yahoo!: ymsgr:sendIM?lgcdutra
 +55 (61) 3546 7191 Google Talk: xmpp:leand...@jabber.org
 +55 (11) 9406 7191  MSNIM:chat?contact=lean...@dutra.fastmail.fm
 sip:leand...@iptel.org ICQ: AIM:GoIM?screenname=61287803
 ___
 pgbr-geral mailing list
 pgbr-geral@listas.postgresql.org.br
 https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral




-- 
- 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
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral