[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