Ontem eu agradeci, mas deu pau no meu e-mail, e ele não chegou ao grupo.

 

Obrigado a todos pela ajuda.

 

Arnaldo

 

De: oracle_br@yahoogrupos.com.br [mailto:[EMAIL PROTECTED] Em
nome de jlchiappa
Enviada em: quinta-feira, 31 de maio de 2007 15:29
Para: oracle_br@yahoogrupos.com.br
Assunto: RES: [oracle_br] Re: Duvida sobre Trigger

 

Absolutamente não fica "registrado" e disponível pra trigger o texto 
do UPDATE que disparou a trigger, mas talvez vc possa fazer uma WHEN 
tipo :

create trigger ...
WHEN (old.campo1 <> new.campo1 OR old.campo2 <> old.campo2, etc ....)

ou seja, APENAS quando se está mudando o valor de algum dos N outros 
campos afora o tal do integro a condição é satisfeita, o "Update 
tbl_pedido set integro = x where n_cod_ped = "xxxxxx" não atenderia à 
condição de ao menos UM dos outros campos estar sendo alterado...

[]s

Chiappa
--- Em oracle_br@yahoogrupos.com.br <mailto:oracle_br%40yahoogrupos.com.br>
, "Arnaldo V. Scarin" 
<[EMAIL PROTECTED]> escreveu
>
> Chiappa,
> 
> 
> 
> Eu sei que eu posso utilizar essas formas "condicionantes" para 
evitar que
> uma trigger seja executada, mas no caso que eu indiquei, são feitos 
diversos
> tipos de updates nessa tabela, sempre passando informações para o 
campo
> "integro". Num update, todos os campos da linha são atualizados, 
enquanto
> nesse update que eu mandei no e-mail anterior, somente o campo 
integro é
> atualizado.
> 
> 
> 
> Vamos exemplificar:
> 
> 
> 
> Momento X : Update tbl_pedido set integro = x where n_cod_ped 
= "xxxxxx"
> (update que não pode disparar a Trigger)
> 
> 
> 
> Momento Y: Update tbl_pedido set n_valor_pedido = 999,99, 
n_qte_prod = 99,
> integro = x, .(outros campos).... where n_cod_ped = "xxxxxxx" 
(momento que
> deve disparar a Trigger)
> 
> 
> 
> Momento Z: Update tbl_pedido set id_usuario_edit = 9999, 
d_data_edit =
> `dd/mm/yyyy hh:nn:ssss' where n_cod_ped = "xxxxxxx" (momento que 
deve
> disparar a trigger).
> 
> 
> 
> A minha duvida é como eu conseguiria identificar qual update está 
sendo
> executado para poder usar isso como fator condicionante para que a 
trigger
> não fosse executada.
> 
> 
> 
> Obrigado,
> 
> 
> 
> Arnaldo
> 
> 
> 
> 
> 
> 
> 
> 
> 
> De: oracle_br@yahoogrupos.com.br <mailto:oracle_br%40yahoogrupos.com.br>  
[mailto:oracle_br@yahoogrupos.com.br <mailto:oracle_br%40yahoogrupos.com.br>
] Em
> nome de jlchiappa
> Enviada em: quinta-feira, 31 de maio de 2007 13:56
> Para: oracle_br@yahoogrupos.com.br <mailto:oracle_br%40yahoogrupos.com.br>

> Assunto: [oracle_br] Re: Duvida sobre Trigger
> 
> 
> 
> Colega, quando as condições todas dum trigger são satisfeitas, ele 
É 
> SIM DISPARADO, não tem o que : o que vc pode fazer é ** adicionar 
** 
> condições extras baseadas nos dados ou no ambiente via cláusula 
WHEN, 
> por exemplo : suponha que é exigido pra trigger disparar que o 
campo 
> SALARIO da tabela esteja com o valor de 1000 e que o dia da semana 
> não seja Sábado ou Domingo (digamos) , vc teria um trigger tipo 
> assim :
> 
> [EMAIL PROTECTED]:SQL>select empno, sal, to_char(sysdate, 'D') from emp 
> where empno in (7844, 7654);
> 
> EMPNO SAL T
> ------------------ ------------------ -
> 7654 1250 5
> 7844 1500 5
> 
> [EMAIL PROTECTED]:SQL>ed
> Gravou arquivo afiedt.buf
> 
> 1 create or replace trigger verif_update
> 2 before update of sal ON emp for each row
> 3 WHEN (old.sal = 1500 AND to_char(sysdate, 'D') not in 
> ('7', '1'))
> 4 BEGIN
> 5 dbms_output.put_line('Disparei o trigger verif_update');
> 6* END;
> [EMAIL PROTECTED]:SQL>/
> 
> Gatilho criado.
> 
> [EMAIL PROTECTED]:SQL>update emp set sal=sal+10 where empno=7844;
> Disparei o trigger verif_update
> 
> 1 linha atualizada.
> 
> ==> veja acima que DISPAROU, agora veja :
> 
> [EMAIL PROTECTED]:SQL>update emp set sal=sal+10 where empno=7654;
> 
> 1 linha atualizada.
> 
> [EMAIL PROTECTED]:SQL>
> 
> ==> veja que quando NEM TODAS as condições foram satisfeitas, a 
> trigger NÂO DISPAROU, ok ? Óbvio, essa cláusula WHEN em princípio 
> serve para validações SIMPLES, pura comparação, SE a lógica que vc 
> quer que seja satisfeita pra trigger não disparar é COMPLEXA, tem 
que 
> buscar info em outras tabs/registros, processar a info, etc, aí não 
> dá... Quando isso ocorrer, não tem jeito , vc VAI deixar a trigger 
> disparar MAS o código dela vai estar assim :
> 
> CREATE TRIGGER ....
> BEGIN
> if condiçãocomplexa THEN
> ... faço o que eu quero que seja feito
> end if;
> END;
> 
> ==> ou seja, a trigger até dispararia, MAS em não entrando no IF 
não 
> faz nada....
> 
> []s
> 
> Chiappa
> --- Em oracle_br@yahoogrupos.com.br
<mailto:oracle_br%40yahoogrupos.com.br>  <mailto:oracle_br%
40yahoogrupos.com.br>
> , "Arnaldo V. Scarin" 
> <avs_scarin@> escreveu
> >
> > Bom dia a Todos,
> > 
> > 
> > 
> > Eu tenho uma trigger (Before Update) para que possa ser 
atualizado 
> um campo
> > com a data e hora do ultimo update executado numa determinada 
> linha, mas
> > somente num caso de update eu não quero que essa trigger seja 
> executada.
> > 
> > 
> > 
> > Existe alguma forma de fazer isso?
> > 
> > 
> > 
> > Obrigado,
> > 
> > 
> > 
> > Arnaldo
> > 
> > 
> > 
> > [As partes desta mensagem que não continham texto foram removidas]
> >
> 
> 
> 
> 
> 
> [As partes desta mensagem que não continham texto foram removidas]
>

 



[As partes desta mensagem que não continham texto foram removidas]

Responder a