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

Responder a