Erro PLS-00049 em Trigger

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
julianael
Rank: Estagiário Júnior
Rank: Estagiário Júnior
Mensagens: 1
Registrado em: Sáb, 26 Nov 2016 9:12 pm

Olá pessoal, tudo bem?

Sou iniciante em Oracle, e criei uma trigger para armazenar um histórico de alteração para auditoria. Porém, está acontecendo o seguinte erro:

----------ERROS:
Erro(12,10): PLS-00049: variável de ligação 'NEW.COD_FUNC' inválida
Erro(12,27): PLS-00049: variável de ligação 'OLD.COD_FUNC' inválida
Erro(31,10): PLS-00049: variável de ligação 'OLD.COD_FUNC' inválida
Erro(32,10): PLS-00049: variável de ligação 'OLD.NOME_FUNC' inválida
Erro(42,10): PLS-00049: variável de ligação 'NEW.COD_FUNC' inválida
Erro(43,10): PLS-00049: variável de ligação 'NEW.NOME_FUNC' inválida


Alguém poderia me ajudar?


--Essa é a tabela

Selecionar tudo

CREATE TABLE TB_TRIGGER_FUNCIONARIO (
COD_FUNC INT,
NOME_FUNC VARCHAR (100));

--Tabela para auditoria

Selecionar tudo

Create table aud_FUNC_AUDITADA( 
seq_aud  number(8),
dat_aud   date,
tip_aud   varchar2(1),
usuario_aud   varchar2(60),
old_codfunc INT,
new_codfunc INT,
old_nome VARCHAR (100),
new_nome VARCHAR (100)
);

create sequence seq_aud_FUNC
minvalue 1
maxvalue 99999999
start with 1
increment by 1
nocache
order;

------------------------------ESSA É A TRIGGER-------------------------

Selecionar tudo

create or replace trigger aud_FUNC
after insert or update or delete on aud_FUNC_AUDITADA
REFERENCING OLD AS OLD NEW AS NEW
for each row 

declare
   --Local variables here
   xtip_auditoria    varchar2(1) := 'I';

begin 
   --Insere na variável a letra A para quando o registro for atualizado.

   if updating then
      xtip_auditoria := 'A';

      --Consistência que não permite que seja alterado os campos PK
      if :new.COD_FUNC <> :old.COD_FUNC then
         raise_application_error ( -20002 , 'Você não pode alterar o(s) campo(s) " CHAVE_PRIMARIA " deste registro. Exclua e insira um registro novo.');
      end if;

   --
   end if;
   --

   --Insere na tabela o registro quando ele for excluído.
   if deleting then

      xtip_auditoria := 'E';
      --

      insert into aud_FUNC_AUDITADA values (       
         seq_aud_FUNC.nextval    ,
         sysdate                                ,
         xtip_auditoria                         ,
         user                                   ,
         :old.COD_FUNC ,
         :old.NOME_FUNC);

   else

     --Insere na tabela o registro quando ele for alterado ou inserido.
      insert into aud_FUNC_AUDITADA values (
         seq_aud_FUNC.nextval    ,
         sysdate                                ,
         xtip_auditoria                         ,
         user                                   ,
         :new.COD_FUNC,
         :new.NOME_FUNC);

   end if;

--===================================================================================================================

end ;
souldeath
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 48
Registrado em: Qua, 25 Ago 2010 9:39 am
Localização: Limeira

julianael, sua trigger está apontando para a tabela errada, tem que apontar para TB_TRIGGER_FUNCIONARIO, veja o código abaixo:

Selecionar tudo

create or replace trigger aud_FUNC
after insert or update or delete on TB_TRIGGER_FUNCIONARIO 
Responder
  • Informação
  • Quem está online

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