Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Mic Mota

Trigger Oracle

Recommended Posts

Olá a todos.

 

Criei uma trigger de auditoria no Oracle, porém não roda de jeito algum. Não consigo entender porque ocorre erro nessa linha:

 

SQL> show errors;
Erros para TRIGGER TRG_AUD_DEPTALLIMROTULO:

LINE/COL ERROR
-------- -----------------------------------------------------------------
53/7	 PL/SQL: SQL Statement ignored
53/27	PL/SQL: ORA-00942: a tabela ou view não existe
SQL>

Segue a trigger

 

create or replace trigger trg_aud_deptallimrotulo after insert or delete or
  update of CD_CRITERIO, CD_ROTULO, NM_LIMITEINI, NM_LIMITEFIM
	  on DEPTAL_LIMITE_ROTULO for each row
declare
  v_operacao		varchar2(0100) := null;
  v_tabela		  varchar2(0100) := 'DEPTAL_LIMITE_ROTULO';
  v_terminal		varchar2(0100) := null;
  v_id_chave		varchar2(0500) := null;
  v_conteudo_antigo varchar2(2000) := null;
  v_conteudo_atual  varchar2(2000) := null;
begin
  if inserting or updating then
	v_id_chave :=			  ' CD_CRITERIO = '||to_char(:new.CD_CRITERIO);
	v_id_chave := v_id_chave ||' AND';
	v_id_chave := v_id_chave ||' CD_ROTULO = '||to_char(:new.CD_ROTULO);
  else
	v_id_chave :=			  ' CD_CRITERIO = '||to_char(:old.CD_CRITERIO);
	v_id_chave := v_id_chave ||' AND';
	v_id_chave := v_id_chave ||' CD_ROTULO = '||to_char(:old.CD_ROTULO);
  end if;
  if inserting then
	v_operacao := 'INSERT';
	v_conteudo_atual :=					' CD_CRITERIO='||nvl(:new.CD_CRITERIO,'NULL');
	v_conteudo_atual := v_conteudo_atual ||',CD_ROTULO='||nvl(:new.CD_ROTULO,'NULL');
	v_conteudo_atual := v_conteudo_atual ||',NM_LIMITEINI='||nvl(:new.NM_LIMITEINI,'NULL');
	v_conteudo_atual := v_conteudo_atual ||',NM_LIMITEFIM='||nvl(:new.NM_LIMITEFIM,'NULL');
  elsif updating then
	if nvl(:new.CD_CRITERIO,0) != nvl(:old.CD_CRITERIO,0) then
	  v_operacao := 'UPDATE';
	  v_conteudo_atual  := v_conteudo_atual  ||' CD_CRITERIO='||nvl(:new.CD_CRITERIO,'NULL');
	  v_conteudo_antigo := v_conteudo_antigo ||' CD_CRITERIO='||nvl(:old.CD_CRITERIO,'NULL');
	end if;
	if nvl(:new.CD_ROTULO,0) != nvl(:old.CD_ROTULO,0) then
	  v_operacao := 'UPDATE';
	  v_conteudo_atual  := v_conteudo_atual  ||',CD_ROTULO='||nvl(:new.CD_ROTULO,'NULL');
	  v_conteudo_antigo := v_conteudo_antigo ||',CD_ROTULO='||nvl(:old.CD_ROTULO,'NULL');
	end if;
	if nvl(:new.NM_LIMITEINI,'0') != nvl(:old.NM_LIMITEINI,'0') then
	  v_operacao := 'UPDATE';
	  v_conteudo_atual  := v_conteudo_atual  ||',NM_LIMITEINI='||nvl(:new.NM_LIMITEINI,'NULL');
	  v_conteudo_antigo := v_conteudo_antigo ||',NM_LIMITEINI='||nvl(:old.NM_LIMITEINI,'NULL');
	end if;
	if nvl(:new.NM_LIMITEFIM,'0') != nvl(:old.NM_LIMITEFIM,'0') then
	  v_operacao := 'UPDATE';
	  v_conteudo_atual  := v_conteudo_atual  ||',NM_LIMITEFIM='||nvl(:new.NM_LIMITEFIM,'NULL');
	  v_conteudo_antigo := v_conteudo_antigo ||',NM_LIMITEFIM='||nvl(:old.NM_LIMITEFIM,'NULL');
	end if;
	if v_conteudo_atual is null then
	  return;
	end if;
  elsif deleting then
	v_operacao := 'DELETE';
  end if;
  declare
	cursor mach is
	  select machine from v$session
	  where username = user;
  begin
	open mach;
	fetch mach into v_terminal;
	close mach;
  end;
  insert into f_auditoria(data
						 ,hora
						 ,usuario
						 ,terminal
						 ,tabela
						 ,id_chave
						 ,conteudo_antigo
						 ,conteudo_atual
						 ,operacao ) values
						 (trunc(sysdate)
						 ,to_char(sysdate,'HH24MISS')
						 ,user
						 ,v_terminal
						 ,v_tabela
						 ,v_id_chave
						 ,v_conteudo_antigo
						 ,v_conteudo_atual
						 ,v_operacao);
