Ver Mensaje Individual
  #1  
Antiguo 16-01-2015
Toni Toni is offline
Miembro
 
Registrado: may 2003
Ubicación: Barcelona - España
Posts: 364
Reputación: 24
Toni Va por buen camino
Problema con group by

Buenas tardes!

Tengo un problema en una aplicación de inventarios que al validar el inventario hay algunos registros que no los procesa. Tengo la constancia que dichos registros estan, pero el procedimiento almacenado que procesa todo la tabla en cuestión parece saltarse algun que otro registro. De unos 1.000 registros me han reportado unos 3 fallos 'misteriosos'. Como son unos procesos que funcionan hace mucho tiempo y nunca dieron problemas, lo primero que pienso es que han hecho algo mal. Por este motivo les hice que me guardasen unos listados con la información de las tablas implicadas y asi poder buscar el problema.

Resumiendo un poco, ya he descartado el fallo del usuario, tengo constancia de que existian unos registros de inventario pero al realizar el proceso de validacion se ha vuelto a dejar por procesar unos registros. Todo esto deja constancia en otra tabla y esta evidencia que no se procesaron dichos registros.

Concluyendo, tengo localizado el problema en un procedimiento almacenado en el bucle principal que hace una agrupación por producto y la clave principal es ("idEmpresa","idAlmacen", "idProducto")

Código SQL [-]

  FOR SELECT "idProducto" FROM "Inventario"
  WHERE "idEmpresa"=:P_EMPRESA and "idAlmacen"=:P_ALMACEN
  GROUP BY "idEmpresa","idAlmacen", "idProducto"
  INTO :V_PRODUCTO DO
  BEGIN

     REGISTRO_PRODUCTO_PROCESADO;

     AJUSTE_STOCKS_PRODUCTO;

  END

Pues parece ser que por alguna razon esta select agrupada no retorna algun registro. Antes de decir tal cosa me he asegurado en averiguar que el dato que no 'procesa' estaba. He intentado reproducir el problema haciendo la select desde el EMS Manager, haciendo la misma operativa que han realizado los operacios (ya que tengo las copias de seguridad del antes y despues) y no consigo reproducirlo.

Este procedimiento que comento deja constancia en otra tabla de cada registro que procesa y no hay nada sobre estos registros que como ya dije si estaban, tanto en el listado justo antes de hacer el proceso como en la copia de la base de datos anterior.

La pregunta es: en el supuesto de que tenga razon y falle esta simple select de agrupación que creeis que podria ser?

Os pongo un ejemplo de que me refiero, por ejemplo podria ser como hace Firebird con comparaciones cuando hay datos a NULL, que no los tiene en consideración y el resultado parece extraño cuando no se sabe como actua.

Se os ha dado algun caso similar?
__________________
Saludos,

Bitman

Última edición por Toni fecha: 16-01-2015 a las 21:22:04.
Responder Con Cita