[firebase-br] Tratamento de "Exception" dentro de Storage Procedure

Edgard C. de Oliveira Neto econeto em ibest.com.br
Qua Fev 4 09:04:08 -03 2009


Pessoal

Olhei o exemplo do livro FireBird 2 do Cantu, dê uma olhada na pág. 179, é
exatamente isto.
Acho que não ficou bem claro o que eu quero fazer.

-- A ser disparado um exception, a SP é desviada para o WHEN any do ;
-- Executa o insert em uma tabela;
-- E dispara outro exception (re-raise), que termina a execução da SP.
-- COMMIT;

Pelo exemplo do livro é esperado que:
- ao ser chamado a SP, caso ocorra a exceção, seja gravado o erro em uma
tabela e seja apresentado a texto da exceção.
- Ao ser dado o COMMIT, o erro é gravado na tabela.

O que está acontecendo é:
-- A ser disparado um exception, a SP termina e devolve a mensagem do
exception, SEM EXECUTAR O INSERT (apesar de ser feito o commit);

Se é comentado o EXCEPTION que está dentro do WHEN any do, é inserido o
registro, Mas NÃO É DEVOLVIDO O ERRO!
Abaixo o codigo da SP.

Edgard


CREATE OR ALTER PROCEDURE P_TEST(
    TEMP SMALLINT)
AS
begin
  begin
     if (TEMP < 0) then
        exception EXC_ERROR 'VARIABLE < ZERO';

     if (exists (select * from COUNTRIES WHERE ID = '111')) then
       update COUNTRIES set NAME = 'VARIABLE OK.' where ID = '111';
     else
       insert into COUNTRIES (ID, NAME) values ('111','VARIABLE OK.');

     when any do
     begin
        if (exists (select * from COUNTRIES WHERE ID = '111')) then
          update COUNTRIES set NAME = 'VARIABLE < ZERO' where ID = '111';
        else
          insert into COUNTRIES (ID, NAME) values ('111','VARIABLE < ZERO');
        exception EXC_ERROR ' OUTRO VARIABLE < ZERO';
     end -- when any do
  end
end



2009/2/4 Gustavo Moda <gustavo.moda em gmail.com>

> Qual mensagem de erro?
> Rodei o script em um banco de dados e funcionou corretamente.
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>



Mais detalhes sobre a lista de discussão lista