Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Stored Procedure Problema

Estas en el tema de Stored Procedure Problema en el foro de Mysql en Foros del Web. Hola amigos, sigo con problemas para implementar un Stored Procedure que me permita realizar la actualización de varios campos de una tabala de mi base ...
  #1 (permalink)  
Antiguo 15/02/2015, 15:49
 
Fecha de Ingreso: febrero-2014
Mensajes: 48
Antigüedad: 10 años, 9 meses
Puntos: 0
Stored Procedure Problema

Hola amigos, sigo con problemas para implementar un Stored Procedure que me permita realizar la actualización de varios campos de una tabala de mi base de datos.

Específicamente lo que intento hacer es que si a la tabla crb_reservacion ingresa una reserva de un usuario con el campo "numero_vaucher" vació, y el mismo permanece 48 horas vació, automáticamente el codigo_estatus_reserva (que es el estatus de la reserva el cual entra en '2'= "sin vaucher"), sea actualizado a 4 = "cancelada", del mismo modo es necesario que en la misma tabla se actualicen también dos campos que son la fecha_inicio = 0000-00-00 y la fecha_fin = 0000-00-00. Por supuesto cuando el usuario realiza la reserva y esta se almacena en la base de datos, también se almacena la hora_reserva en un campo tipo TIME.

Agradezco su ayuda, he leído mucho sobre los SP, no soy muy experimentando en los mismos puesto a que estoy empezando a trabajar con ellos, gracias de antemano.

Acá coloco la sintaxis que estoy utilizando y abajo de ella el error:

Código MySQL:
Ver original
  1. DELIMITER$$    
  2.     DROP PROCEDURE IF EXISTS tumba_reserva$$
  3.      
  4.         CREATE PROCEDURE tumba_reserva ()
  5.        
  6.  
  7.           DECLARE hora_reserva TIME;    
  8.           DECLARE hora_actual TIME;
  9.       DECLARE fecha_inicio DATE;
  10.           DECLARE fecha_fin DATE;  
  11.           DECLARE codigo_estatus_reserva INTEGER(1);
  12.          
  13.           SET hora_actual = CURTIME();
  14.          
  15.           SELECT ( if ( numero_vaucher = '' OR numero_vaucher is Null, 0 )And codigo_estatus_reserva = '2'), hora_reserva
  16. FROM crb_reservacion
  17.      
  18.           IF (codigo_estatus_reserva  = 2) AND (hora_actual - hora_reserva >= 48) THEN
  19.             UPDATE crb_reservacion SET codigo_estatus_reserva = 4, fecha_inicio = 0000-00-00, fecha_fin = 0000-00-00;
  20.           END IF;
  21.         END $$
  22. DELIMITER$$


Aquí el error que me arroja el MyAdmin:

Código MySQL:
Ver original
  1. Error
  2. consulta SQL:
  3.  
  4.  
  5.   DROP PROCEDURE IF EXISTS tumba_reserva
  6.      
  7.         CREATE PROCEDURE tumba_reserva ()
  8.        
  9.  
  10.           DECLARE hora_reserva TIME;
  11. MySQL ha dicho: Documentación
  12.  
  13. #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'CREATE PROCEDURE tumba_reserva ()
  14.        
  15.  
  16.           DECLARE hora_res' at line 3

Última edición por gnzsoloyo; 15/02/2015 a las 22:00
  #2 (permalink)  
Antiguo 15/02/2015, 18:20
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Stored Procedure Problema

Las fechas no pueden ir como números. MySQL las tomaría como una resta aritmética.
Pon las fechas y las horas entre apostrofos para que las interprete como tales.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 15/02/2015, 19:01
 
Fecha de Ingreso: febrero-2014
Mensajes: 48
Antigüedad: 10 años, 9 meses
Puntos: 0
Respuesta: Stored Procedure Problema

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Las fechas no pueden ir como números. MySQL las tomaría como una resta aritmética.
Pon las fechas y las horas entre apostrofos para que las interprete como tales.
Ya lo hice compañero, igual me da error en sintaxis.

Código MySQL:
Ver original
  1. Error
  2. consulta SQL:
  3.  
  4.  
  5. DELIMITER$$
  6. DROP PROCEDURE IF EXISTS tumba_reserva$$
  7.  
  8. CREATE PROCEDURE tumba_reserva ()
  9.  
  10.  
  11. DECLARE hora_reserva TIME;
  12. MySQL ha dicho: Documentación
  13.  
  14. #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DELIMITER$$
  15. DROP PROCEDURE IF EXISTS tumba_reserva$$
  16.  
  17. CREATE PROCEDURE tumba' at line 1

Última edición por gnzsoloyo; 15/02/2015 a las 22:00
  #4 (permalink)  
Antiguo 15/02/2015, 22:02
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Stored Procedure Problema

Cita:
Aquí el error que me arroja el MyAdmin:
Voy a supone que por "MyAdmin", te estás refiriendo al phpMyAdmin.
Si ese es el caso, el phpMyAdmin no reconoce los DELIMITER, sino que debes indicare cual es el delimitador en un textbox debajo de la ventana de SQL.
Es un tema de interfaz.

