Ver Mensaje Individual
  #6 (permalink)  
Antiguo 22/07/2010, 11:18
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
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)