end;
/

Se alguem puder me ajudar, agradeço!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Parente :

 

Ou a tabela f_auditoria não existe ou a tabela da trigger DEPTAL_LIMITE_ROTULO tem um owner e a tabela de insert outro.

 

No segundo caso basta uma qualficação

 

insert into usuariob.f_auditoria(data ...

 

ou ...

 

pode ser falta de acesso a v$session - pela linha (53) parece ser isto ...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ola Motta

 

Muito obrigada mesmo... na verdade o user nao tinha acesso de SELECT na tabela v$session

 

 

Vlw pela ajuda!!

 

Te mais!!!

 

:D

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para quem quizer a solução é:

 

Conectar-se com o usuário SYS as sysdba

 

SQL> grant select on v_$session to <usuário>;

Abraços,

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha eu aqui de novo...

 

Puxa está sendo um desafio para mim desenvolver em Oracle, mas vamos la!

Se alguem puder me ajudar!!! :D

Cria a trigger normalmente, porém quando realizo INSERT na tabela ocorre erro,

Olha já revirei o código e não entendo porque ocorre esse erro nessa trigger:

 

79	insert into deptal_auditoria(data
 80						   ,hora
 81						   ,usuario
 82						   ,terminal
 83						   ,tabela
 84						   ,id_chave
 85						   ,conteudo_antigo
 86						   ,conteudo_atual
 87						   ,operacao) values
 88						   (trunc(sysdate)
 89						   ,to_char(sysdate,'HH24MISS')
 90						   ,user
 91						   ,v_terminal
 92						   ,v_tabela
 93						   ,v_id_chave
 94						   ,v_conteudo_antigo
 95						   ,v_conteudo_atual
 96						   ,v_operacao);
 97* end;
 98  /

Gatilho criado.

SQL> insert into deptal_notas values(1,100010057,942,0,0,22007);
insert into deptal_notas values(1,100010057,942,0,0,22007)
			*
ERRO na linha 1:
ORA-06502: PL/SQL: erro: erro de conversão de caractere em número numérico ou
de valor
ORA-06512: em "DESENV.TRG_AUD_DEPTALNOTAS", line 24
ORA-04088: erro durante a execução do gatilho 'DESENV.TRG_AUD_DEPTALNOTAS'

Segue a trigger completa

 

create or replace trigger trg_aud_deptalnotas after insert or delete or
  update of CD_ROTULO, NR_MATRALUN, CD_IDENTDISC, VL_NOTA, ST_BLOQ, NM_SEMANO
	  on DEPTAL_NOTAS for each row
declare
  v_operacao		varchar2(0100) := null;
  v_tabela		  varchar2(0100) := 'DEPTAL_NOTAS';
  v_terminal		varchar2(0100) := null;
  v_id_chave		varchar2(0500) := null;
  v_conteudo_antigo varchar2(2000) := null;
  v_conteudo_atual  varchar2(2000) := null;
begin
  if inserting or updating then
	v_id_chave :=			  ' NR_MATRALUN = '||to_char(:new.NR_MATRALUN);
	v_id_chave := v_id_chave ||' AND';
	v_id_chave := v_id_chave ||' CD_IDENTDISC = '||to_char(:new.CD_IDENTDISC);
	v_id_chave := v_id_chave ||' AND';
	v_id_chave := v_id_chave ||' CD_ROTULO = '||to_char(:new.CD_ROTULO);

  else
	v_id_chave :=			  ' NR_MATRALUN = '||to_char(:old.NR_MATRALUN);
	v_id_chave := v_id_chave ||' AND';
	v_id_chave := v_id_chave ||' CD_IDENTDISC = '||to_char(:old.CD_IDENTDISC);
	v_id_chave := v_id_chave ||' AND';
	v_id_chave := v_id_chave ||' CD_ROTULO = '||to_char(:old.CD_ROTULO);

  end if;
  if inserting then
	v_operacao := 'INSERT';
	v_conteudo_atual :=					' CD_ROTULO='||nvl(:new.CD_ROTULO,'NULL');
	v_conteudo_atual := v_conteudo_atual ||',NR_MATRALUN='||nvl(:new.NR_MATRALUN,'NULL');
	v_conteudo_atual := v_conteudo_atual ||',CD_IDENTDISC='||nvl(:new.CD_IDENTDISC,'NULL');
	v_conteudo_atual := v_conteudo_atual ||',VL_NOTA='||nvl(:new.VL_NOTA,'NULL');
	v_conteudo_atual := v_conteudo_atual ||',ST_BLOQ='||nvl(:new.ST_BLOQ,'NULL');
	v_conteudo_atual := v_conteudo_atual ||',NM_SEMANO='||nvl(:new.NM_SEMANO,'NULL');
  elsif updating then
	if nvl(:new.CD_ROTULO,0) != nvl(:old.CD_ROTULO,0) then
	  v_operacao := 'UPDATE';
	  v_conteudo_atual  := v_conteudo_atual  ||' CD_ROTULO='||nvl(:new.CD_ROTULO,'NULL');
	  v_conteudo_antigo := v_conteudo_antigo ||' CD_ROTULO='||nvl(:old.CD_ROTULO,'NULL');
	end if;
	if nvl(:new.NR_MATRALUN,0) != nvl(:old.NR_MATRALUN,0) then
	  v_operacao := 'UPDATE';
	  v_conteudo_atual  := v_conteudo_atual  ||',NR_MATRALUN='||nvl(:new.NR_MATRALUN,'NULL');
	  v_conteudo_antigo := v_conteudo_antigo ||',NR_MATRALUN='||nvl(:old.NR_MATRALUN,'NULL');
	end if;
	if nvl(:new.CD_IDENTDISC,0) != nvl(:old.CD_IDENTDISC,0) then
	  v_operacao := 'UPDATE';
	  v_conteudo_atual  := v_conteudo_atual  ||',CD_IDENTDISC='||nvl(:new.CD_IDENTDISC,'NULL');
	  v_conteudo_antigo := v_conteudo_antigo ||',CD_IDENTDISC='||nvl(:old.CD_IDENTDISC,'NULL');
	end if;
	if nvl(:new.VL_NOTA,0) != nvl(:old.VL_NOTA,0) then
	  v_operacao := 'UPDATE';
	  v_conteudo_atual  := v_conteudo_atual  ||',VL_NOTA='||nvl(:new.VL_NOTA,'NULL');
	  v_conteudo_antigo := v_conteudo_antigo ||',VL_NOTA='||nvl(:old.VL_NOTA,'NULL');
	end if;
	if nvl(:new.ST_BLOQ,0) != nvl(:old.ST_BLOQ,0) then
	  v_operacao := 'UPDATE';
	  v_conteudo_atual  := v_conteudo_atual  ||',ST_BLOQ='||nvl(:new.ST_BLOQ,'NULL');
	  v_conteudo_antigo := v_conteudo_antigo ||',ST_BLOQ='||nvl(:old.ST_BLOQ,'NULL');
	end if;
	if nvl(:new.NM_SEMANO,0) != nvl(:old.NM_SEMANO,0) then
	  v_operacao := 'UPDATE';
	  v_conteudo_atual  := v_conteudo_atual  ||',NM_SEMANO='||nvl(:new.NM_SEMANO,'NULL');
	  v_conteudo_antigo := v_conteudo_antigo ||',NM_SEMANO='||nvl(:old.NM_SEMANO,'NULL');
	end if;
	if v_conteudo_atual is null then
	  return;
	end if;
  elsif deleting then
	v_operacao := 'DELETE';
  end if;
  declare
	cursor mach is
	  select machine from v$session
	  where username = user;
  begin
	open mach;
	fetch mach into v_terminal;
	close mach;
  end;
  insert into deptal_auditoria(data
						 ,hora
						 ,usuario
						 ,terminal
						 ,tabela
						 ,id_chave
						 ,conteudo_antigo
						 ,conteudo_atual
						 ,operacao) values
						 (trunc(sysdate)
						 ,to_char(sysdate,'HH24MISS')
						 ,user
						 ,v_terminal
						 ,v_tabela
						 ,v_id_chave
						 ,v_conteudo_antigo
						 ,v_conteudo_atual
						 ,v_operacao);
end;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Erro de conversão , provavelmente nesta linha

 

v_id_chave := v_id_chave ||' CD_ROTULO = '||to_char(:old.CD_ROTULO);

 

Talvez o conteúdo tenha excedido 500 char.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O campo CD_ROTULO:

 

CD_ROTULO NOT NULL NUMBER(38)

 

Fiz um teste removendo essa linha do código, permanece o erro apontando para a última linha que seria

 

v_id_chave := v_id_chave ||' CD_IDENTDISC = '||to_char(:old.CD_IDENTDISC);
  end if;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Roda esse aqui meu Fio..

 

create or replace trigger trg_aud_deptalnotas after insert or delete or

update of CD_ROTULO, NR_MATRALUN, CD_IDENTDISC, VL_NOTA, ST_BLOQ, NM_SEMANO

on DEPTAL_NOTAS for each row

declare

v_operacao varchar2(0100) := null;

v_tabela varchar2(0100) := 'DEPTAL_NOTAS';

v_terminal varchar2(0100) := null;

v_id_chave varchar2(0500) := null;

v_conteudo_antigo varchar2(2000) := null;

v_conteudo_atual varchar2(2000) := null;

begin

if inserting or updating then

v_id_chave := ' NR_MATRALUN = '||to_char(:new.NR_MATRALUN);

v_id_chave := v_id_chave ||' AND';

v_id_chave := v_id_chave ||' CD_IDENTDISC = '||to_char(:new.CD_IDENTDISC);

v_id_chave := v_id_chave ||' AND';

v_id_chave := v_id_chave ||' CD_ROTULO = '||to_char(:new.CD_ROTULO);

 

else

v_id_chave := ' NR_MATRALUN = '||to_char(:old.NR_MATRALUN);

v_id_chave := v_id_chave ||' AND';

v_id_chave := v_id_chave ||' CD_IDENTDISC = '||to_char(:old.CD_IDENTDISC);

v_id_chave := v_id_chave ||' AND';

v_id_chave := v_id_chave ||' CD_ROTULO = '||to_char(:old.CD_ROTULO);

 

end if;

if inserting then

v_operacao := 'INSERT';

v_conteudo_atual := ' CD_ROTULO='||nvl(:new.CD_ROTULO,'NULL');

v_conteudo_atual := v_conteudo_atual ||',NR_MATRALUN='||nvl(:new.NR_MATRALUN,'NULL');

v_conteudo_atual := v_conteudo_atual ||',CD_IDENTDISC='||nvl(:new.CD_IDENTDISC,'NULL');

v_conteudo_atual := v_conteudo_atual ||',VL_NOTA='||nvl(:new.VL_NOTA,'NULL');

v_conteudo_atual := v_conteudo_atual ||',ST_BLOQ='||nvl(:new.ST_BLOQ,'NULL');

v_conteudo_atual := v_conteudo_atual ||',NM_SEMANO='||nvl(:new.NM_SEMANO,'NULL');

elsif updating then

if nvl(:new.CD_ROTULO,0) != nvl(:old.CD_ROTULO,0) then

v_operacao := 'UPDATE';

v_conteudo_atual := v_conteudo_atual ||',CD_ROTULO='||nvl(:new.CD_ROTULO,'NULL');

v_conteudo_antigo := v_conteudo_antigo ||',CD_ROTULO='||nvl(:old.CD_ROTULO,'NULL');

end if;

if nvl(:new.NR_MATRALUN,0) != nvl(:old.NR_MATRALUN,0) then

v_operacao := 'UPDATE';

v_conteudo_atual := v_conteudo_atual ||',NR_MATRALUN='||nvl(:new.NR_MATRALUN,'NULL');

v_conteudo_antigo := v_conteudo_antigo ||',NR_MATRALUN='||nvl(:old.NR_MATRALUN,'NULL');

end if;

if nvl(:new.CD_IDENTDISC,0) != nvl(:old.CD_IDENTDISC,0) then

v_operacao := 'UPDATE';

v_conteudo_atual := v_conteudo_atual ||',CD_IDENTDISC='||nvl(:new.CD_IDENTDISC,'NULL');

v_conteudo_antigo := v_conteudo_antigo ||',CD_IDENTDISC='||nvl(:old.CD_IDENTDISC,'NULL');

end if;

if nvl(:new.VL_NOTA,0) != nvl(:old.VL_NOTA,0) then

v_operacao := 'UPDATE';

v_conteudo_atual := v_conteudo_atual ||',VL_NOTA='||nvl(:new.VL_NOTA,'NULL');

v_conteudo_antigo := v_conteudo_antigo ||',VL_NOTA='||nvl(:old.VL_NOTA,'NULL');

end if;

if nvl(:new.ST_BLOQ,0) != nvl(:old.ST_BLOQ,0) then

v_operacao := 'UPDATE';

v_conteudo_atual := v_conteudo_atual ||',ST_BLOQ='||nvl(:new.ST_BLOQ,'NULL');

v_conteudo_antigo := v_conteudo_antigo ||',ST_BLOQ='||nvl(:old.ST_BLOQ,'NULL');

end if;

if nvl(:new.NM_SEMANO,0) != nvl(:old.NM_SEMANO,0) then

v_operacao := 'UPDATE';

v_conteudo_atual := v_conteudo_atual ||',NM_SEMANO='||nvl(:new.NM_SEMANO,'NULL');

v_conteudo_antigo := v_conteudo_antigo ||',NM_SEMANO='||nvl(:old.NM_SEMANO,'NULL');

end if;

if v_conteudo_atual is null then

return;

end if;

elsif deleting then

v_operacao := 'DELETE';

end if;

declare

cursor mach is

select machine from v$session

where username = user;

begin

open mach;

fetch mach into v_terminal;

close mach;

end;

insert into deptal_auditoria(data

,hora

,usuario

,terminal

,tabela

,id_chave

,conteudo_antigo

,conteudo_atual

,operacao) values

(trunc(sysdate)

,to_char(sysdate,'HH24MISS')

,user

,v_terminal

,v_tabela

,v_id_chave

,v_conteudo_antigo

,v_conteudo_atual

,v_operacao);

end;

Compartilhar este post


Link para o post
Compartilhar em outros sites

não funcionou... apresenta o mesmo erro...

 

o insert que estou usando para testar a trigger é esse...

 

Insert into Deptal_Notas values (7,112062351,942,0,0,20072)

Compartilhar este post


Link para o post
Compartilhar em outros sites

faça algo assim

 

create or replace trigger trg_aud_deptallimrotulo after insert or delete or
  update of CD_CRITERIO, CD_ROTULO, NM_LIMITEINI, NM_LIMITEFIM
	  on DEPTAL_LIMITE_ROTULO for each row
declare
  v_operacao		varchar2(0100) := null;
  v_tabela		  varchar2(0100) := 'DEPTAL_LIMITE_ROTULO';
  v_terminal		varchar2(0100) := null;
  v_id_chave		varchar2(0500) := null;
  v_conteudo_antigo varchar2(2000) := null;
  v_conteudo_atual  varchar2(2000) := null;
fase char(4);
begin
  if inserting or updating then
	fase := '0001';--
	v_id_chave :=			  ' CD_CRITERIO = '||to_char(:new.CD_CRITERIO);
	v_id_chave := v_id_chave ||' AND';
	v_id_chave := v_id_chave ||' CD_ROTULO = '||to_char(:new.CD_ROTULO);
  else
	 fase := '0002';-- mude este numero 
	v_id_chave :=			  ' CD_CRITERIO = '||to_char(:old.CD_CRITERIO);
	v_id_chave := v_id_chave ||' AND';
	v_id_chave := v_id_chave ||' CD_ROTULO = '||to_char(:old.CD_ROTULO);
  end if;
  if inserting then
	v_operacao := 'INSERT';
	v_conteudo_atual :=					' CD_CRITERIO='||nvl(:new.CD_CRITERIO,'NULL');
	v_conteudo_atual := v_conteudo_atual ||',CD_ROTULO='||nvl(:new.CD_ROTULO,'NULL');
	v_conteudo_atual := v_conteudo_atual ||',NM_LIMITEINI='||nvl(:new.NM_LIMITEINI,'NULL');
	v_conteudo_atual := v_conteudo_atual ||',NM_LIMITEFIM='||nvl(:new.NM_LIMITEFIM,'NULL');
  elsif updating then
	if nvl(:new.CD_CRITERIO,0) != nvl(:old.CD_CRITERIO,0) then
	  v_operacao := 'UPDATE';
	  v_conteudo_atual  := v_conteudo_atual  ||' CD_CRITERIO='||nvl(:new.CD_CRITERIO,'NULL');
	  v_conteudo_antigo := v_conteudo_antigo ||' CD_CRITERIO='||nvl(:old.CD_CRITERIO,'NULL');
	end if;
	if nvl(:new.CD_ROTULO,0) != nvl(:old.CD_ROTULO,0) then
	  v_operacao := 'UPDATE';
	  v_conteudo_atual  := v_conteudo_atual  ||',CD_ROTULO='||nvl(:new.CD_ROTULO,'NULL');
	  v_conteudo_antigo := v_conteudo_antigo ||',CD_ROTULO='||nvl(:old.CD_ROTULO,'NULL');
	end if;
	if nvl(:new.NM_LIMITEINI,'0') != nvl(:old.NM_LIMITEINI,'0') then
	  v_operacao := 'UPDATE';
	  v_conteudo_atual  := v_conteudo_atual  ||',NM_LIMITEINI='||nvl(:new.NM_LIMITEINI,'NULL');
	  v_conteudo_antigo := v_conteudo_antigo ||',NM_LIMITEINI='||nvl(:old.NM_LIMITEINI,'NULL');
	end if;
	if nvl(:new.NM_LIMITEFIM,'0') != nvl(:old.NM_LIMITEFIM,'0') then
	  v_operacao := 'UPDATE';
	  v_conteudo_atual  := v_conteudo_atual  ||',NM_LIMITEFIM='||nvl(:new.NM_LIMITEFIM,'NULL');
	  v_conteudo_antigo := v_conteudo_antigo ||',NM_LIMITEFIM='||nvl(:old.NM_LIMITEFIM,'NULL');
	end if;
	if v_conteudo_atual is null then
	  return;
	end if;
  elsif deleting then
	v_operacao := 'DELETE';
  end if;
  declare
	cursor mach is
	  select machine from v$session
	  where username = user;
  begin
	open mach;
	fetch mach into v_terminal;
	close mach;
  end;
  insert into f_auditoria(data
						 ,hora
						 ,usuario
						 ,terminal
						 ,tabela
						 ,id_chave
						 ,conteudo_antigo
						 ,conteudo_atual
						 ,operacao ) values
						 (trunc(sysdate)
						 ,to_char(sysdate,'HH24MISS')
						 ,user
						 ,v_terminal
						 ,v_tabela
						 ,v_id_chave
						 ,v_conteudo_antigo
						 ,v_conteudo_atual
						 ,v_operacao);
exception
   when others then
	dbms_output.put_line(fase)
end;
/

vai saber em que ponto dá a caca , assim fica um pouco + fácil.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Parente... querido...

 

"A solução mora ao lado" => Brola http://forum.imasters.com.br/public/style_emoticons/default/clap.gif

 

Consultei o rapaz que trabalha aqui comigo (devia ter feito isso no começo, sei), e ele me disse onde estava o problema.

 

Na verdade o erro ocorre nas linhas abaixo:

 

if inserting then
	v_operacao := 'INSERT';
	v_conteudo_atual :=					' CD_CRITERIO='||nvl(:new.CD_CRITERIO,'NULL');
	v_conteudo_atual := v_conteudo_atual ||',CD_ROTULO='||nvl(:new.CD_ROTULO,'NULL');
	v_conteudo_atual := v_conteudo_atual ||',NM_LIMITEINI='||nvl(:new.NM_LIMITEINI,'NULL');
	v_conteudo_atual := v_conteudo_atual ||',NM_LIMITEFIM='||nvl(:new.NM_LIMITEFIM,'NULL');

Pois ai voce tem um campo do tipo numérico sendo concatenado com uma string. Não vai mesmo funcionar rsrs

 

Solução:

 

if inserting then
	v_operacao := 'INSERT';
	v_conteudo_atual :=					' CD_CRITERIO='||nvl(:new.CD_CRITERIO,'NULL');
	v_conteudo_atual := v_conteudo_atual ||',CD_ROTULO='||nvl(to_char(:new.CD_ROTULO),'NULL');
	v_conteudo_atual := v_conteudo_atual ||',NM_LIMITEINI='||nvl(to_char(:new.NM_LIMITEINI),'NULL');
	v_conteudo_atual := v_conteudo_atual ||',NM_LIMITEFIM='||nvl(to_char(:new.NM_LIMITEFIM),'NULL');

O que um to_char não pode proporcionar a desenvolvedores desesperados rsrsrs

 

Bom, problema resolvido. Obrigada a todos que me responderam, obrigada mesmo!!!

 

Bj parente!

 

Abraços,

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.