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