Re: Función para controla un campo de la última fila.

From: "linder poclaba lazaro" <linder(dot)poclaba(at)gmail(dot)com>
To: "Pablo Braulio" <brulics(at)gmail(dot)com>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Función para controla un campo de la última fila.
Date: 2006-05-21 21:10:38
Message-ID: 5aa69e1b0605211410p4f1b1a94ka9969785e5e085f4@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Hola Pablo bueno esta viendo tu pregunta y creo que deberias hacer algunas
modificaciones:

IF (SELECT max(id) FROM fechas_personal WHERE empleado = OLD.empleado) !=
OLD.id THEN
RAISE NOTICE 'Existen fechas posteriores. No se puede borrar
registro.';
RETURN NULL;
ELSE
RETURN OLD;
END IF;

No olvides que es una funcion y tienes que retornar algo, los triggers a
nivel renglon lanzados antes o before pueden devolver null, para avisar al
administrador de triggers que debe saltar el resto de las operaciones para
este renglon.

On 5/21/06, Pablo Braulio <brulics(at)gmail(dot)com> wrote:
>
> Hola a todos.
>
> Estoy diseñando una función para que me controle si la línea que se borra
> es
> la última. O diciéndolo de otro modo, que sólo permita borrar la última
> línea.
>
> Tengo esta tabla:
> id | empleado | alta | baja | comentario
> ------+----------+------------+------------+------------
> 1044 | 2139 | 2006-01-01 | 2006-03-01 |
> 1045 | 2139 | 2006-04-01 | |
>
> Lo que quiero hacer es que al hacer un delete del registro que no es el
> último
> (id 1044) muestre un error y no deje borrarlo.
>
> Esta es la función:
>
> CREATE OR REPLACE FUNCTION borrar_baja_empleados() RETURNS TRIGGER AS $$
> BEGIN
> IF (select max(id) from fechas_personal where empleado =
> OLD.empleado) >
> OLD.id
> THEN
> RAISE EXCEPTION 'Existen fechas posteriores. No se puede
> borrar registro.';
> END IF;
> END;
>
> $$ language plpgsql;
>
> CREATE TRIGGER borrar_baja_empleados BEFORE DELETE ON fechas_personal FOR
> EACH
> ROW EXECUTE PROCEDURE borrar_baja_empleados();
>
> Con esto no me deja borrar ningún registro. Pero si trato de borrar el
> último
> tampoco me deja.
>
> Si intento borrar el anterior, muestra:
> ERROR: Existen fechas posteriores. No se puede borrar registro
>
> Estupendo.
>
> Pero si trato de borrar el último.
> ERROR: control reached end of trigger procedure without RETURN CONTEXT:
> PL/pgSQL function "checkborrarfechas"
>
> No se que está fallando.
> --
> Saludos.
> Pablo.
>
> ---------------------------(fin del mensaje)---------------------------
> TIP 6: ¿Has buscado en los archivos de nuestra lista de correo?
>
> http://archives.postgresql.org/pgsql-es-ayuda
>

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Ruben. D. 2006-05-21 22:23:21 Problema al instalar en Ubuntu
Previous Message Pablo Braulio 2006-05-21 09:04:17 Función para controla un campo de la última fila.