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

From: Pablo Braulio <brulics(at)gmail(dot)com>
To: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Función para controla un campo de la última fila.
Date: 2006-05-21 09:04:17
Message-ID: 200605211104.18567.brulics@gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

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.

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message linder poclaba lazaro 2006-05-21 21:10:38 Re: Función para controla un campo de la última fila.
Previous Message Jorge Alejandro Adell 2006-05-21 04:20:55 Re: compilacion (bison)