Ver Mensaje Individual
  #2  
Antiguo 04-08-2010
Avatar de movorack
[movorack] movorack is offline
Miguel A. Valero
 
Registrado: feb 2007
Ubicación: Bogotá - Colombia
Posts: 1.346
Reputación: 20
movorack Va camino a la famamovorack Va camino a la fama
Hola...

creo que la concatenación no la puedes hacer entre dos numeros... para ello deberás primero convertir el numero en cadena, concatenar y luego volverlo a numero para asignarlo al campo "codigo".

he hecho esta función de ejemplo y me esta trabajando bien:

Código SQL [-]
CREATE OR REPLACE FUNCTION public.test_concat() RETURNS NUMERIC AS $$
DECLARE
    _yr NUMERIC (4,0);
    _nxtval NUMERIC;
    _str VARCHAR;
BEGIN  
    SELECT EXTRACT(YEAR FROM CURRENT_DATE) INTO _yr;
    SELECT nextval('sequence1') INTO _nxtval;
    
    _str := _yr::VARCHAR || _nxtval::VARCHAR;
    
    RETURN _str::NUMERIC;
END;
$$ LANGUAGE PLPGSQL;


para el trigger que muestras creo que así podria servirte:

Código SQL [-]
CREATE OR REPLACE FUNCTION sideconc."TRG_SEQ_ALUM"()
  RETURNS trigger AS
$BODY$
DECLARE
    var NUMERIC (4,0);
            
BEGIN
    SELECT EXTRACT(YEAR FROM CURRENT_DATE)into var;
    NEW.codigo := (var::VARCHAR || nextval('sideconc.seq_cod_alum')::VARCHAR)::NUMERIC;
    Return NEW;
END;
$BODY$
  LANGUAGE 'plpgsql' VOLATILE
  COST 100;
ALTER FUNCTION sideconc."TRG_SEQ_ALUM"() OWNER TO postgres;

Saludos,
__________________
Buena caza y buen remar... http://mivaler.blogspot.com
Responder Con Cita