Ver Mensaje Individual
  #35 (permalink)  
Antiguo 23/06/2009, 17:50
r0xdrig0
 
Fecha de Ingreso: diciembre-2007
Mensajes: 385
Antigüedad: 16 años, 4 meses
Puntos: 0
Respuesta: como hacer este trigger????

hola amigos, especialmente huesos he seguido intentando pero no he podido eliminar los datos de las tablas padre, madre y familia, el orden de eliminacion debe ser este:
1- eliminar datos del niño y la familia de la tabla familia_X_hijos
2- eliminar datos del padre y la madre desde la tabla familia
3- eliminar los datos de los padres de las tablas padre y madre
4- por ultimo eliminar datos del niño desde la tabla niño
este es el orden y mi triggerq tengo es:

Código:
 CREATE OR REPLACE FUNCTION eliminar_antes_de_nino() returns TRIGGER AS
 
       
  
      $$
   
      declare
   
                  nino record;
   
                  padres record;
  
      Begin
   
      DELETE FROM actividad WHERE old.id_nino=id_nino;
   
       
 
      DELETE FROM beneficio WHERE old.id_nino=id_nino;
 
       
  
      DELETE FROM educacion WHERE old.id_nino=id_nino;
 
       
  
      DELETE FROM nino_vive_en WHERE old.id_nino=id_nino;
  
       
        DELETE FROM salud WHERE old.id_nino=id_nino;
  
       
  
      DELETE FROM trabajo WHERE old.id_nino=id_nino;
  
       
  
      SELECT INTO nino id_familia,count(id_familia) AS numhijos FROM familia_x_hijos WHERE id_nino=old.id_nino GROUP BY id_familia;
  
       
  
        IF nino.numhijos = 0 then  
  
           SELECT INTO padres rut_padre,rut_madre FROM familia WHERE id_familia=nino.id_familia;
 
           DELETE FROM familia WHERE id_familia=nino.id_familia;
  
           DELETE FROM padre WHERE rut_padre=padres.rut_padre;
  
           DELETE FROM madre WHERE rut_madre=padres.rut_madre;
 
        end IF;
  
       
  
      DELETE FROM familia_x_hijos WHERE old.id_nino=id_nino;
  
       
  
      RETURN old;
  
      End;
  
      $$
  
       
  
      LANGUAGE 'plpgsql';
 
       
  
      CREATE TRIGGER borrar_todo_antes_de_nino before
  
      DELETE ON nino
  
      FOR each row execute procedure eliminar_antes_de_nino();
este es mi trigger q me lo hace, pero solo logra eliminarme los datos de la tabla familia_x_hijos y no me elimina los datos de la tablas familia, padre y madre, lo q no me explico es pq el SELECT INTO padres rut_padre,rut_madre FROM familia WHERE id_familia=nino.id_familia; no me permite borrar los datos de las tabla familia, padre y madre pq no me toma esta parte???;

SELECT INTO padres rut_padre,rut_madre FROM familia WHERE id_familia=nino.id_familia;

DELETE FROM familia WHERE id_familia=nino.id_familia;

DELETE FROM padre WHERE rut_padre=padres.rut_padre;

DELETE FROM madre WHERE rut_madre=padres.rut_madre;

en q estoy fallando??? como dije anteriormente el orden debe ser
primero eliminar los datos del niño y de la familia a la q pertenece desde la tabla familia_x_hijos, segundo debe eliminarce los datos de la tabla familia donde esta el id de la familia y el rut del padre y la madre q pertenecen a esa familia y por ultimo deben eliminarce los datos del padre y la madre de sus respectivas tablas, porfavor amigos diganme en q estoy fallando porfavor!!!! llevo dias intentando esto y no logro solucionarlo porfavor estoy desesperado!!!! ruego su ayuda.... de antemano gracias.... bye