CREATE OR REPLACE FUNCTION inmuebles_dormitorios_upd() RETURNS TRIGGER AS $$
BEGIN
/* No se permitirá que se actualice el identificador del inmueble: valor generado por el sistema */
IF NEW.id <> OLD.id THEN
   RAISE NOTICE 'Actualización fallida';
   RAISE NOTICE 'No se puede modificar el identificador de un inmueble';
   RETURN NULL;
END IF;
/* No se podrá establecer a NULL cualquier campo que forme parte de la clave primaria de dormitorio 
   (el campo id de inmueble no se podrá modificar y por tanto tampoco se podrá establecer a NULL) */
IF NEW.num IS NULL THEN
      RAISE NOTICE 'Actualización fallida';
      RAISE NOTICE 'El campo num no puede tomar el valor NULL, forma parte de la clave primaria de dormitorio';
      RETURN NULL;
END IF;
/* Se informará del error producido en la actualización del identificador de un dormitorio cuya 
modificación provoque duplicidad en este dormitorio */
IF NEW.num <> OLD.num THEN
   IF EXISTS (SELECT * FROM dormitorio 
		WHERE inmueble_id=NEW.id AND num=NEW.num) THEN
      RAISE NOTICE 'Actualización fallida';
      RAISE NOTICE 'Duplicidad de dormitorios';
      RAISE NOTICE 'Ya existe el dormitorio % del inmueble %',NEW.num,NEW.id;
      RETURN NULL;
   END IF;
END IF;

   UPDATE inmueble
     SET direc = NEW.direc,
     cp = NEW.cp,
     detalle = NEW.detalle,
     propietario_id = NEW.propietario_id
   WHERE id=OLD.id;

   UPDATE dormitorio
     SET num = NEW.num, 
     capacidad = NEW.capacidad,
     pvp = NEW.pvp,
     calidad = NEW.calidad
   WHERE inmueble_id=OLD.id AND num=OLD.num;

RAISE NOTICE 'Actualización correcta';
RETURN NEW;

END;
$$ language plpgsql;

CREATE TRIGGER inmuebles_dormitorios_upd INSTEAD OF UPDATE ON inmuebles_dormitorios 
FOR EACH ROW EXECUTE PROCEDURE inmuebles_dormitorios_upd();


