El problema es que todo el bloque que "puede fallar" debe ir entre un begin y un end.
Tiene que ver con las trasacciones.
No recuerdo donde lo lei, pero parece ser que lo que va entre en un bloque, se realiza en una transacción y asi pueden capturarse.
Esto si funciona, (lo he probado, FB 1.5):
Código SQL
[-]
create procedure AAA_PRUEBA
returns (errores integer)
as
declare variable instruccion varchar(100);
begin
errores = 0;
begin
instruccion = 'ALTER TABLE TTT ADD CAMPO2 INTEGER';
execute statement instruccion ;
when any do
begin
errores = errores + 1;
exception err_breakpoint 'Hubo un error haciendo ' || instruccion ;
end
end
if (errores = 0) then
begin
instruccion = 'UPDATE TTT SET CAMPO2=0';
execute statement instruccion ;
when any do
begin
errores = errores + 1;
exception err_breakpoint 'Hubo un error haciendo ' || instruccion ;
end
end
suspend;
end