ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Criar uma trigger para excluir dados postgres?

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Sex Dez 15, 2017 8:12 am    Assunto: Criar uma trigger para excluir dados postgres? Responder com Citação

Tenho um banco de dados postgres com relacionamento entre tabelas.

Recebo um arquivo de outro banco para replicar na minha base, o problema que este arquivo tem dados não relacionados entre tabelas deixando alguns arquivos órfão.

Exemplo
Tabela produto tenho o ID pk(500) Produto Tal
Tabela grade tenho i ID_Produto (fk(500) relacionado com produto.

Ai la no outro banco alguém excluiu este produto 500, como não tem relacionamento DELETE EM CASCATA a tabela grade fica com esta informação órfã.

Quando for replicar isso na minha base que faz esta tratativa vai dar erro e para de gravar por falta do relacionamento entre tabelas.

Código:
 ALTER TABLE grade ADD CONSTRAINT id_produto_fk FOREIGN KEY (id_produto)
 REFERENCES produto(id) ON DELETE cascade ON UPDATE cascade;


A minha ideia seria uma trigger que dispara na tabela grade e exclui estes arquivos órfãos quando não tiver mais na tabela produto antes de tratar a constrant.

Ou algo que possa fazer isso.

Não posso mexer no modo que vem do outro banco, apenas preciso ver se consigo tratar isso antes de gravar no meu banco.

Tem como?
_________________
Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Sex Dez 15, 2017 9:13 am    Assunto: Responder com Citação

Ou se der gravar null (no caso sem nada) o id_produto na tabela grade.
_________________
Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Seg Dez 18, 2017 12:13 pm    Assunto: Responder com Citação

Tem como do lando que vao montar o arquivo fazer um select antes?

O banco la é mysql. Ai no select usando uma clausula só traz se os dois tiver o mesmo ID evitando assim arquivos órfãos.

Qual seria a sintaxe do sql?
_________________
Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Seg Dez 18, 2017 3:03 pm    Assunto: Responder com Citação

Na imagem abaixo tenho exemplo aqui de um neste que tem na tabela produto mais não tem na tabela fornecedor NOIA

Isso ficou orfão aqui nesta tabela como elimino este arquivo no select?
_________________
Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree


Editado pela última vez por adriano_servitec em Qui Dez 21, 2017 11:08 am, num total de 1 vez
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
natanbh1
Colaborador
Colaborador


Registrado: Terça-Feira, 15 de Março de 2011
Mensagens: 3093
Localização: Belo Horizonte - MG

MensagemEnviada: Seg Dez 18, 2017 3:16 pm    Assunto: Responder com Citação

Faça um teste trocando Left Join por Inner Join.
_________________
''A persistência é o caminho para o êxito.''
Charlie Chaplin
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Seg Dez 18, 2017 3:25 pm    Assunto: Responder com Citação

natanbh1 escreveu:
Faça um teste trocando Left Join por Inner Join.
Com inner join só traz perfume de gardenia

A tabela fornecedor tem estes itens
Citação:
405763;"''";"TESTE REFERENCIA"
407683;"''";"PERFUME DE GARDENIA"
409999;"''";"NOVO PRODUTO"

Se reparar não tenho este ID_fornecedor 40600 não existe mais na tabela fornecedor, mais esta ai na tabela produto, preciso fazer um select eliminando ele do select, mais mantendo os que tem id_produto is null no select.
_________________
Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
natanbh1
Colaborador
Colaborador


Registrado: Terça-Feira, 15 de Março de 2011
Mensagens: 3093
Localização: Belo Horizonte - MG

MensagemEnviada: Seg Dez 18, 2017 3:28 pm    Assunto: Responder com Citação

Testou trocar para o Right Join?

Veja este link:
https://www.devmedia.com.br/explorando-os-tipos-de-join-do-sql/2507
_________________
''A persistência é o caminho para o êxito.''
Charlie Chaplin
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Seg Dez 18, 2017 3:46 pm    Assunto: Responder com Citação

natanbh1 escreveu:
Testou trocar para o Right Join?

Veja este link:
https://www.devmedia.com.br/explorando-os-tipos-de-join-do-sql/2507
Ai traz NOVO PRODUTO que tem na tabela fornecedor e não tem na tabela produto porque não tem referencia

O result

Citação:
407683;"PERFUME DE GARDENIA"
;"TESTE REFERENCIA"
;"NOVO PRODUTO"



teria que vir assim o select
Citação:
407683;"PERFUME DE GARDENIA"
;"TESTE REFERENCIA"

_________________
Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
natanbh1
Colaborador
Colaborador


Registrado: Terça-Feira, 15 de Março de 2011
Mensagens: 3093
Localização: Belo Horizonte - MG

MensagemEnviada: Seg Dez 18, 2017 4:37 pm    Assunto: Responder com Citação

Faça um teste com a SQL abaixo:

Código:
select PRODUTO.ID_FORNECEDOR, FORNECEDOR_FANTASIA, PRODUTO.* FROM PRODUTO, FORNECDOR
Where PRODUTO.ID_FORNECEDOR = FORNECEDOR.ID OR FORNECEDOR.ID IS NULL

_________________
''A persistência é o caminho para o êxito.''
Charlie Chaplin
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Seg Dez 18, 2017 4:41 pm    Assunto: Responder com Citação

natanbh1 escreveu:
Faça um teste com a SQL abaixo:

Código:
select PRODUTO.ID_FORNECEDOR, FORNECEDOR_FANTASIA, PRODUTO.* FROM PRODUTO, FORNECDOR
Where PRODUTO.ID_FORNECEDOR = FORNECEDOR.ID OR FORNECEDOR.ID IS NULL
Assim é o mesmo que jazer o INNER JOIN
_________________
Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Seg Dez 18, 2017 7:38 pm    Assunto: Responder com Citação

Boa noite,

Experimente manter o Left Join inicial e adicione o filtro abaixo:

Código:
where FORNECEDOR.ID IS NOT NULL


Espero que ajude

_________________
Assinatura: https://www.imoveisemexposicao.com.br/imoveis-venda-guarulhos!v_rio-residencial-apartamento
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Qua Dez 20, 2017 12:48 pm    Assunto: Responder com Citação

imex escreveu:
Boa noite,

Experimente manter o Left Join inicial e adicione o filtro abaixo:

Código:
where FORNECEDOR.ID IS NOT NULL


Espero que ajude

_________________
Assinatura: https://www.imoveisemexposicao.com.br/imoveis-venda-guarulhos!v_rio-residencial-apartamento
Parece que deu certo assim, vou testar aqui. Obrigado.
_________________
Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB