Hola
A partir de firebird 2.0 tienes el execute statement
yo lo utilizo para solucionar problemas parecido al que planteas
Código SQL
[-]
CREATE PROCEDURE NEW_PROCEDURE
returns (debe double precision)
as
declare variable imes integer;
declare variable cadena varchar(500);
begin
imes=1;
while (:imes<13) do begin
cadena='select debe'||cast(imes as varchar(12))||' from tbsaldosapuntes'||
' where lo que sea'
execute statement cadena into :debe;
suspend;
imes=:imes+1;
end
end
Saludos