PDA

Ver la Versión Completa : Problema de concatenacion


elistraus
03-08-2010, 17:05:08
hola de nuevo tengo ahora este otro problema que no se como solucionarlo la idea es concatenar el año actual a la secuencia, pero no se que estoy haciendo mal, si me pueden ayudaar porfa estaré muy agradecido,,, saludos


CREATE OR REPLACE FUNCTION sideconc."TRG_SEQ_ALUM"()
RETURNS trigger AS
$BODY$
DECLARE
var NUMERIC (4,0);

BEGIN
SELECT EXTRACT(YEAR FROM now())into var;
New.codigo:=var::numeric || nextval('sideconc.seq_cod_alum');
Return NEW;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE
COST 100;
ALTER FUNCTION sideconc."TRG_SEQ_ALUM"() OWNER TO postgres;

movorack
04-08-2010, 20:15:28
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:


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:


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,

elistraus
04-08-2010, 21:31:29
Graaaacias movorack, me sirvio, arregle mi problema, muy agradecido por haberme ayudado,
no se si cierran los hilos aqui en el club delphi,,,
saludos