El 23 de junio de 2009 10:25, Emanuel Calvo Franco <postgres....@gmail.com>escribió:
> El 21 de junio de 2009 19:38, Virginia<mavi...@gmail.com> escribió: > > Buenas tardes, estoy tratando de implementar un trigger en mi base de > datos > > de tal manera que cuando inserte un nuevo registro en mi tabla de > > "acumulados" se borre el registro cuya fecha sea superior al último año, > es > > algo así como las consultas via internet de los bancos, que solo muestra > las > > transacciones de los últimos 12 meses. > > Por ejemplo si estoy insertando el acumulado del mes de junio 2009, se > debe > > borrar el registro correspondiente al junio 2008 y solo mostrar los > > acumulados de los últimos 12 meses... > > > > El trigger es el siguiente: > > > > -- Function: autoservicios.historico_sobres() > > > > -- DROP FUNCTION autoservicios.historico_sobres(); > > > > CREATE OR REPLACE FUNCTION autoservicios.historico_sobres() > > RETURNS trigger AS > > $BODY$ > > DECLARE > > anio integer; > > mes integer; > > codigo integer; > > fecha varchar(10); > > fecha_nueva varchar(10); > > BEGIN > > IF TG_OP = 'INSERT' THEN > > SELECT dat_fecha INTO fecha FROM autoservicios.toi019_acumulado WHERE > > nu_co_empleado = NEW.nu_co_empleado; > > anio = substring(fecha,0,4); > > anio = anio + 1; > > mes = substring(fecha,5,2); > > Esto lo podes hacer de este modo: > > > SELECT dat_fecha INTO fecha FROM autoservicios.toi019_acumulado WHERE > nu_co_empleado = NEW.nu_co_empleado; > > select (extract(year from fecha)+1)::<tipo_de_anio> into anio; > select extract(month from fecha) into mes; > > Pero te recomiendo no utilizarlas como string, es preferible que uses > funciones > relativas a fechas > > > > -- > Emanuel Calvo Franco > ArPUG [www.arpug.com.ar] / AOSUG Member > www.emanuelcalvofranco.com.ar > Buenas tardes, ya cambié la función que extrae la fecha pero ahora al tratar de insertar un dato, me bota el siguiente error ERROR: query has no destination for result data HINT: If you want to discard the results of a SELECT, use PERFORM instead. CONTEXT: PL/pgSQL function "historico_sobres" line 8 at SQL statement La función es la siguiente: CREATE OR REPLACE FUNCTION autoservicios.historico_sobres() RETURNS trigger AS $BODY$ DECLARE fecha timestamp; codigo integer; BEGIN IF TG_OP = 'INSERT' THEN select ((EXTRACT (Y FROM (select dat_fecha from autoservicios.toi019_acumulado where nu_co_empleado = NEW.nu_co_empleado order by dat_fecha ASC LIMIT 1 offset 0 )) -1) || '-' || (select case when extract(month from dat_fecha) = 1 then '12' else extract(month from dat_fecha) - 1 end from autoservicios.toi019_acumulado where nu_co_empleado = NEW.nu_co_empleado order by dat_fecha ASC LIMIT 1 offset 0 ) || '-' || '01') as fecha_nueva; SELECT co_acumulado INTO codigo FROM autoservicios.toi019_acumulado WHERE nu_co_empleado = NEW.nu_co_empleado AND (dat_fecha < fecha_nueva); DELETE FROM autoservicios.tr001_acumulado_concepto WHERE nu_co_acumulado = codigo; DELETE FROM autoservicios.toi019_acumulado WHERE co_acumulado = codigo; END IF; RETURN NEW; END; $BODY$ LANGUAGE 'plpgsql' VOLATILE; ALTER FUNCTION autoservicios.historico_sobres() OWNER TO postgres; ALTER FUNCTION autoservicios.historico_sobres() OWNER TO postgres; CREATE TRIGGER historico AFTER INSERT ON autoservicios.toi019_acumulado FOR EACH ROW EXECUTE PROCEDURE autoservicios.historico_sobres(); ¿POR QUÉ ME DA ESE ERROR???? -- ----------------------------------------------------------- ------------------------ Virginia ------------------------ -----------------------------------------------------------