Re: [pgbr-geral] UPDATE recursivo
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
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
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
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/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
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