Ver Mensaje Individual
  #2 (permalink)  
Antiguo 11/03/2008, 19:15
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
Re: Procedimiento Almacenado Variables

Los nombres de las tablas tienen prioridad sobre los nombres asignados a las variables.
Pudiera decirse:
- Tabla mata a campo.
- Campo mata a variable.
En síntesis: No uses los mismos nombres para diferentes objetos o de lo contrario los resultados serán erráticos.

Además, mira bien el manual de referencia en el tema de procedimientos almacenados. Estás tratando de crear una traza de tabla por registro, cuando ya existen en MySQL sentencias y métodos mucho más eficientes para hacer el trabajo.
Me refiero puntualmente a esto:
Código:
WHILE actual < total DO

  SELECT conductor INTO dni FROM vacdestra LIMIT actual,1;
  SELECT COUNT(*) INTO vac FROM vacdestra WHERE conductor=dni AND actividad="V";
  SELECT COUNT(*) INTO tra FROM vacdestra WHERE conductor=dni AND actividad="T";
  SELECT COUNT(*) INTO des FROM vacdestra WHERE conductor=dni AND actividad="D";

  INSERT INTO tabla VALUES ( tra , des , vac );

  SET actual = actual + 1;
END WHILE;
Esto está mal, se hace de otra forma. Mirá este link: 19.2.11. Cursores

Como consejo, no hagas trazados donde puedas resolver con consultas...
Imaginate algo así:
Código:
INSERT INTO tabla
SELECT 
  conductor,
  SUM(IF(actividad='V',1,0)),
  SUM(IF(actividad='T',1,0)),
  SUM(IF(actividad='D',1,0))
FROM vacdestra
GROUP BY conductor;
Eso debería hacer:
- 1 full scan.
- Agrupar por conductor.
- Sumar 1 por cada coincidencia en cada comparación por cada registro leído.
- Insertar cada registro resultante en la tabla nueva.

Última edición por gnzsoloyo; 11/03/2008 a las 19:25