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

Rodrigo... Insisto....
Debes sentarte y analizar cada proceso que ejecutas y el orden de las operaciones que realizas.
Cada vez veo nuevas inconsistencias, pero debes ser tu, con los conceptos que hemos aplicado, la persona que debe analizar como hacer uso de las herramientas en tu propio problema. Tu mas que nadie, sabes cmo funciona tu sistema y que es lo que debes hacer.

Hay algo que no me cuadra...
tienes dos triggers bajo la acción before delete on nino

Por que no unes los 2 triggers en uno?
Código sql:
Ver original
  1. CREATE OR REPLACE FUNCTION eliminar_antes_de_nino() RETURNS TRIGGER AS
  2.  
  3. $$
  4. DECLARE
  5.             nino record;
  6.             padres record;
  7. BEGIN
  8. DELETE FROM actividad WHERE OLD.id_nino=id_nino;
  9.  
  10. DELETE FROM beneficio WHERE OLD.id_nino=id_nino;
  11.  
  12. DELETE FROM educacion WHERE OLD.id_nino=id_nino;
  13.  
  14. DELETE FROM nino_vive_en WHERE OLD.id_nino=id_nino;
  15.  
  16. DELETE FROM salud WHERE OLD.id_nino=id_nino;
  17.  
  18. DELETE FROM trabajo WHERE OLD.id_nino=id_nino;
  19.  
  20. SELECT INTO nino id_familia,COUNT(id_familia) AS numhijos FROM familia_x_hijos WHERE id_nino=OLD.id_nino GROUP BY id_familia;
  21.  
  22.   IF nino.numhijos = 0 THEN  
  23.      SELECT INTO padres rut_padre,rut_madre FROM familia WHERE id_familia=nino.id_familia;
  24.      DELETE FROM familia WHERE id_familia=nino.id_familia;
  25.      DELETE FROM padre WHERE rut_padre=padres.rut_padre;
  26.      DELETE FROM madre WHERE rut_madre=padres.rut_madre;
  27.   END IF;
  28.  
  29. DELETE FROM familia_x_hijos WHERE OLD.id_nino=id_nino;
  30.  
  31. RETURN OLD;
  32. END;
  33. $$
  34.  
  35. LANGUAGE 'plpgsql';
  36.  
  37. CREATE TRIGGER borrar_todo_antes_de_nino BEFORE
  38. DELETE ON nino
  39. FOR each ROW EXECUTE PROCEDURE eliminar_antes_de_nino();

Espero esta vez si te funcione.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming