Foro de elhacker.net

Programación => Bases de Datos => Mensaje iniciado por: S4ms3pi0l__ en 24 Marzo 2019, 23:33 pm



Título: Procedimiento almacenado que recibe como parámetros fecha de entrada y salida
Publicado por: S4ms3pi0l__ en 24 Marzo 2019, 23:33 pm
Tengo la siguiente consulta usando la misma base de datos de mi post anterior:

https://foro.elhacker.net/bases_de_datos/ayuda_con_una_consulta_usando_procedimientos_almacenados-t493882.0.html

Realizar un procedimiento almacenado que reciba como parámetro Fecha de Entrada, Fecha de Salida. Consultar la disponibilidad de todas las habitaciones en el rango de fechas solicitado.
Presentar: IdHabitación - Tipo de Habitación, Estado.
Ejemplo:
Entrada
Fecha de Entrada: 2019-03-14
Fecha de Salida:  2019-03-20
Ejecución
IdHabitación Tipo de Habitación         Estado
   1            Deluxe                 Disponible
   2            Deluxe                 Disponible
   3            Turística              Reservado
   4            Presidencial           Disponible
   ..           .....                  .....
   ..           .....                  .....
Nota: Con que exista un día ocupado en la habitación en el rango solicitado, el estado será: Reservado.

Es bastante parecido a la consulta de mi post anterior, así que, decidí modificarla y en teoría funciona, pero por ejemplo, tengo 5 datos almacenados y este muestra 30 datos en la ejecución.

Adjunto mi código:

Código
  1. CREATE PROCEDURE SP_Disponibilidad2
  2. @fecha_entrada DATE,
  3. @fecha_salida  DATE
  4. AS BEGIN
  5. DECLARE @ocupado INTEGER
  6. DECLARE @tmp_table TABLE (
  7. HabitacionID INT,
  8. TipoHab VARCHAR(80),
  9. Estado VARCHAR(10)
  10. )
  11.  
  12. WHILE ( @fecha_entrada <= @fecha_salida )
  13. BEGIN
  14. SET @ocupado = (
  15. SELECT COUNT(*)
  16. FROM habitacion_reserva hr
  17. --INNER JOIN habitacion h ON hr.id_habitacion = h.no_habitacion
  18. --INNER JOIN tipo_habitacion th ON th.cod_tipo = h.cod_tipo
  19. WHERE @fecha_entrada BETWEEN fecha_entrada AND fecha_salida
  20. )
  21. IF ( @ocupado > 0 )
  22. INSERT INTO @tmp_table
  23. SELECT
  24. h.no_habitacion,
  25. th.nom_tipo,
  26. 'Reservado'
  27. FROM habitacion_reserva hr
  28. INNER JOIN habitacion h ON hr.id_habitacion = h.no_habitacion
  29. INNER JOIN tipo_habitacion th ON th.cod_tipo = h.cod_tipo
  30. --WHERE @fecha_entrada BETWEEN fecha_entrada AND fecha_salida
  31. ELSE
  32. INSERT INTO @tmp_table
  33. SELECT
  34. hr.id_habitacion,
  35. th.nom_tipo,
  36. 'Disponible'
  37. FROM habitacion_reserva hr
  38. INNER JOIN habitacion h ON hr.id_habitacion = h.no_habitacion
  39. INNER JOIN tipo_habitacion th ON th.cod_tipo = h.cod_tipo
  40. --WHERE @fecha_entrada BETWEEN fecha_entrada AND fecha_salida
  41.  
  42. SET @fecha_entrada = DATEADD( DAY, 1, @fecha_entrada )
  43. END
  44.  
  45. SELECT * FROM @tmp_table
  46. END
  47.  
  48.    /********************************/
  49.  
  50.  
  51. EXECUTE SP_Disponibilidad2 '2019-07-20', '2019-07-25'
  52.  

+--------------+------------+
| IdHabitacion| Estado      |
+--------------+------------+
| 1                | Reservado |
| 2                | Reservado |
| 3                | Reservado |
| 4               | Disponible |
| 5                | Disponible |
| 1               | Disponible |
| ...30           | Disponible |
+------------+--------------+