Tocha 0 Denunciar post Postado Dezembro 4, 2006 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
Motta 645 Denunciar post Postado Dezembro 5, 2006 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
Tocha 0 Denunciar post Postado Dezembro 5, 2006 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
Motta 645 Denunciar post Postado Dezembro 5, 2006 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