DISPARAR TRIGGER PARA UMA SÓ COLUNA

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
cleberzumba
Rank: DBA Júnior
Rank: DBA Júnior
Mensagens: 223
Registrado em: Qui, 14 Dez 2006 10:45 am
Localização: Brasília-DF
Cleber Zumba de Souza

Pessoal, alguém sabe como fazer para a trigger disparar somente quando uma determinada coluna for alterada?
victorhugomuniz
Moderador
Moderador
Mensagens: 1396
Registrado em: Sex, 01 Fev 2008 2:06 pm
Localização: Rio de Janeiro - RJ
Contato:
:D

você pode fazer uma trigger normal e colocar como primeira instrução um if verificando se a sua coluna foi alterada.. dai você coloca o codigo dentro desse if
cleberzumba
Rank: DBA Júnior
Rank: DBA Júnior
Mensagens: 223
Registrado em: Qui, 14 Dez 2006 10:45 am
Localização: Brasília-DF
Cleber Zumba de Souza

Como? não entendi muito bem, pode me passar um exemplo?
diego_amoroso
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 17
Registrado em: Qua, 07 Jul 2010 2:53 pm
Localização: Americana - SP
Diego Amoroso
Programador pl/sql
diego.amoroso@yahoo.com.br

Bom dia Cleber,
Basta colocar um when na sua trigger.
Segue o exemplo:

Selecionar tudo

create table t_teste(
codigo number(9),
descricao varchar2(50),
valor number(15,2));

create trigger trg_teste
    before update on t_teste
    for each row
    when (old.valor <> new.valor)
begin
    dbms_output.put_line('Alterado!');
end;
Ou seja, somente quando o campo valor for alterado essa trigger será executada.
falou!!
victorhugomuniz
Moderador
Moderador
Mensagens: 1396
Registrado em: Sex, 01 Fev 2008 2:06 pm
Localização: Rio de Janeiro - RJ
Contato:
:D

Selecionar tudo


CREATE OR REPLACE TRIGGER PERSON_INSERT_AFTER
AFTER INSERT ON TABELA FOR EACH ROW
BEGIN
  if :NEW.coluna <> :OLD.coluna then
     seu_codigo;
  end if;
END;

cleberzumba
Rank: DBA Júnior
Rank: DBA Júnior
Mensagens: 223
Registrado em: Qui, 14 Dez 2006 10:45 am
Localização: Brasília-DF
Cleber Zumba de Souza

Valeu brother, agora consegui aqui.
Diego_Mello
Rank: DBA Júnior
Rank: DBA Júnior
Mensagens: 229
Registrado em: Sex, 05 Set 2008 2:59 pm
Localização: Igrejinha - RS
Diego Mello
Igrejinha - RS
www.twitter.com/diegolmello

Opa...
Tu pode usar "OF".
Seguindo o exemplo do meu xará:

Selecionar tudo

create table t_teste( 
codigo number(9), 
descricao varchar2(50), 
valor number(15,2)); 

create trigger trg_teste 
    before update OF VALOR on t_teste 
    for each row 
begin 
    dbms_output.put_line('Alterado!'); 
end;
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 3 visitantes