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

[SOLUCIONADO] Problema con numeros negativos

Estas en el tema de Problema con numeros negativos en el foro de Mysql en Foros del Web. Buen día chic@s!!!.... Les comento mi problema, tengo dos tablas: 1.Detalle_Salidas -Salida_Id VARCHAR(5) -Producto_Id VARCHAR(5) -Descripcion VARCHAR(50) -Cantidad INT(5) -Usuario_Creo DATETIME -Fecha_Creo DATETIME ... 2.Catalogo_Productos ...
  #1 (permalink)  
Antiguo 21/06/2013, 09:13
Avatar de tanliz  
Fecha de Ingreso: abril-2013
Ubicación: Irapuato
Mensajes: 63
Antigüedad: 11 años
Puntos: 1
Pregunta Problema con numeros negativos

Buen día chic@s!!!....
Les comento mi problema, tengo dos tablas:

1.Detalle_Salidas
-Salida_Id VARCHAR(5)
-Producto_Id VARCHAR(5)
-Descripcion VARCHAR(50)
-Cantidad INT(5)
-Usuario_Creo DATETIME
-Fecha_Creo DATETIME
...

2.Catalogo_Productos
-Catalogo_Producto_Id VARCHAR(5)
-Descripcion VARCHAR(50)
-Modelo VARCHAR(20)
-Serie VARCHAR(20)
-Precio_Compra DECIMAL(10,2)
-Precio_Venta DECIMAL(10,2)
-Unidad VARCHAR(20)
-Existencia INT(5)
-Usuario_Creo
-Fecha_Creo
...

Manejo un procEdimiento que me va insertando en detalle de salidas
y un disparador que me debe actualizar la existencia en CATALOGO_PRODUCTOS cuando se realiza un insert en DETALLE_SALIDAS, y es aqui donde surge mi problema.
Que en lugar de actualizar la existencia a nÚmeros negativos me ingresa el numero mayor del rango de datos de tipo INT (2147483647).
Ahora, cuando realizado un UPDATE directo a la tabla PRODUCTOS, en my query del SQLyog, por ejemplo:

Código MySQL:
Ver original
  1. UPDATE catalogo_productos
  2. SET Existencia=Existencia-1
  3. WHERE catalogo_producto_id='00003'

si me registra números negativos en la existencia, el problema es cuando manda a llamar el disparador.

Este es el codigo de mi disparador:

Código MySQL:
Ver original
  1. UPDATE catalogo_productos
  2.         SET Existencia=Existencia - new.Cantidad,
  3.         Usuario_Modifico=new.Usuario_Creo,
  4.         Fecha_Modifico=new.Fecha_Creo
  5.         WHERE Catalogo_Producto_Id=new.Catalogo_Producto_Id;

Por qué pasa esto?, espero haberme explicado y que me puedan ayudar, Gracias de antemano...
  #2 (permalink)  
Antiguo 21/06/2013, 09:39
Avatar de 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: Problema con numeros negativos

Cita:
Que en lugar de actualizar la existencia a nÚmeros negativos me ingresa el numero mayor del rango de datos de tipo INT (2147483647).
Eso sólo puede ocurrir por desborde de representación, pero para saber la causa exacta necesitaríamos trazar el proceso y los valores que recibe, a fin de entender en qué punto estás cargando algo mal.
Ahor abien, cuando veo que dices esto:
Cita:
Manejo un procEdimiento que me va insertando en detalle de salidas
y un disparador que me debe actualizar la existencia en CATALOGO_PRODUCTOS cuando se realiza un insert en DETALLE_SALIDAS
me hace pensar que estás desarrollando algo innecesariamente.

Si usas un SP para realizar el INSERT en la tabla de detalles, acción que dispara un trigger a otra tabla, ¿por qué no metes ambas cosas en el SP en forma secuencial y no ejecutas todo el SP dentro de una transaction? Si usas tablas InnoDB, eso te aseguraría consistencia, y ´no fallaría.
Usar un trigger para una tarea que se puede hacer en un SP (donde sería mas correcto), es desperdiciar recursos y quitar capacidad de depuración.
Los triggers son difíciles de depurar.

Más allá de esto, el problema se produce por datos cuando no por cálculo. Por ejemplo: si fuese que si el valor entrante en el campo Cantidad es negativo, aplicaría la regla de signos ya conocida: 1 -(-1) = 2.
Código MySQL:
Ver original
  1. mysql> SELECT (1 - (-1)) RESULTADO;
  2. +-----------+
  3. | RESULTADO |
  4. +-----------+
  5. |         2 |
  6. +-----------+
  7. 1 row in set (0.00 sec)
Con datos en ese contexto, en lugar de restar, sumas, así que te puedes imaginar el resultado de la historia.
Por supuesto que sin conocer los datos, esto es una suposición...
__________________
¿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 21/06/2013, 09:58
Avatar de tanliz  
Fecha de Ingreso: abril-2013
Ubicación: Irapuato
Mensajes: 63
Antigüedad: 11 años
Puntos: 1
Respuesta: Problema con numeros negativos

Tienes mucha razón!!! elimine el disparador, agregué la actualización en el procedimiento y ya funciona perfecto!, MUCHAS GRACIAS!!
  #4 (permalink)  
Antiguo 21/06/2013, 09:59
Avatar de 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: Problema con numeros negativos

Bueno, me alegro que funcionara.

__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: insert, numeros, sql, tabla
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 23:42.