SoloCodigo

Bases de Datos => Oracle => Mensaje iniciado por: sneider en Domingo 17 de Diciembre de 2006, 16:28

Título: No Mirar Un Registro
Publicado por: sneider en Domingo 17 de Diciembre de 2006, 16:28
Buenas tardes.Tengo un pequeño problema que no se como abordarlo. Resulta que he puesto un bucle que me vaya recorriendo mi cursor para ver si se cumple una condicion.En concreto es lo siguiente:
Tengo que controlar las fechas de inicio y fin de una reserva de un hotel.Si yo quiero actualizar la fecha de inicio de una reserva....tengo que recorrer mi cursor para ver que no hay reservas dentro de ese rango inicio y fin. Es decir, yo tengo la habitacion numero 69 en el hotel 4 con la reserva fecha inicio =16/1/2006 y fecha fin =20/1/2006.  Pues bien, a la hora de recorrer el cursor para ver que no hay reservas que se solapen en esa misma habitacion y ese mismo hotel, no se como decirle que no me mire esa misma reserva que yo estoy actualizando porque sino siempre me daria error de actualizacion( al encontrar una reserva que ya esta en ese rango de fechas). No se si me entendeis...es un poco complejo jeje.

Yo he puesto lo siguiente:



     
Código: Text
  1.  
  2. OPEN c1;
  3.         LOOP
  4.          
  5.           FETCH c1 into num,hotel,habitacion,dni,fini,ffin;
  6.          
  7.       IF (:RESERVA.fecha_inicio between fini and ffin-1) THEN
  8.             RAISE error5;
  9.       ELSE
  10.          
  11.           COMMIT_FORM;
  12.          
  13.       END IF;
  14.      
  15.      
  16.      
  17.       IF (:RESERVA.fecha_fin between fini+1 and ffin) THEN
  18.             RAISE error3;
  19.       ELSE
  20.          
  21.           COMMIT_FORM;
  22.          
  23.       END IF;
  24.      
  25.      
  26.      
  27.       exit when (c1%notfound) or (:RESERVA.num_reserva = num);
  28.       next_record;
  29.         END LOOP;
  30.         close c1;
  31.         first_record;
  32.            
  33.  
  34.      
  35.  EXCEPTION
  36.          
  37.                  
  38.                  
  39.            WHEN error3 THEN
  40.            
  41.                SET_ALERT_PROPERTY('FECHA_FIN_RANGO',ALERT_MESSAGE_TEXT,'La fecha de fin de la reserva coincide dentro del rango de una reserva con esa misma habitación y ese mismo hotel');
  42.           IF SHOW_ALERT ('FECHA_FIN_RANGO')= ALERT_BUTTON1 THEN
  43.                 RAISE FORM_TRIGGER_FAILURE;
  44.           END IF;
  45.            
  46.           WHEN error5 THEN
  47.            
  48.               SET_ALERT_PROPERTY('FECHA_INICIO_RANGO',ALERT_MESSAGE_TEXT,'La fecha de inicio de la reserva coincide dentro del rango de una reserva con esa misma habitación y ese mismo hotel');
  49.           IF SHOW_ALERT ('FECHA_INICIO_RANGO')= ALERT_BUTTON1 THEN
  50.                 RAISE FORM_TRIGGER_FAILURE;
  51.           END IF;
  52.            
  53.              
  54.              
  55.  
  56. END;
  57.  
  58.  
Título: Re: No Mirar Un Registro
Publicado por: JuanK en Lunes 18 de Diciembre de 2006, 17:15
maneja un id unico por reserva y cuando hagas el cursor le dices que traiga todas menos la actual.
Título: Re: No Mirar Un Registro
Publicado por: sneider en Lunes 18 de Diciembre de 2006, 20:51
Hola Juank.  Me has iluminado y al final lo he conseguido. Al estar en fase de aprendizaje me cuesta bastante pillar las cosas. Pero vamos...estoy aprendiendo un monton. En breve os seguire escribiendo, no creo ke tarde muxo xDD

Gracias.
Título: Re: No Mirar Un Registro
Publicado por: JuanK en Martes 19 de Diciembre de 2006, 17:45
ok, estare atento en lo que pueda.