Ya vi que tratabas de hacer. Ya entendí rl porque anteponias las palabras padres y ninos.
Prueba este trigger.
Código sql:
Ver originalCREATE 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;
UPDATE familia_x_hijos SET estado = 'DESACTIVADO' WHERE id_nino=NEW.id_nino;
IF ninos.numhijos = 1 THEN
SELECT INTO padres rut_padre,rut_madre FROM familia WHERE id_familia=ninos.id_familia;
UPDATE familia SET estado = 'DESACTIVADO' WHERE id_familia=ninos.id_familia;
UPDATE padre SET estado = 'DESACTIVADO' WHERE rut_padre=padres.rut_padre;
UPDATE madre SET estado = 'DESACTIVADO' WHERE rut_madre=padres.rut_madre;
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();
Cita: en q estoy fallando ahora amigos??? porfavor de verdad ruego su ayuda amigos!!!... de antemano gracias.... bye
Rodrigo
Me tomaré unos minutos para explicarte el funcionamiento de las variables record y cual es su utilidad dentro de una función o procedimiento almacenado. Cualquier duda, puedes preguntar nuevamente.
Un trigger se define como un disparador de eventos y es posible acceder a las variables que son ejecutadas en cada sentencia. Por ejemplo estamos hablando de una tabla nino y cuando se inserta en dicha tabla se puede jugar con los valores new.atributo y old.atributo dependiendo del caso.
Para tu caso, es necesario tener otras variables con base en el id_nino, como lo son rut_padre y rut_madre. Como estas variables no son proporcionadas por el evento disparado, es necesario recurrir a las variables record para obtener sus valores. Sin embargo, estas ya no son variables que tienen los atributos new y old para su manipulación. Por esta razón el trigger debe quedar así.
un saludo.