Ver Mensaje Individual
  #1 (permalink)  
Antiguo 27/07/2009, 22:46
r0xdrig0
 
Fecha de Ingreso: diciembre-2007
Mensajes: 385
Antigüedad: 16 años, 11 meses
Puntos: 0
Como modificar este trigger??????

Hola amigos, aca les planteo el siguiente problema q tengo y no se como hacerlo, este es:

tengo un trigger el cual me activa o desactiva a las familias dependiendo si esta familia sigue teniendo o no hijos, mio problema es q antes yo eliminaba o no a la familia dependiendo si esta seguia teniendo hijos activos o inactivos, pero requerimientos de la empresa tuve q hacer auditoria de toda la informacion de mi bd, bueno el trigger q me eliminaba a la familia dependiendo si seguia teniendo o no hijos lo he tratado de modificar para q en vez q me elimine a la familia de la bd me la active o desactive en el sistema dependiendo si sigue teniendo hijos o no, bueno el trigger en cuestion es este:
Código:
CREATE OR REPLACE FUNCTION cancelar_familia_antes_de_nino() returns TRIGGER AS
   
            $$
 
         DECLARE

       
   
            ninos record;
     
 
            padres record;
 
       
 
               
 
         
 
            BEGIN
 
       
 
            SELECT INTO ninos T1.IF AS id_familia, count(fxh.id_familia) AS numhijos FROM
 
       
 
            (SELECT id_familia AS IF FROM familia_x_hijos WHERE id_nino=new.id_nino)AS T1
 
       
 
            INNER JOIN familia_x_hijos fxh ON T1.IF = fxh.id_familia
 
       
 
            GROUP BY T1.IF;
  
           IF old.estado='ACTIVO' then
 
            UPDATE familia_x_hijos SET estado = 'DESACTIVADO' WHERE id_nino=NEW.id_nino;
 
       
        ELSEIF   old.estado='DESACTIVADO' then
             
          UPDATE familia_x_hijos SET estado = 'ACTIVO' WHERE id_nino=NEW.id_nino;
       
 
            IF ninos.numhijos = 1 then  
 
                IF old.estado='ACTIVO' then
 
              SELECT INTO padres rut_padre,rut_madre FROM familia WHERE id_familia=id_familia;
 
       
 
              UPDATE familia SET estado = 'DESACTIVADO' WHERE id_familia=id_familia;
 
       
 
              UPDATE padre SET estado = 'DESACTIVADO' WHERE rut_padre=rut_padre;
 
       
 
              UPDATE madre  SET estado = 'DESACTIVADO' WHERE rut_madre=rut_madre;  


             ELSEIF   old.estado='DESACTIVADO' then

                


                  UPDATE familia SET estado = 'ACTIVO' WHERE id_familia=id_familia;
 
       
 
                  UPDATE padre SET estado = 'ACTIVO' WHERE rut_padre=rut_padre;
 
       
 
                  UPDATE madre  SET estado = 'ACTIVO' WHERE rut_madre=rut_madre; 

                  
 
 


            END IF;  
       
            END IF;            

            END IF;      
  
        
  
            RETURN new;
  
       end;
  
           
  
       
  
             
  
       
  
            $$
  
       
  
            LANGUAGE 'plpgsql';
  
       
  
            CREATE TRIGGER cancelar_familia_antes_de_nino before
  
       
  
               UPDATE ON nino
  
       
  
               FOR each row execute procedure cancelar_familia_antes_de_nino();
como ven tengo un conteo en el q reviso si la familia tiene un unico hijo y este es desactivado la familia igual pasa al mismo estado, pero como ahora por razones de auditoria solo tengo q activar o desactivar a la familia, en ningun momento se eliminaran sus hijos solo pasaran a estado desactivo por lo q la familia nunca pasaria a estado desactivado aun ya no tenga ningun hijo, mi pregunta ahora es como puedo modificar el conteo para q en vez q me cuente el id_familia me vea en el momento en q el ultimo hijo de esa familia pase a estado desactivado, dicha familia pase al mismo estado???? se entiende???.... antes yo eliminaba a los niños y ahora solo los desactivo, como puedo arreglar el conteo del trigger para q en vez de contarme el id_familia me cuente o me vea si el ultimo hijo de dicha familia pasa estado desactivado su familia igual pase al mismo estado??? espero me hallan entendido amigos ya q estoy super aproblemado con este lio, no se como resolverlo..... agradeceria mucho su ayuda de verdad!!!!!!!!.... de antemano gracias..... bye