Gustavo:
Acuérdate que TODA instrucción SELECT dentro de un bloque PSQL debe de llevar la clausula INTO :valor_de_variable. Es por esta razón que te marca un error en ";" Es decir, el compilador de la base de datos está esperando dicha instrucción.
Aquí te pongo un procedimiento donde yo lo utilizo.
Código SQL
[-]
CREATE OR ALTER PROCEDURE CALC_CTRL_SEP
RETURNS (
CTRL_SEP VARCHAR(14))
AS
declare variable aa char(2);
declare variable id_u_admtva char(1);
declare variable entidad char(2);
declare variable id_estado smallint;
declare variable tipo_plantel char(2);
declare variable no_plantel char(3);
declare variable consecutivo smallint;
begin
select id_u_admtva, id_estado, tipo_plantel, no_plantel
from sysparams into :id_u_admtva, :id_estado, :tipo_plantel, :no_plantel;
consecutivo = next value for gen_ctrl_sep;
if (consecutivo > 9999) then
begin
select gen_id(gen_ctrl_sep, (select (gen_id(gen_ctrl_sep, 0) * -1)
from rdb$database)) from rdb$database into :consecutivo;
consecutivo = next value for gen_ctrl_sep;
end
entidad = lpad(cast(id_estado as varchar(2)), 2, '0');
aa = right(cast(extract(year from current_date) as char(4)), 2);
CTRL_SEP = aa || id_u_admtva || entidad || tipo_plantel ||
no_plantel || lpad(cast(consecutivo as varchar(4)), 4, '0');
end
Saludos,
Gerardo Suárez Trejo.
PD. En tu caso, debes de utilizar las llamadas variables Tontas ... ¿me explico?