CREATE OR REPLACE VIEW inmuebles_dormitorios AS
SELECT id,direc,cp,detalle,propietario_id,num,capacidad,pvp,calidad
FROM inmueble JOIN dormitorio 
ON inmueble.id = dormitorio.inmueble_id;

CREATE OR REPLACE FUNCTION inmuebles_dormitorios_ins() RETURNS TRIGGER AS $$
BEGIN
 IF NEW.id IS NULL THEN
 /* Si en la vista se desconoce el valor del identificador del inmueble es porque se está dando de alta (insertando) un inmueble y un dormitorio de dicho inmueble. El sistema debe generar un valor para el campo “id” (clave primaria del inmueble) */
    INSERT INTO inmueble (direc,cp,detalle,propietario_id) VALUES 
    (NEW.direc,NEW.cp,NEW.detalle,NEW.propietario_id);
  
   /* la función currval('inmueble_id_seq') obtiene el valor del identificador del inmueble generado: secuencia 'inmueble_id_seq' */
    INSERT INTO dormitorio (inmueble_id,num,capacidad,pvp,calidad) VALUES 
    (currval('inmueble_id_seq'),NEW.num,NEW.capacidad,NEW.pvp,NEW.calidad);
 
 ELSE /* el valor del identificador del inmueble es conocido. 
         Solo se está insertando un dormitorio de un inmueble */
   IF NOT EXISTS (SELECT * FROM inmueble WHERE id=NEW.id) THEN
      RAISE NOTICE 'No puedes dar de alta un dormitorio de un inmueble (%) inexistente ...', NEW.id;
      RETURN NULL;
   ELSE
      INSERT INTO dormitorio (inmueble_id,num,capacidad,pvp,calidad) VALUES 
      (NEW.id,NEW.num,NEW.capacidad,NEW.pvp,NEW.calidad);
   END IF;
 END IF;
RETURN NEW;
END;
$$ language plpgsql;

CREATE TRIGGER inmuebles_dormitorios_ins INSTEAD OF INSERT ON inmuebles_dormitorios 
FOR EACH ROW EXECUTE PROCEDURE inmuebles_dormitorios_ins();

