Colega, a princpípio trigger de erro *** NÂO SERVEM *** para mascarar 
erros, pois após elas dispararem a rotina de manipulação de erros 
padrão do cliente VAI ser executada, sim, cfrme :

(a tabela citada está numa tablespace offline) :

[EMAIL PROTECTED]:SQL>l
  1  CREATE OR REPLACE TRIGGER check_tbs_status
  2   AFTER SERVERERROR ON DATABASE
  3   BEGIN
  4      if    is_servererror(376) then
  5         raise_application_error(-20002, 'Erro 376 devido à 
tablespace offline!!');
  6      elsif is_servererror(1110) then
  7         raise_application_error(-20003, 'Erro 1110 devido à 
tablespace offline!!');
  8      end if;
  9*  end;
[EMAIL PROTECTED]:SQL>/

Gatilho criado.


[EMAIL PROTECTED]:SQL>select * from TAB_T;
select * from TAB_T
              *
ERRO na linha 1:
ORA-00604: error occurred at recursive SQL level 1
ORA-20002: Erro 376 devido à tablespace offline!!
ORA-06512: at line 3
ORA-00376: file 23 cannot be read at this time
ORA-01110: data file 23: '/u1/ts_t_tab_01.dbf'

==> veja q minha trigger de erro disparou MAS também a manipulação de 
erros "normal" do cliente, sqlplus no caso... O que vc pode fazer é 
usar um cliente que TENHA a capacidade de controlar stack de erros, 
como o PL/SQL tem via exception, exemplo :

[EMAIL PROTECTED]:SQL>ed
Gravou arquivo afiedt.buf

  1  DECLARE
  2     e_00376 exception;
  3     e_01110 exception;
  4     PRAGMA EXCEPTION_INIT(e_00376 , -00376);
  5     PRAGMA EXCEPTION_INIT(e_01110 , -01110);
  6  BEGIN
  7          for r in (select * from TAB_T) loop
  8          null;
  9       end loop;
 10   EXCEPTION
 11     when e_00376 then raise_application_error(-20002, 'Erro 0376 
devido à tablespace offline!!');
 12     when e_01110 then raise_application_error(-20002, 'Erro 1110 
devido à tablespace offline!!');
 13* END;
[EMAIL PROTECTED]:SQL>/
DECLARE
*
ERRO na linha 1:
ORA-20002: Erro 0376 devido à tablespace offline!!
ORA-06512: at line 11


[EMAIL PROTECTED]:SQL>

===>>> MAS imho isso não faz muito sentido, exatamente PARA QUE vc 
quer "esconder" o nome do datafile, qual objetivo vc obtém com 
isso ??? Não vejo nenhum direto...

[]s

 Chiappa
 
--- Em oracle_br@yahoogrupos.com.br, "Anderson" <[EMAIL PROTECTED]> 
escreveu
>
> Quando eu coloco um tablespace como offline, ao fazer um select por
> exemplo, são retornados os erros ORA-00376 e ORA-01110. 
> 
> Ok, devem ser retornados estes erros mesmo. 
> 
> O problema é que o erro ORA-01110 mostra o caminho completo do 
arquivo
> da tablespace que está offline. 
> 
> Eu gostaria de mascarar este erro com um Servererror trigger. 
> Mas os erros 376 e 1110 continuam sendo mostrados junto com a 
mensagem
> que eu configurarei. 
> 
> Abaixo dele está meu disparador. 
> 
> 
> CREATE OR REPLACE TRIGGER check_tbs_status
> AFTER SERVERERROR ON DATABASE
> BEGIN
> if is_servererror(376) and is_servererror(1110) then
> raise_application_error(-20002,'TABLESPACE OFFLINE',true); 
> end if;
> end;
> /
> 
> -- já coloquei o 3º parâmetro como false, mas dá no mesmo
> 
> Sugestões?
> 
> Anderson.
>


Responder a