From: | motum hesa <motums(at)gmail(dot)com> |
---|---|
To: | Lista PostgreSQL <pgsql-es-ayuda(at)postgresql(dot)org> |
Subject: | Re: Problema con Funcion Llamada por Trigger |
Date: | 2009-11-25 23:52:28 |
Message-ID: | 3e36433a0911251552j33046a90x213174b7ebddc035@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
Si es posible intenta con AFTER en vez de BEFORE en la creacion del trigger
2009/11/25 Jorge Jacques <jorge(at)eskalonnetwork(dot)com>:
> Hola, beun día
>
>
>
> Tengo un problema con una función, que al ejecutarse por un Trigger devuelve
> NULL y no encuentro la razón.
>
> ---
>
> CREATE OR REPLACE FUNCTION "public"."actua_desref" () RETURNS trigger AS
>
> $BODY$
>
> DECLARE
>
> empeno record;
>
> fechahoy date;
>
> fechaven date;
>
> diasm int;
>
> inmo float;
>
> BEGIN
>
> IF TG_OP='INSERT' THEN
>
> IF (NEW.tipo = 1 AND NEW.concepto = 1) OR (NEW.tipo = 1 AND
> NEW.concepto = 2) THEN
>
> SELECT INTO empeno fecha_venta, prestamo FROM empenos WHERE
> id=NEW.id;
>
> fechahoy = current_date;
>
> fechaven = TIMESTAMP WITH TIME ZONE 'epoch' + empeno.fecha_venta
> * INTERVAL '1 second';
>
> diasm = fechahoy - fechaven;
>
> inmo = ((0.5 * empeno.prestamo::float)/100) * diasm;
>
> NEW.cantidad = NEW.cantidad::float + inmo;
>
> return NEW;
>
> END IF;
>
> END IF;
>
> END
>
> $BODY$
>
> LANGUAGE 'plpgsql'
>
> ---
>
> CREATE TRIGGER "calc_inmo"
>
> BEFORE INSERT ON caja FOR EACH ROW
>
> EXECUTE PROCEDURE actua_desref()
>
> ---
>
>
>
> Al hacer un Insert Obtengo un:
>
> SQL Error: ERROR: null value in column “cantidad” violates not-null
> constraint.
>
>
>
> Esto me idica que el registro que regresa la funcion trae el campo cantidad
> a NULL, y no deberia ser así.
>
>
>
> Adicional a esto tengo una funcion que hice para probar que todo funcione
> correctamente (independientemente de esta) y al llamarla si me ejecuta
> correctamente:
>
>
>
> ---
>
> CREATE OR REPLACE FUNCTION "public"."pruebas" () RETURNS float8 AS
>
> $BODY$
>
> DECLARE
>
> empeno record;
>
> fechahoy date;
>
> fechaven date;
>
> diasm int;
>
> inmo float;
>
> BEGIN
>
> SELECT INTO empeno fecha_venta, prestamo FROM empenos WHERE id=1618;
>
> fechahoy = current_date;
>
> fechaven = TIMESTAMP WITH TIME ZONE 'epoch' + empeno.fecha_venta *
> INTERVAL '1 second';
>
> diasm = fechahoy - fechaven;
>
> inmo = ((0.5 * empeno.prestamo::float)/100) * diasm;
>
>
>
> return inmo;
>
> END
>
> $BODY$
>
> LANGUAGE 'plpgsql'
>
> ---
>
>
>
> Alguna sugerencia?
>
> Gracias!!!
> Saluos!
>
>
From | Date | Subject | |
---|---|---|---|
Next Message | Jorge Jacques | 2009-11-26 00:39:11 | Ejecutar función antes de un Select |
Previous Message | Guido Barosio | 2009-11-25 23:23:50 | Re: PostgreSQL y Oracle |