Ver Mensaje Individual
  #22 (permalink)  
Antiguo 18/06/2009, 17:45
r0xdrig0
 
Fecha de Ingreso: diciembre-2007
Mensajes: 385
Antigüedad: 16 años, 11 meses
Puntos: 0
Respuesta: como hacer este trigger????

hola huesos, la estructura de mi tabla niño es
|id_nino (pk)| |nombre_nino| apellido_nino| etc...|

lo q necesito es q se me elimine a los padres una vez q se elimine al niño y ya la familia no tenga mas hijos pq hasta ahora solo me elimina las demas tablas pero no me elimina los datos de la tabla familia ni de las tablas padre y madre cuando la familia ya no tiene mas hijos y por lo tanto deja de existir.... las estructura de mis tablas es:
tabla familia:
|id_familia(pk) |rut_madre (fk)| rut_padre (fk)|

tabla padre:
|rut_padre|nombre_padre|etc...|

tabla madre:

|rut_madre (pk)| nombre_madre| etc...|

tabla familia_x_hijos

|id_familia (pk) (fk tabla familia)| id_nino (pk) (fk tabla nino)|

lo q no he podido lograr es q se elimine a la familia en la tabla familia y al padre y a la madre en sus respectivas tablas una vez q se elimina al niño y la familia ya no tiene mas hijos, logro eliminar todo en las demas tablas pero menos en esas q nombre, (ojala me entiendan) los triggers q qtengo para esto son:
TRIGGER ELIMINAR ANTES DE NIÑO:
Código:
Create or replace function eliminar_antes_de_nino() returns trigger as

'
declare
Begin
delete from actividad where old.id_nino=id_nino;

delete from beneficio where old.id_nino=id_nino;

delete from educacion where old.id_nino=id_nino;

delete from nino_vive_en where old.id_nino=id_nino;

delete from salud where old.id_nino=id_nino;

delete from trabajo where old.id_nino=id_nino;

delete from familia_x_hijos where old.id_nino=id_nino;


return old;
End;
'

language 'plpgsql';

create trigger borrar_todo_antes_de_nino before
delete on nino
for each row execute procedure eliminar_antes_de_nino();
este trigger me elimina los datos de todas las tablas antes de borrar al niño, pero no me borra familia_x_hijos

TRIGGER BORRAR FAMILIA ANTES DE NIÑO:
Código:
CREATE OR REPLACE FUNCTION eliminar_familia() returns TRIGGER AS
  
      $$
  
      declare
   
      nino record;
  
      Begin
  
      SELECT INTO nino count(id_familia) AS numhijos FROM familia_x_hijos WHERE id_nino=old.id_nino;
   
      IF nino.numhijos = 0 then  
  
        DELETE FROM familia WHERE old.id_familia=id_familia;
  
      end IF;
 
      RETURN old;
  
      End;
 
      $$
 
      LANGUAGE 'plpgsql';
 
       
  
      CREATE TRIGGER borrar_familia_antes_d_menor before
  
      DELETE ON nino
este trigger me elimina a la familia una vez q la familia ya no tiene mas hijos, pero no me funciona, y mi pregunta es como lo tengo q hacer para q una vez q me borre a la familia en caso q no tenga mas hijos, como borro al padre y a la madre de sus respectivas tablas, ya q como dije anteriormente logro borrar todos los datos de las demas tablas excepto los datos de las tablas padre, madre, familia_x_hijos y la tabla familia. como lo debo hacer en cuanto a codigo q debo agregar y como??? porfavor amigos llevo mucho tiempo tratando de hacerlo pero no lo logro RUEGO SU AYUDA AMIGOS!!!!.... de antemano gracias ... bye