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 -- TIP 8: explain analyze es tu amigo