Jean. Tudo bem? O código fica o seguinte:
SQL> CREATE TABLE NPS_PROGR_PROXIMA ( FIMPROGR NUMBER, INIPROGR NUMBER, lotenum NUMBER ); Table created SQL> SQL> CREATE OR REPLACE TRIGGER TGI_NPS_PROGR_PROXIMA_ATU_DATA 2 before UPDATE OF FIMPROGR, INIPROGR ON NPS_PROGR_PROXIMA 3 FOR EACH ROW 4 begin 5 if :old.lotenum = :new.lotenum and ((:new.fimprogr <> :old.fimprogr) or (:new.iniprogr <> :old.iniprogr)) then 6 :new.fimprogr := :new.fimprogr; 7 :new.iniprogr := :new.iniprogr; 8 end if; 9 end; 10 / Trigger created SQL> SQL> insert into NPS_PROGR_PROXIMA values ( 1,2,5 ); 1 row inserted SQL> commit; Commit complete SQL> select * from NPS_PROGR_PROXIMA; FIMPROGR INIPROGR LOTENUM ---------- ---------- ---------- 1 2 5 SQL> SQL> update NPS_PROGR_PROXIMA set fimprogr = 9, INIPROGR = 8 where lotenum = 5; 1 row updated SQL> COMMIT; Commit complete SQL> select * from NPS_PROGR_PROXIMA; FIMPROGR INIPROGR LOTENUM ---------- ---------- ---------- 9 8 5 SQL> SQL> update NPS_PROGR_PROXIMA set fimprogr = 7, INIPROGR = 7 where lotenum = 7; 0 rows updated SQL> COMMIT; Commit complete SQL> select * from NPS_PROGR_PROXIMA; FIMPROGR INIPROGR LOTENUM ---------- ---------- ---------- 9 8 5 Abraço Alvaro Em 22/09/08, Jean Carlo <[EMAIL PROTECTED]> escreveu: > > Ai está.. está é a ultima que tentei rodar.. agora está dando erro de > conflito de recurso por causa do "pragma autonomous_transaction", mais pra > dar tabela mutante só tirar o pragma. > > CREATE OR REPLACE TRIGGER > "CECRISA_MATRIZ"."TGI_NPS_PROGR_PROXIMA_ATU_DATA" AFTER > UPDATE OF "FIMPROGR", "INIPROGR" ON "NPS_PROGR_PROXIMA" FOR EACH ROW > declare > PRAGMA AUTONOMOUS_TRANSACTION; > begin > if (:new.fimprogr <> :old.fimprogr) or (:new.iniprogr <> :old.iniprogr) > then > update nps_progr_proxima > set fimprogr=:new.fimprogr, > iniprogr=:new.iniprogr > where lotenum=:new.lotenum; > end if; > end; > > valeu Alvaro. > > -- > att, > Jean Carlo Stein da Fonseca > Programador PL/SQL e Forms/Reports 6i Oracle. > DBA Oracle Jr. em busca do OCA. > Consultor Oracle Cecrisa/Portinari www.cecrisa.com.br > +55 (48) 9604-6138 > Criciúma, Santa Catarina - Brasil > > From: Alvaro Luiz Mansor Neto > Sent: Monday, September 22, 2008 3:37 PM > To: oracle_br@yahoogrupos.com.br <oracle_br%40yahoogrupos.com.br> > Subject: Re: [oracle_br] Trigger com update. > > Jean. Manda a sintaxe do "create or replace da trigger" tb para eu poder te > dar um help. > Abraço > ALvaro > > Em 22/09/08, Jean Carlo <[EMAIL PROTECTED]<jcthebrother%40hotmail.com>> > escreveu: > > > > Tenho uma Trigger com o seguinte sql: > > > > begin > > if (:new.fimprogr <> :old.fimprogr) or (:new.iniprogr <> :old.iniprogr) > > then > > update tabela > > set fimprogr=:new.fimprogr, > > iniprogr=:new.iniprogr > > where lotenum=:old.lotenum; > > end if; > > end; > > > > Essa trigger é acionada quando é atualizada um desses dois campos > iniprogr > > ou fimprogr e presciso atualizar todos os registros que tem o mesmo > lotenum > > do registro que estou atualizando. > > Porem qdo aciono o mesmo dá erro de tabela mutante pois atualiza o mesmo > > registro que estou alterando correto? > > > > Teria como fazer esse sql tirando o registro corrente???? Ou como posso > > resolver esse problema da tabela mutante?? > > > > OBS.: tentei utilizar o pragma autonomous_transaction mais não funcionou. > > > > -- > > att, > > Jean Carlo Stein da Fonseca > > Programador PL/SQL e Forms/Reports 6i Oracle. > > DBA Oracle Jr. em busca do OCA. > > Consultor Oracle Cecrisa/Portinari www.cecrisa.com.br > > +55 (48) 9604-6138 > > Criciúma, Santa Catarina - Brasil > > > > [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] > > > [As partes desta mensagem que não continham texto foram removidas]