Rodrigo... no desesperes jeje
Ya tienes las herramientas para extraer la información de las tablas. Ya sabes que se hace con record o con otro tipo de variable pero asignada con la clusula into.
Eso lo haces bien.
Que veo en tu problema?
Tienes varias tablas y debes establecer la jerarquía de las mismas para saber de que tablas hay que borrar primero los datos. Por lo que veo en la estructura de tus tablas, debes primero extraer de la tabla familia_x_hijos el id_familia,rut_padre y rut_madre.
Luego preguntas el numerodeniños para esa familia (Eso ya lo haces aca IF nino.numhijos = 0 then) si el valor es cero, con el valor de rut_padre,rut_madre y id_familia puedes borrar los respectivos registros de las tablas.
Ahora si a la practica. Esto no lo he probado pero creo que te servirá.
Código sql:
Ver originalCREATE OR REPLACE FUNCTION eliminar_familia() RETURNS TRIGGER AS
$$
DECLARE
nino record;
BEGIN
SELECT INTO nino id_familia,rut_padre,rut_madre,COUNT(id_familia) AS numhijos FROM familia_x_hijos WHERE id_nino=OLD.id_nino;
IF nino.numhijos = 0 THEN
DELETE FROM familia WHERE id_familia=nino.id_familia;
DELETE FROM padre WHERE rut_padre=nino.rut_padre;
DELETE FROM madre WHERE rut_madre=nino.rut_madre;
END IF;
RETURN OLD;
END;
$$
LANGUAGE 'plpgsql';
CREATE TRIGGER borrar_familia_antes_d_menor BEFORE
DELETE ON nino
Segun entiendo la tabla familia cuenta con _padre
Fijate que la variable record, almacena todos los elementos de la consulta, por esto, es posible acceder con el record a lo que llamemos en la consulta.
Cuentanos como te va.