Ver Mensaje Individual
  #4 (permalink)  
Antiguo 26/07/2009, 23:02
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 gracias por tu respuesta, y si tengo dos triggers bueno tres estos son:
1- el q me actualiza el estado de la familia y de los padres, (los activa y los desactiva) y el otro es el q me activa o desactiva los restantes datos de niñocomo por ejemplo; salud, educacion trabajo etc... estos son mis dos trggers:

TRIGGER QUE ACTIVA O DESACTIVA FAMILIA, PADRE Y MADRE:
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();
Y ESTE ES EL Q ME ACTIVA O DESACTIVA LOS RESTANTES DATOS DEL NIÑO (EDUCACION, SALUD, TRABAJO... ETC)
Código:
CREATE OR REPLACE FUNCTION cancelar_antes_de_nino() returns TRIGGER AS
  
      $$
   DECLARE
 
       
  
      ninos record;
  
      padres record;
  
         
   
      BEGIN
   
     SELECT INTO ninos id_nino FROM nino WHERE id_nino=NEW.id_nino;
       
 
     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;
  
      
      RETURN new;
  
      End;
  
       
 
      $$
 
      LANGUAGE 'plpgsql';
 
      CREATE TRIGGER cancelar_todo_antes_de_nino before
 
         UPDATE ON nino
 
         FOR each row execute procedure cancelar_antes_de_nino();
ahora mi pregunta es como deberia hacerlo para juntar ambos triggers en solo uno??? para q asi me funcione la activacion o desactivacion del trigger????? PORFAVOR amigos ruego su ayuda/guia para poder solucionar esto, ya q me tiene truncadicimo!!!! porfavor!!!!!..... de antemano gracias.... bye...

PD: sorry a todos en especial a huesos porla pasiencia, de verdad mi intension no es molestar ruego disculpen las molestias.