Re: ayuda con trigger

From: Virginia <mavir78(at)gmail(dot)com>
To: Emanuel Calvo Franco <postgres(dot)arg(at)gmail(dot)com>
Cc: Ayuda <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: ayuda con trigger
Date: 2009-06-22 16:43:12
Message-ID: 874791d0906220943j4a31954fr8bf54393c0bc8a2e@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

El 23 de junio de 2009 10:25, Emanuel Calvo Franco
<postgres(dot)arg(at)gmail(dot)com>escribió:

> El 21 de junio de 2009 19:38, Virginia<mavir78(at)gmail(dot)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 ------------------------
-----------------------------------------------------------

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Alvaro Herrera 2009-06-22 16:45:40 Re: Duda con modelado de Datos + Crear Función
Previous Message Oswaldo Hernández 2009-06-22 16:01:59 Re: excepcion en postgres