Ver Mensaje Individual
  #9  
Antiguo 03-03-2011
Gallosuarez Gallosuarez is offline
Miembro
 
Registrado: feb 2007
Posts: 92
Reputación: 20
Gallosuarez Va por buen camino
Talking Posible solución ...

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
/* Calcula el Número de Control SEP de acuerdo a los parámetros del sistema */
  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;
/* Resetea gen_ctrl_sep = 0 */
  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?
Responder Con Cita