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:
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 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();