Skip site navigation (1) Skip section navigation (2)

Problema con Funcion Llamada por Trigger

From: "Jorge Jacques" <jorge(at)eskalonnetwork(dot)com>
To: <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Problema con Funcion Llamada por Trigger
Date: 2009-11-25 18:14:03
Message-ID: 000c01ca6dfb$149ddf70$4001a8c0@usuariobe218b4 (view raw or flat)
Thread:
Lists: pgsql-es-ayuda
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!

 

Responses

pgsql-es-ayuda by date

Next:From: Ing . Marcos Luís Ortíz ValmasedaDate: 2009-11-25 18:50:05
Subject: Re: Ejecutar función antes de un Select
Previous:From: Ing . Marcos Luís Ortíz ValmasedaDate: 2009-11-25 18:04:59
Subject: Re: consulta con like

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group