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]

Responder a