Ir para conteúdo

POWERED BY:

Arquivado

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

Tocha

Arremessando Exception entre procedures

Recommended Posts

Pessoal. Tenho a procedure 1 que em sua execução chama chama a procedure 2, esta chamada está entre um begin e um exception... bom, até aí tudo ótimo e fácil. Mas na minha procedure 2 eu tenho vários inserts, updates etc que podem gerar excessões que eu quero (por motivos fortes o suficiente para mim) tratar no exception da procedure 1. Li num site que não é possível arremessar exception entre procedures, mas... será que não mesmo??? Alguém tem idéia se é ou não possível fazer isso? Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Qualquer raise ou exceção na rotina chamada é replicado para a chamadora, apenas tenha cuidado de se ma chamada você tratar uma exceção usar o comando Raise; para chamar o erro novamente.

 

na chamada

 

...

exception

when no_data_found then

null; -- nao faz nada

when others then

raise;

end;

Compartilhar este post


Link para o post
Compartilhar em outros sites

então, olha só, vou por aqui um exemplo mais detalhado do que tô tentando fazer, porque ou eu não entendi o que você passou ou este jeito ai não vai adiantar. Veja:create or replace procedure2 is begin dbms_output.put_line ('Esta é a procedure 2. Ela vai executar alguns códigos e, dependendo do exception que ela der, vai enviar à procedure1 para que esta trate o exception'); begin update titulos_receber tr set tr.valor = v_valor_novo where tr.id_tit_receber = ct1.id_tit_receber; exception when no_data_found then raise_application_error (-20164,'O título está nulo'); exception when others then raise_application_error (-20165,'Deu outro erro qualquer'); end; dbms_output.put_line ('terminou as excessões da procedure 2... gostaria que estes exceptions pudessem ser tratados na procedure 1...');end procedure2 Ai, da forma que eu imagino fazer seria configurando a procedure1 da seguinte forma:create or replace procedure1 is begin dbms_output.put_line ('Esta é a procedure 1. Ela vai chamar a procedure 2 agora: '); prc_procedure2; exception when "20164" ou "O título está nulo" -- exception criado na procedure 2 dbms_output.put_line('eeeeee !!!, funcionou... a procedure 1 recebeu e tratou o erro da 2'); execption when "20165" ou "Deu outro erro qualquer" -- exception criado na procedure 2 dbms_output.put_line('caracas mano... que legal, tratou o erro da procedure 2 novamente'); end;end procedure1 É isso aí que eu tô precisando... tem jeito??? Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

faça algo assim

 

create or replace procedure chamada (psaida out varcchar2) is

begin

psaida := '';

...

if ...then

psaida := 'erro 1';

elsif then

psaida := 'erro 2';

end if;

end;

 

create or replace procedure chamadora is

saida varchar2(255);

begin

chamada(saida);

if saida is not null then

rasie-application-error(-20001,'a chamada deu zica ' || saida);

end if;

end;

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.