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

Manejo de fecha en procedimiento almacenados

Estas en el tema de Manejo de fecha en procedimiento almacenados en el foro de Bases de Datos General en Foros del Web. buen dia, espero ke me puedan ayudar. Tengo el siguiente PA: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código SQL: Ver original CREATE PROCEDURE PA_8_actualizar_compras ( numerocomprobante INT ( 12 ...
  #1 (permalink)  
Antiguo 22/07/2010, 10:36
 
Fecha de Ingreso: diciembre-2008
Ubicación: sullana, Piura
Mensajes: 106
Antigüedad: 15 años, 10 meses
Puntos: 0
Exclamación Manejo de fecha en procedimiento almacenados

buen dia, espero ke me puedan ayudar. Tengo el siguiente PA:

Código SQL:
Ver original
  1. CREATE PROCEDURE PA_8_actualizar_compras(numerocomprobante INT(12), motivoanulacioncompras text)
  2.     BEGIN
  3.         DECLARE fehoanulacioncompra VARCHAR(19);
  4.         SELECT CURRENT_TIMESTAMP() INTO fehoanulacioncompra;
  5.         UPDATE compras
  6.         SET anulacioncompras = 1, fehoanulacioncompra = @fehaanulacioncompra, motivoanulacioncompras = @motivoanulacioncompras;
  7.         WHERE numerocomprobantecompras = @numerocomprobante;
  8.     END;

en cual kiero actualizar una compra cambiar su estado a anulada, pero kiero asignarle la fecha de la base de datos, me muestra error...alguna ayuda...please

saludos
  #2 (permalink)  
Antiguo 22/07/2010, 10:44
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: Manejo de fecha en procedimiento almacenados

Cual error?
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 22/07/2010, 10:58
 
Fecha de Ingreso: diciembre-2008
Ubicación: sullana, Piura
Mensajes: 106
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: Manejo de fecha en procedimiento almacenados

Cita:
Iniciado por huesos52 Ver Mensaje
Cual error?
un error de sintaxis, cerca a la linea 3
  #4 (permalink)  
Antiguo 22/07/2010, 11:04
 
Fecha de Ingreso: enero-2009
Mensajes: 142
Antigüedad: 15 años, 10 meses
Puntos: 1
Respuesta: Manejo de fecha en procedimiento almacenados

el into termina con ";" puede que sea eso
  #5 (permalink)  
Antiguo 22/07/2010, 11:17
 
Fecha de Ingreso: diciembre-2008
Ubicación: sullana, Piura
Mensajes: 106
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: Manejo de fecha en procedimiento almacenados

Cita:
Iniciado por diegonazho Ver Mensaje
el into termina con ";" puede que sea eso
???????????
  #6 (permalink)  
Antiguo 22/07/2010, 11:18
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: Manejo de fecha en procedimiento almacenados

Estás usando incorrectamente el nombre de las variables locales. Acuérdate de que no estás programando para SQL Server, sino para mySQL.
Las variables locales no tiene prefijos, si estás recibiendo la variable numerocomprobante, no se le debe poner el prefijo @numerocomprobante, porque esa sería otra variable diferente.
Sólo las variables de usuario (de sesión) usan prefijo, pero no las locales de un procedimiento.

Lo correcto sería:

Código MySQL:
Ver original
  1. CREATE procedure PA_8_actualizar_compras(IN numerocomprobante INT, IN motivoanulacioncompras TEXT)
  2.   DECLARE fehoanulacioncompra VARCHAR(19);
  3.   SELECT CURRENT_timestamp() INTO fehoanulacioncompra;
  4.   UPDATE compras
  5.   SET anulacioncompras = 1, fehoanulacioncompra = fehaanulacioncompra,
  6.         motivoanulacioncompras = motivoanulacioncompras;
  7.    WHERE numerocomprobantecompras = numerocomprobante;

Tips:
- No uses nombres tan largos. Terminarás teniendo problemas de sintaxis al tipearlos.
- No uses VARCHAR para almacenar un TIMESTAMP. Usa los tipos de datos correctos. Un TIMESTAMP tiene una longitud real en memoria y disco de 8 bytes, mientras que el VARCHAR necesita 19 para hacer lo mismo. Y eso es simplemente porque los datos de fecha y hora se almacenan como binarios y no como caracteres, al igual que los números.
__________________
¿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 22/07/2010, 11:24
 
Fecha de Ingreso: diciembre-2008
Ubicación: sullana, Piura
Mensajes: 106
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: Manejo de fecha en procedimiento almacenados

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Estás usando incorrectamente el nombre de las variables locales. Acuérdate de que no estás programando para SQL Server, sino para mySQL.
Las variables locales no tiene prefijos, si estás recibiendo la variable numerocomprobante, no se le debe poner el prefijo @numerocomprobante, porque esa sería otra variable diferente.
Sólo las variables de usuario (de sesión) usan prefijo, pero no las locales de un procedimiento.

Lo correcto sería:

Código MySQL:
Ver original
  1. CREATE procedure PA_8_actualizar_compras(IN numerocomprobante INT, IN motivoanulacioncompras TEXT)
  2.   DECLARE fehoanulacioncompra VARCHAR(19);
  3.   SELECT CURRENT_timestamp() INTO fehoanulacioncompra;
  4.   UPDATE compras
  5.   SET anulacioncompras = 1, fehoanulacioncompra = fehaanulacioncompra,
  6.         motivoanulacioncompras = motivoanulacioncompras;
  7.    WHERE numerocomprobantecompras = numerocomprobante;

Tips:
- No uses nombres tan largos. Terminarás teniendo problemas de sintaxis al tipearlos.
- No uses VARCHAR para almacenar un TIMESTAMP. Usa los tipos de datos correctos. Un TIMESTAMP tiene una longitud real en memoria y disco de 8 bytes, mientras que el VARCHAR necesita 19 para hacer lo mismo. Y eso es simplemente porque los datos de fecha y hora se almacenan como binarios y no como caracteres, al igual que los números.
mira lo deje asi:

Código MySQL:
Ver original
  1. create procedure PA_8_actualizar_compras(numerocomprobantes int(12), motivoanulacioncompras text)
  2.     BEGIN
  3.         DECLARE fehoanulacioncompra timestamp;
  4.         select CURRENT_timestamp() into @fehoanulacioncompra,
  5.         UPDATE compras
  6.         set anulacioncompras = 1, fehoanulacioncompra = @fehaanulacioncompra, motivoanulacioncompras = @motivoanulacioncompras;
  7.         WHERE numerocomprobantes= @numerocomprobantes;
  8.     END;

si tenia los @, solo ke me ekivoke al elegir el tipo de consulta, bueno igual me da error de sintaxis
  #8 (permalink)  
Antiguo 22/07/2010, 11:27
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: Manejo de fecha en procedimiento almacenados

Quítale los"@" a las variables.
Estás comparando y asignando valores NULL en esos campos, porque @a y a no son la misma variable.
En segundo lugar, ¿qué estás usando para cargar esto? ¿phpMyAdmin, MySQL Query Browser, Navicat, qué?
__________________
¿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 22/07/2010, 11:29
 
Fecha de Ingreso: diciembre-2008
Ubicación: sullana, Piura
Mensajes: 106
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: Manejo de fecha en procedimiento almacenados

revisandolo nuevamente, me dije en el error de las comsas, pero lamentablmente sigue igual :(

Código MySQL:
Ver original
  1. create procedure PA_8_actualizar_compras(numerocomprobantes int(12), motivoanulacioncompras text)
  2.     BEGIN
  3.         --declare @fehoanulacioncompra timestamp;
  4.         select CURRENT_timestamp() into @fehoanulacioncompra,
  5.         UPDATE compras
  6.         set anulacioncompras = 1 AND fehoanulacioncompra = @fehaanulacioncompra AND motivoanulacioncompras = @motivoanulacioncompras;
  7.         WHERE numerocomprobantes= @numerocomprobantes;
  8.     END;
  #10 (permalink)  
Antiguo 22/07/2010, 11:30
 
Fecha de Ingreso: diciembre-2008
Ubicación: sullana, Piura
Mensajes: 106
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: Manejo de fecha en procedimiento almacenados

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Quítale los"@" a las variables.
Estás comparando y asignando valores NULL en esos campos, porque @a y a no son la misma variable.
En segundo lugar, ¿qué estás usando para cargar esto? ¿phpMyAdmin, MySQL Query Browser, Navicat, qué?
uso heidisql
  #11 (permalink)  
Antiguo 22/07/2010, 11:42
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: Manejo de fecha en procedimiento almacenados

Código MySQL:
Ver original
  1. CREATE PROCEDURE PA_8_actualizar_compras(numerocomprobantes INT(12), motivoanulacioncompras TEXT)
  2.     declare fehoanulacioncompra timestamp;
  3.     SELECT CURRENT_TIMESTAMP() INTO fehoanulacioncompra;
  4.     UPDATE CONTROLES
  5.     SET anulacioncompras = 1,
  6.     fehoanulacioncompra = fehaanulacioncompra,
  7.     motivoanulacioncompras = motivoanulacioncompras
  8.     WHERE numerocomprobantes= numerocomprobantes;
1) Las asignaciones de un UPDATE se separan con comas y no con AND.
2) La sentencia termina únicamente con punto y coma (;), y sólo luego de la última cláusula. Habías puesto un cierre antes del WHERE.
3) No van las @ en este contexto. Lee el manual de referencia respecto al tema variables de usuario.
4) Habías cerrado una sentencia con coma y no punto yy coma.
5) Los comentarios con doble guion deben ser seguidos de un espacio para que los tome como tal.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #12 (permalink)  
Antiguo 22/07/2010, 11:52
 
