Como você verificar se há atualizações em muitas tabelas no Oracle?

votos
5

Eu tenho um gatilho para verificar se há uma única coluna em uma tabela, quando há uma atualização (AFTER UPDATE) na coluna que o gatilho é chamado e então eu chamar um procedimento armazenado de dentro de meu gatilho, a fim de executar alguma lógica de negócios codificado em Java.

Por enquanto, tudo bem. Agora as coisas estão ficando mais complicado, há uma nova exigência que implica que a mesma lógica (a lógica executada pelo gatilho) deve também ser realizada se houver alterações em colunas que estão em outros 4 mesas. Eu acho que não é prático ter o mesmo gatilho em 5 tabelas diferentes para ouvir diferentes colunas, e eu não tenho certeza se eu deveria considerar a criação de uma visão para estas colunas e colocar um único gatilho nessa vista (o que é o custo a pagar em termos de desempenho e / ou recursos?)

Em sua experiência anterior com Oracle, o que tem sido a sua abordagem ou soluções para este cenário?

Publicado 27/08/2009 em 07:36
fonte usuário
Em outras línguas...                            


3 respostas

votos
5

A única maneira que você pode usar um gatilho para várias tabelas é criar vista.

Se eu não quiser criar vista, eu criar um script (ou qualquer que seja, usar o idioma desejado) e uma lista de tabelas nas quais o gatilho a ser criada (fazer a criação de gatilhos dinâmicos) .. eu vejo seu ponto é ter melhor manutenção sobre esta situação e acho que a criação de um ponto de vista é solução mais limpa (e de fácil manutenção) do que a criação dinâmica de um gatilho para cada tabela.

Respondeu 27/08/2009 em 07:47
fonte usuário

votos
2

Por que não ter a sua lógica em um procedimento armazenado, em seguida, é só chamar que a partir dos gatilhos?

Eu também sugiro que você dê olhar para notificação de alteração , desde que o som dele, isso é provavelmente o que você quer mais do que apenas um gatilho velho liso.

Também deve ter cuidado ao chamar recursos externos. Qualquer coisa que você chamar um gatilho deve ser transacional, como a Oracle pode executar o gatilho várias vezes antes de seu DML é realmente concluída.

Respondeu 27/08/2009 em 10:14
fonte usuário

votos
2

  1. você pode realmente criar uma exibição juntar todas as tabelas em questão? Será que eles têm chaves estrangeiras para o outro?
  2. Assumindo que você pode criar um ponto de vista, vai todas as tabelas ser atualizável usando a visão complexa? Há limitações severas sobre este assunto.
  3. Geralmente, nós criamos em vez de apenas gatilhos em uma vista. Há também restrições sobre gatilhos baseados em operações UPDATE. Para uma lista completa das questões envolvidas referem-se a

http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/statements_7004.htm#SQLRF01405

Nota: Eu estou supondo que a Oracle é a db que você tenha marcado a sua pergunta com ORACLE

Respondeu 27/08/2009 em 09:53
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more