Ver Mensaje Individual
  #3 (permalink)  
Antiguo 10/02/2015, 11:17
AndresPal
 
Fecha de Ingreso: febrero-2014
Mensajes: 48
Antigüedad: 10 años, 9 meses
Puntos: 0
Respuesta: Stored Procedure

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Hay más de un error...
1) Un SP no puede contener una consulta sin asignar resultados a variables, si no es la última linea del body. Y eso sólo tiene sentido si la consulta es el resultado esperado en pantalla, o la salida de datos que se tomará desde un programa.
2) A tu IF() le falta la condición de FALSE, por lo que está mal escrito.
3) No estás cerrando la linea de ese select con el terminador de sentencias, por lo que ni siquiera debe estar compilando.
4) Ese script sólo podría cargarse desde una aplicación. DE pretender hacerlo desde consola de MySQL fallará, y si lo haces desde phpMyadmin también, a menos que determines un delimiter distinto.
Para compilar en consola de MySQL:
Código MySQL:
Ver original
  1. DROP PROCEDURE IF EXISTS tumba_reserva;
  2. DELIMITER $$
  3.  
  4. CREATE PROCEDURE tumba_reserva ()
  5.     DECLARE hora_actual TIME;
  6.     DECLARE hora_res TIME;
  7.  
  8.     SET hora_actual = CURTIME();
  9.     SELECT (IF((numero_vaucher = '' OR numero_vaucher IS NULL) AND codigo_estatus_reserva = 2), hora_reserva, 'Aca va la salida por FALSE')
  10. INTO hora_res
  11.     FROM crb_reservacion;
  12.  
  13.     IF TIMESTAMPDIFF(, HOUR, hora_res, hora_actual) >= 1 THEN
  14.         UPDATE crb_reservacion WHERE codigo_estatus_reserva = 4;
  15.     END IF;
  16. END$$
  17.  
  18.  
  19.  
  20. DELIMITER ;

Aclaremos una cosa, este código no garantiza que funcione bien, solo no debería dar error al compilar. No lo garantiza, porque a mi entender está mal pensado, ya que la consulta que pones devolverá múltiples registros, por lo que el INTO no funcionará, y el UPDATE está actualizando todos los registros que existan con esa condición, lo que a mi entender es ilógico.

Gracias por responder amigo, estoy empezando a trabajar con los SP así que no estoy muy diestro en eso por eso los errores. Te explico lo que necesito:

Tengo una cantidad de reservas X hechas por usuarios en la BD, las cuales entran con un estatus, si el numero de vaucher es rellenado en el formulario, la reserva ingresa con estatus '1' pendiente, hasta que ese numero de vaucher se verifique en el banco y el mismo administrador mediante un panel procesa la reserva y el estatus cambia automáticamente a '3' mediante un Update y queda "procesada". El caso contrario es que la reserva ingrese a la BD sin numero de vaucher, en este caso ingresa con estatus '2' que significa "Sin Vaucher". El SP debe tomar la hora_reserva de la bd que es la fecha que se guarda apenas el usuario ingresa la reserva (hora de su servidor) y restarla con la hora actual de manera que todas las reservas que estén en la bd en estatus '2' "sin vaucher" al transcurrir una hora o x tiempo si el usuario no la completa pasen a estado '4' - cancelada se actualice la tabla reservacion y las fechas(fecha_llegada y fecha_salida) también se actualicen a 0000-00-00 para poder ser liberadas, el SP debe consultar a la BD cada 30 minutos.