- Este tópico contém 8 respostas, 2 vozes e foi atualizado pela última vez 16 anos, 4 meses atrás por
Anakim.
-
AutorPosts
-
22 de outubro de 2009 às 9:23 pm #90377
Anakim
ParticipanteEu sei que eu posso chamar uma procedure dentro de uma trigger no oracle.
No postgre eu consigo pegar dentro de uma procedure associada a uma trigger os valores NEW e OLD, então, gostaria de saber se tem como fazer isso no oracle.
Dei uma procurada na net e não achei nada parecido com isso. Só gostaria de confirmar se esta funcionalidade existe no oracle ou não.22 de outubro de 2009 às 9:27 pm #90379rwarstat
ParticipanteAnakim,
O quê tu pdoe fazer é passar o NEW ou OLD que tu precisa como parâmetro para a proceduere.
Acredito que tu chamar de dentro da procedure diretamente as estruturas NEW e OLD não seja possível.Abraço,
Roberto22 de outubro de 2009 às 9:29 pm #90380Anakim
ParticipanteE como eu faria isso? O que a minha procedure tem que receber um record?
E teria como retornar o NEW na procedure por exemplo?22 de outubro de 2009 às 9:48 pm #90383rwarstat
ParticipanteAs estruturas NEW e OLD não podem ser alteradas. Elas representam os valores novos e antigos, respectivamente, de um registro na tua tabela.
Tu precisa fazer esse processo de dentro da trigger? Não pode ser feito após o insert/update/delete?
Da maneira como tu está propondo, chamar uma procedure de dentro de uma trigger, o processamento pdoe ficar lento e caso dê algum erro na procedure será dado um rollback na tua operação.Para passar o NEW ou OLD como parâmetro, nunca precisei fazer isso passando toda a estrutura, só com um campo, faz da seguinte maneira:
procedure(:old.campo);
22 de outubro de 2009 às 9:51 pm #90385Anakim
ParticipanteEstava querendo fazer esta procedure para ficar uma coisa genérica sempre que uma tabela for receber um insert ou um update executaria este procedure.
Isso seria para atualizar campos dates, pelo visto vou ter que fazer uma trigger para cada tabela.
Valeu pela ajuda.22 de outubro de 2009 às 9:56 pm #90386rwarstat
ParticipanteExplica melhor o quê tu gostaria de fazer que o pessoal do fórum pode te ajudar a pensar em uma outra solução.
22 de outubro de 2009 às 10:00 pm #90387Anakim
ParticipanteAqui na empresa não gostamos muito de deletar dados. Então na maioria das nossas tabelas temos os seguintes campos:
– date_inserted;
– date_updated;
– date_deleted;Em relação ao date_inserted o valor default dele é sysdate.
E em relação aos outros dois campos no postgre fazemos da seguinte maneira, criamos uma trigger genérica e ela preenche este campos para gente.
Estava tentando fazer isso no oracle, só que não estou vendo uma maneira “fácil” de se fazer isso. Eu consigo usar esta solução no postgre porque eu consigo pegar o new dentro da procedure.22 de outubro de 2009 às 10:08 pm #90388rwarstat
ParticipanteAté onde vai os meus parcos conehcimentos, não conheço como fazer uma trigger genérica no Oracle. Até por que isso seria um tanto quanto estranho.
Tanto para update como delete, não poderia fazer conforme o código abaixo?
update tabela
set date_deleted = sysdate
where chaveAcredito que isso seja simples, uma vez que vocês não deletam realmente o registro, só o marcam como tal. Para o update é a mesma coisa, quando atualziar o registro já atualzia a coluna correspondente.
22 de outubro de 2009 às 10:10 pm #90389Anakim
ParticipanteDesta maneira vou precisar repetir este código para todas as tabelas.
Vou tentar fazer uma procedure que faça isso para mim se der certo posto o resultado aqui.
Valeu pela ajuda. -
AutorPosts
- Você deve fazer login para responder a este tópico.