Fecha de Ingreso: diciembre-2008
Ubicación: sullana, Piura
Mensajes: 106
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: Manejo de fecha en procedimiento almacenados

naa, lo he puesto como l pones tu, pero naa. con respecto a los del , en el update, no ha hexo problemas eso en los otros PA
  #13 (permalink)  
Antiguo 22/07/2010, 12:09
 
Fecha de Ingreso: diciembre-2008
Ubicación: sullana, Piura
Mensajes: 106
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: Manejo de fecha en procedimiento almacenados

Cita:
Iniciado por saumal20 Ver Mensaje
naa, lo he puesto como l pones tu, pero naa. con respecto a los del , en el update, no ha hexo problemas eso en los otros PA
plops....

lo probe en navicat y si funciono, nose xq heidisql lo interpreta como si estuviera mal...en fin...la consulta seria asi:

Código MySQL:
Ver original
  1. create procedure PA_8_actualizar_compras(numerocomprobantes int(12), motivoanulacioncompras text)
  2.     BEGIN
  3.         DECLARE fehoanulacioncompra timestamp;
  4.         select CURRENT_timestamp() into @fehoanulacioncompras;
  5.         UPDATE compras
  6.         SET anulacioncompras = 1 AND fehoanulacioncompra = @fehaanulacioncompra AND motivoanulacioncompras = @motivoanulacioncompras
  7.         WHERE numerocomprobantes= @numerocomprobantes;
  8.     END;
  9. DELIMITER ;

