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]