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 ------------------------
-----------------------------------------------------------

Responder a