alguna idea?
  #14 (permalink)  
Antiguo 22/07/2010, 12:15
 
Fecha de Ingreso: diciembre-2008
Ubicación: sullana, Piura
Mensajes: 106
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: Manejo de fecha en procedimiento almacenados

re plops...ia salio...ke habra pasado? :S , para mi, seguro que el heidi sql es inestable aun...ojala lo arreglen, es bueno y liviano. saludos y gracias a todos los ke respondieron
  #15 (permalink)  
Antiguo 22/07/2010, 12:22
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: Manejo de fecha en procedimiento almacenados

Me alegra que saliese.

para ora ocasión por favor, acuérdate que en un foro se debe escribir en español (castellano) y no en SMS...
Cuesta un poco entenderte.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #16 (permalink)  
Antiguo 22/07/2010, 12:26
 
Fecha de Ingreso: diciembre-2008
Ubicación: sullana, Piura
Mensajes: 106
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: Manejo de fecha en procedimiento almacenados

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Me alegra que saliese.

para ora ocasión por favor, acuérdate que en un foro se debe escribir en español (castellano) y no en SMS...
Cuesta un poco entenderte.
jajaja...ok. lo tendre presente

Etiquetas: almacenas, consultas, enlos, mysql, procedimiento, fechas
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 12:14.