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