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. >