Ver Mensaje Individual
  #6 (permalink)  
Antiguo 27/07/2009, 10:54
r0xdrig0
 
Fecha de Ingreso: diciembre-2007
Mensajes: 385
Antigüedad: 17 años
Puntos: 0
Respuesta: Problema al habilitar/deshabilitar triggers en postgre 8.2

Hola huesos, perfecto gracias por tu ayuda ya los uni y me funcionan bien, ahora probare lo de activar y desactivar el trigger... cualquier cosa vuelvo a postear, pero aqui dejo el trigger q uni y me funciona perfecto.... lo dejo para q si a alguien le puede servir de ayuda.... :

Código:
CREATE OR REPLACE FUNCTION cancelar_familia_antes_de_nino() returns TRIGGER AS
   
            $$
 
         DECLARE

       
   
            ninos record;

            padres record;
 
            BEGIN
 
       
       
 
     IF old.estado='ACTIVO' then

      UPDATE actividad SET estado = 'DESACTIVADO' WHERE id_nino=NEW.id_nino;
 
      UPDATE beneficio SET estado = 'DESACTIVADO' WHERE id_nino=NEW.id_nino;
  
      UPDATE educacion SET estado = 'DESACTIVADO' WHERE id_nino=NEW.id_nino;
 
      UPDATE nino_vive_en SET estado = 'DESACTIVADO' WHERE id_nino=NEW.id_nino;
 
      UPDATE salud SET estado = 'DESACTIVADO' WHERE id_nino=NEW.id_nino;
 
      UPDATE trabajo SET estado = 'DESACTIVADO' WHERE id_nino=NEW.id_nino;

      UPDATE visita SET estado = 'DESACTIVADO' WHERE id_nino=NEW.id_nino;
 
      
 
        ELSEIF   old.estado='DESACTIVADO' then
 

        UPDATE actividad SET estado = 'ACTIVO' WHERE id_nino=NEW.id_nino;
 
      UPDATE beneficio SET estado = 'ACTIVO' WHERE id_nino=NEW.id_nino;
  
      UPDATE educacion SET estado = 'ACTIVO' WHERE id_nino=NEW.id_nino;
 
      UPDATE nino_vive_en SET estado = 'ACTIVO' WHERE id_nino=NEW.id_nino;
 
      UPDATE salud SET estado = 'ACTIVO' WHERE id_nino=NEW.id_nino;
 
      UPDATE trabajo SET estado = 'ACTIVO' WHERE id_nino=NEW.id_nino;

      UPDATE visita SET estado = 'ACTIVO' WHERE id_nino=NEW.id_nino;
       

      END IF;




 
            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; 

                    
 
 


                  SELECT INTO ninos id_nino FROM nino WHERE id_nino=NEW.id_nino;



            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();
ese es bueno cualquier cosa vuelvo a postear .... gracias nuevamente.... bye