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

From: Pablo Braulio <brulics(at)gmail(dot)com>
To: "Linder Poclaba" <linder(dot)poclaba(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-22 15:29:33
Message-ID: 200605221729.33543.brulics@gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

El Lunes, 22 de Mayo de 2006 16:48, Linder Poclaba escribió:
> No soluciona tu problema puesto que pusiste una restriccion "ON DELETE
> CASCADE" sobre el campo empleado y esta restriccion borra automaticamente
> todas la tuplas referenciadas en la tabla fechas_personal, lo cual esta
> activando el trigger que esta en fechas_personal que no deja borrar todas
> la tuplas para el empleado X.
>

Bueno al final lo he solicitado del siguiente modo.

No se si será el modo mas adecuado, por lo que agradecería comentarios/ayuda.

/*Comprueba la existencia del empleado en PERSONAL y de existir no deja borrar
todas las fechas*/
CREATE OR REPLACE FUNCTION checkBorrarFechas() RETURNS TRIGGER AS $$
BEGIN
/*Comprueba si existe el empleado*/
IF (select id from personal where id = OLD.empleado) = OLD.empleado
THEN
/*Cuenta las lineas de fechas. De sólo quedar una no permite borrarlas.*/
IF (select count(*) from fechas_personal where empleado = OLD.empleado) = 1
THEN
RAISE EXCEPTION 'No se puede borrar todas las fechas.';
RETURN NULL;
END IF;
RETURN OLD;
END IF;
RETURN OLD;
END;
$$ language plpgsql;
CREATE TRIGGER checkBorrarFechas BEFORE DELETE ON fechas_personal FOR EACH ROW
EXECUTE PROCEDURE checkBorrarFechas();

Gracias a todos por la ayuda y paciencia.

--
Saludos.
Pablo.

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Daniel Rojas 2006-05-22 15:47:42 consultas en la lista
Previous Message josue 2006-05-22 15:28:39 Re: Llamado a funcion con visual foxpro