Por lo demás tienes al menos dos problemas adicionales:
1) Este IF() está mal escrito:
Código MySQL:
Ver original
  1. SELECT ( if ( numero_vaucher = '' OR numero_vaucher is Null, 0 )And codigo_estatus_reserva = '2'), hora_reserva
un IF tiene esta estructura:
IF(condicion, si TRUE, si FALSE).
Si miras con cuidado tu query, no estás respetando la estructura del IF()...

2) Los DELIMITER necesitan un espacio antes del nuevo delimitador, y el segundo DELIMITER es para restaurar el delimitador por defecto, es decir el punto y coma (;)
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 15/02/2015 a las 22:09
  #5 (permalink)  
Antiguo 17/02/2015, 00:04
 
Fecha de Ingreso: febrero-2014
Mensajes: 48
Antigüedad: 10 años, 9 meses
Puntos: 0
Respuesta: Stored Procedure Problema

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Voy a supone que por "MyAdmin", te estás refiriendo al phpMyAdmin.
Si ese es el caso, el phpMyAdmin no reconoce los DELIMITER, sino que debes indicare cual es el delimitador en un textbox debajo de la ventana de SQL.
Es un tema de interfaz.

Por lo demás tienes al menos dos problemas adicionales:
1) Este IF() está mal escrito:
Código MySQL:
Ver original
  1. SELECT ( if ( numero_vaucher = '' OR numero_vaucher is Null, 0 )And codigo_estatus_reserva = '2'), hora_reserva
un IF tiene esta estructura:
IF(condicion, si TRUE, si FALSE).
Si miras con cuidado tu query, no estás respetando la estructura del IF()...

2) Los DELIMITER necesitan un espacio antes del nuevo delimitador, y el segundo DELIMITER es para restaurar el delimitador por defecto, es decir el punto y coma (;)
En verdad no doy, lo he hecho ya de todas las formas.
le cambie el delimiter en el cuadro de texto del MYADMIN en vez de ; puse // y modifique la condición y nada
  #6 (permalink)  
Antiguo 17/02/2015, 05:25
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Stored Procedure Problema

¿Y revisaste el IF()?
Porque sin eso te seguirá fallando.
Posdata : no dije que dejaras los DELIMITER. Quitalos. PhpMyadmin no los reconoce ni los necesita.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 17/02/2015, 13:52
 
Fecha de Ingreso: febrero-2014
Mensajes: 48
Antigüedad: 10 años, 9 meses
Puntos: 0
Respuesta: Stored Procedure Problema

Cita:
Iniciado por gnzsoloyo Ver Mensaje
¿Y revisaste el IF()?
Porque sin eso te seguirá fallando.
Posdata : no dije que dejaras los DELIMITER. Quitalos. PhpMyadmin no los reconoce ni los necesita.
Si amigo revise el IF lo modifique, también quite los DELIMITER porque como me dijiste no son reconocidos en la sintaxis de MYSQL y estuve leyendo y sustituí en la caja de texto del MyAdmin el ';' por '//', debido a que al final del SP en los END lleva ';'. Pero nada igual no funciona
  #8 (permalink)  
Antiguo 17/02/2015, 18:28
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Stored Procedure Problema

OK.
Lo que dices es poco claro, porque no termino de entender si quitaste todos los ";", o solo el del final. Por favor postea el código tal y como lo intentaste la ultima vez.
Analizaremos lo que tienes ahora, para ver si estas cometiendo nuevos errores.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #9 (permalink)  
Antiguo 17/02/2015, 22:55
 
Fecha de Ingreso: febrero-2014
Mensajes: 48
Antigüedad: 10 años, 9 meses
Puntos: 0
Respuesta: Stored Procedure Problema

Cita:
Iniciado por gnzsoloyo Ver Mensaje
OK.
Lo que dices es poco claro, porque no termino de entender si quitaste todos los ";", o solo el del final. Por favor postea el código tal y como lo intentaste la ultima vez.
Analizaremos lo que tienes ahora, para ver si estas cometiendo nuevos errores.
Este es el último código que introduje:

CREATE PROCEDURE tumba_reserva ()

BEGIN


DECLARE hora_reserva TIME;
DECLARE hora_actual TIME;
DECLARE fecha_inicio DATE;
DECLARE fecha_fin DATE;
DECLARE codigo_estatus_reserva INTEGER(1);

SET hora_actual = CURTIME();

SELECT hora_reserva, codigo_estatus_reserva = '2' IF (numero_vaucher IS NULL, '0', '')
FROM crb_reservacion



IF (codigo_estatus_reserva = '2') AND (hora_actual - hora_reserva >= 48) THEN
UPDATE crb_reservacion SET codigo_estatus_reserva = '4', fecha_inicio = '0000-00-00', fecha_fin = '0000-00-00';
END IF;
END

-------------------------------------------------------------------------------------------------
Lo que hice fue colocar en la caja de texto del MYADMIN slash '//' por ';' es decir, en vez de colocar punto y coma coloque dos slash '//' en la caja de texto del MYADMIN

Etiquetas: campo, fecha, procedure, select, sql, stored, tabla, update
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:13.