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 13:48:04
Message-ID: 200605221548.04842.brulics@gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

El Lunes, 22 de Mayo de 2006 15:22, Linder Poclaba escribió:
> solo te faltaba retornar null cuando solo exista 1 tupla para ese empleado
> en fechas_personal :) perdon me falta mencionar eso.
>
> On 5/22/06, Linder Poclaba <linder(dot)poclaba(at)gmail(dot)com> wrote:
> > Lo que vos quieres es que no se borren todas las filas de cada
> > empleado que quede por lo menos una en la tabla fechas_personal
> > cierto? si es así esta bien tu restricción.
> >
> > IF (select count(*) from fechas_personal where empleado = OLD.empleado) =
> > 1 THEN
> >      RAISE EXCEPTION 'No se puede borrar todas las fechas.';
> >      RETURN NULL;
> > ELSE
> >      RETURN OLD;
> > END IF;

Pero no soluciona el problema.

La tabla FECHAS_PERSONAL tiene esta estructura:

\d fechas_personal
Tabla «public.fechas_personal»
Columna | Tipo | Modificadores
------------+-----------------------+--------------------------------------------------------------
id | integer | not null default
nextval('fechas_personal_id_seq'::regclass)
empleado | integer | not null
alta | date | not null
baja | date |
comentario | character varying(50) |
Índices:
«fechas_personal_pkey» PRIMARY KEY, btree (id)
Restricciones CHECK:
«fechas_personal_check» CHECK (alta <= baja)
Restricciones de llave foránea:
«fechas_personal_empleado_fkey» FOREIGN KEY (empleado) REFERENCES
personal(id) ON UPDATE CASCADE ON DELETE CASCADE

Como puedes ver el campo EMPLEADO es FOREIGN KEY del campo ID en PERSONAL.

Por lo que al hacer un DELETE en la tabla PERSONAL, debería borrar datos en
FECHAS_PERSONAL. Pero esto es lo que ocurre con el trigger puesto:

# DELETE FROM personal WHERE id = 2146;
ERROR: No se puede borrar todas las fechas.
CONTEXT: sentencia SQL: «DELETE FROM ONLY "public"."fechas_personal"
WHERE "empleado" = $1»

La restricción funciona, pero no como deseo.

Si se aplica un DELETE en PERSONAL, necesito que borre los datos en
FECHAS_PERSONAL.

Gracias de todos modos por el comentario.
--
Saludos.
Pablo.

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Linder Poclaba 2006-05-22 14:48:06 Re: Función para controla un campo de la última fila.
Previous Message Agustin Casiva 2006-05-22 13:43:30 Ruby Argentina