Bom dia,
Dei uma pesquisada na web e também aqui no fórum, mas não achei claramente se há algum procedimento ou ação a ser feita para o caso que foi relatar agora.
É o seguinte, criei uma trigger, e em determinada situação que eu tratei, quero que retorne o erro que eu coloquei. Para isso, usei o raise_apllication_error, passando o código e a mensagem.
Entretanto, além de retornar esse erro criado, também retorna outros erros juntos, que são os seguintes:
ORA-06512: em NOME_TRIGGER, line...
ORA-04088: erro durante a execução do gatilho...
Tem algum comando para inibir a visualização dessas duas mensagens?
Muito obrigado!
Abraços
Erro em Trigger
-
- Rank: Estagiário Pleno
- Mensagens: 3
- Registrado em: Sáb, 25 Jun 2011 11:45 am
- Localização: Santo André-SP
-
- Moderador
- Mensagens: 1177
- Registrado em: Qui, 15 Out 2009 10:28 am
- Localização: Recife
se puder postar o codigo da trigger fica mais fácil amigo...
de repente tu pode fazer
posta aí pra ver
de repente tu pode fazer
exception
when others then
null;
end;
-
- Rank: Estagiário Pleno
- Mensagens: 3
- Registrado em: Sáb, 25 Jun 2011 11:45 am
- Localização: Santo André-SP
Oi Diego, beleza? Então... o código está abaixo.
A idéia é o seguinte... tem uma procedure que é chamada e faz um update na tabela WE alterando o stat para 95. Nesse instante, é disparada a trigger abaixo que chama uma outra procedure... o problema é que o sqlerrm fica carregado com a mensagem que está no ERRTEXT dentro do raise_aplication_error e também com as mensagens padrões do Oracle, e devolve para a procedure inicial o erro que foi tratado mais os erros do Oracle, e eu só precisava que fosse carregada com o que está no Errtext, sem mostrar os erros do Oracle.
Obrigado, abraço
CREATE OR REPLACE TRIGGER TRG_MAKE_ITF_WE
AFTER INSERT OR UPDATE ON WE
REFERENCING
NEW AS NEW
OLD AS OLD
FOR EACH ROW
Declare
errcode number := 0;
err_obj varchar2(255) := null;
errtext varchar2(255);
f_lager anwender.lager%type;
Begin
if (:old.stat <> '95' and :new.stat = '95') then
PKG_ITF_FISCAL.ITF_OUT_RECEBIMENTO(:NEW.LAGER,
:NEW.NR_WE,
:NEW.TYP_PROC,
:NEW.ID_PROC,
:NEW.ID_KLIENT,
:NEW.NR_LIEFERSCHEIN,
:NEW.DATUM_WE,
:NEW.TIME_AEN,
ERRCODE,
ERRTEXT);
if errcode != 0 then
err_obj := '@1Impossivel de confirmar Recebimento ' || :new.nr_we;
raise_application_error(-20005, ERRTEXT);
end if;
end if;
End;
A idéia é o seguinte... tem uma procedure que é chamada e faz um update na tabela WE alterando o stat para 95. Nesse instante, é disparada a trigger abaixo que chama uma outra procedure... o problema é que o sqlerrm fica carregado com a mensagem que está no ERRTEXT dentro do raise_aplication_error e também com as mensagens padrões do Oracle, e devolve para a procedure inicial o erro que foi tratado mais os erros do Oracle, e eu só precisava que fosse carregada com o que está no Errtext, sem mostrar os erros do Oracle.
Obrigado, abraço
CREATE OR REPLACE TRIGGER TRG_MAKE_ITF_WE
AFTER INSERT OR UPDATE ON WE
REFERENCING
NEW AS NEW
OLD AS OLD
FOR EACH ROW
Declare
errcode number := 0;
err_obj varchar2(255) := null;
errtext varchar2(255);
f_lager anwender.lager%type;
Begin
if (:old.stat <> '95' and :new.stat = '95') then
PKG_ITF_FISCAL.ITF_OUT_RECEBIMENTO(:NEW.LAGER,
:NEW.NR_WE,
:NEW.TYP_PROC,
:NEW.ID_PROC,
:NEW.ID_KLIENT,
:NEW.NR_LIEFERSCHEIN,
:NEW.DATUM_WE,
:NEW.TIME_AEN,
ERRCODE,
ERRTEXT);
if errcode != 0 then
err_obj := '@1Impossivel de confirmar Recebimento ' || :new.nr_we;
raise_application_error(-20005, ERRTEXT);
end if;
end if;
End;
-
- Rank: DBA Júnior
- Mensagens: 229
- Registrado em: Sex, 05 Set 2008 2:59 pm
- Localização: Igrejinha - RS
O problema do RAISE_APPLICATION_ERROR é que ele retorna o erro tratado concatenado com a trigger e tudo o mais que aconteceu.
Tenho duas soluções em mente:
1) Aqui no trabalho, temos uma package que insere os erros tratados numa PL/TABLE. No retorno do erro, ao invés de buscar por SQLERRM, retornamos um GET da package com todos os erros que aconteceram.
2) A outra solução é a forma XGH da coisa.
Tu pode fazer um SUBSTR buscando somente o teu erro
ORA-20000: Teste erro
ORA-06512: at "OWNER.TRIGGER_NAME", line 9
ORA-04088: error during execution of trigger 'OWNER.TRIGGER_NAME'
1) Aqui no trabalho, temos uma package que insere os erros tratados numa PL/TABLE. No retorno do erro, ao invés de buscar por SQLERRM, retornamos um GET da package com todos os erros que aconteceram.
2) A outra solução é a forma XGH da coisa.
Tu pode fazer um SUBSTR buscando somente o teu erro
-
- Rank: Estagiário Pleno
- Mensagens: 3
- Registrado em: Sáb, 25 Jun 2011 11:45 am
- Localização: Santo André-SP
Oi Diego,
A respeito do que você indicou, a primeira embora seja a mais correta, talvez fique um pouco fora para eu aplicar aqui, pois mudaria um pouco o conceito do funcionamento do sistema, onde teria que criar processos auxiliares para isso.
A respeito da segunda, também pensei no substr, porém as mensagens não têm tamanho fixo. Vou dar uma olhada se posso aplicar o substr mas com algum comando que faça com que ele procure o início e o término da mensagem, sem considerar os erros do Oracle. Caso souber de algo nesse sentido, peço por favor, me avisar.
O que é XGH ?? Olhei no google e alguns fóruns, é tipo uma gambiarra ou algo forçado? hehe....
De qualquer forma, muito obrigado pelas sugestões!
Abraço
A respeito do que você indicou, a primeira embora seja a mais correta, talvez fique um pouco fora para eu aplicar aqui, pois mudaria um pouco o conceito do funcionamento do sistema, onde teria que criar processos auxiliares para isso.
A respeito da segunda, também pensei no substr, porém as mensagens não têm tamanho fixo. Vou dar uma olhada se posso aplicar o substr mas com algum comando que faça com que ele procure o início e o término da mensagem, sem considerar os erros do Oracle. Caso souber de algo nesse sentido, peço por favor, me avisar.
O que é XGH ?? Olhei no google e alguns fóruns, é tipo uma gambiarra ou algo forçado? hehe....
De qualquer forma, muito obrigado pelas sugestões!
Abraço
-
- Moderador
- Mensagens: 1177
- Registrado em: Qui, 15 Out 2009 10:28 am
- Localização: Recife
vê isso ai, dbms_utility.format_call_stack
tem um outro lance de dbms_errlog, teria que vder o que fazem direito..
tem um outro lance de dbms_errlog, teria que vder o que fazem direito..
-
- Informação
-
Quem está online
Usuários navegando neste fórum: Bing [Bot] e 1 visitante