Ver Mensaje Individual
  #46 (permalink)  
Antiguo 25/06/2009, 19:43
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..
Dicho y hecho. El error estaba en consulta que contaba los id_familia. Como hacia referencia a un solo niño, unicamente contaba 1 solo registro que contaba, por lo que siempre era 1 y eliminaba los datos de las tablas sin respetar el if.

Te pongo el nuevo trigger que corrige la consulta y devuelve los datos esperados.

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

La nueva consulta, realmente cuenta si existen mas niños registrados a la familia del niño a borrar.

Espero esta vez si funcione perfecto.

un saludo.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming