Re: Problema con Funcion Llamada por Trigger

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

In response to

Browse pgsql-es-ayuda by date

  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