Ver Mensaje Individual
  #25 (permalink)  
Antiguo 22/06/2009, 13:57
Avatar de huesos52
huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: como hacer este trigger????

Rodrigo... no desesperes jeje

Ya tienes las herramientas para extraer la información de las tablas. Ya sabes que se hace con record o con otro tipo de variable pero asignada con la clusula into.
Eso lo haces bien.

Que veo en tu problema?
Tienes varias tablas y debes establecer la jerarquía de las mismas para saber de que tablas hay que borrar primero los datos. Por lo que veo en la estructura de tus tablas, debes primero extraer de la tabla familia_x_hijos el id_familia,rut_padre y rut_madre.
Luego preguntas el numerodeniños para esa familia (Eso ya lo haces aca IF nino.numhijos = 0 then) si el valor es cero, con el valor de rut_padre,rut_madre y id_familia puedes borrar los respectivos registros de las tablas.

Ahora si a la practica. Esto no lo he probado pero creo que te servirá.

Código sql:
Ver original
  1. CREATE OR REPLACE FUNCTION eliminar_familia() RETURNS TRIGGER AS
  2.  
  3.       $$
  4.  
  5.       DECLARE
  6.    
  7.       nino record;
  8.  
  9.       BEGIN
  10.  
  11.       SELECT INTO nino id_familia,rut_padre,rut_madre,COUNT(id_familia) AS numhijos FROM familia_x_hijos WHERE id_nino=OLD.id_nino;
  12.    
  13.       IF nino.numhijos = 0 THEN  
  14.  
  15.         DELETE FROM familia WHERE id_familia=nino.id_familia;
  16.         DELETE FROM padre WHERE rut_padre=nino.rut_padre;
  17.         DELETE FROM madre WHERE rut_madre=nino.rut_madre;
  18.  
  19.  
  20.       END IF;
  21.  
  22.       RETURN OLD;
  23.  
  24.       END;
  25.  
  26.       $$
  27.  
  28.       LANGUAGE 'plpgsql';
  29.  
  30.        
  31.  
  32.       CREATE TRIGGER borrar_familia_antes_d_menor BEFORE
  33.  
  34.       DELETE ON nino

Segun entiendo la tabla familia cuenta con _padre

Fijate que la variable record, almacena todos los elementos de la consulta, por esto, es posible acceder con el record a lo que llamemos en la consulta.

Cuentanos como te va.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming