Procedimientos almacenados

Hola como estas estoy haciendo una aplicación con visual baisc 6.0 y bdd mysql 5
Necesito sumar sus cantidades y hacer unos cálculos para visualizar lo que esta en piso o terminado, lo que esta por despachar, lo que esta en proceso el saldo el mínimo y el máximo del inventario general de unas referencias de productos.
Ya lo hice con un procedimiento almacenado y un cursor da los resultados que necesito pero el proceso es muy lento se demora más o menos 1 min en la consulta y mi maquina es buena,
quisieras que me sujiera alguna forma para optimizar este proceso.
Ahí le dejo el código para que lo analice
Gracias
DELIMITER $$
DROP PROCEDURE IF EXISTS `copia inventario_general` $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `copia inventario_general`()
BEGIN
    DECLARE done INT DEFAULT 0;
    DECLARE ref varchar(30);
    DECLARE por_despachar,ga3,es02,terminadas,piso,despacho,proceso,saldo,mini,maxi INT;
    DECLARE cur1 CURSOR FOR SELECT referencia FROM ficha_tecnica;
    DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
    truncate table inventario_general;
    OPEN cur1;
      REPEAT
        FETCH cur1 INTO  ref;
          IF not done  THEN
                select ifnull(sum(cantidad),0) into por_despachar from hoja_ruta where referencia=ref;
                select ifnull(sum(unidades_terminadas),0) into terminadas from cierre_ordenes where referencia=ref;
                select ifnull(sum(cantidad),0)into despacho from despacho where referencia=ref;
                select ifnull(sum(unidades_faltantes),0) into proceso from cierre_ordenes where referencia=ref;
                select min    into mini from ficha_tecnica where referencia=ref;
                select max    into maxi from ficha_tecnica where referencia=ref;
                set piso=ifnull((terminadas-despacho),0);
                set  saldo=((proceso+piso)- por_despachar);
                insert into inventario_general values (ref,piso,proceso,por_despachar,saldo,mini,maxi);
          END IF;
        UNTIL done
      END REPEAT;
    CLOSE cur1;
  END $$
DELIMITER ;

1 Respuesta

Respuesta
1
No entiendo tu lógica, pero ya que tienes un cursor y lo recorres, no entiendo el porque los select, si uno hace un cursor es para recorrer esos datos no para hacer diversos select dentro de el.
Hay varios que usan la misma tabla, y la misma condición, coloca esos en 1 sola instrucción, no en varias como los tienes.
Hola gracias por tu interés
Ahí el problema es como hacer el select para que sume en una tabla hoja_ruta, también sume en cierre_ordenes, en despacho y luego para hacer las operaciones de resta y suma y adicionarla a esas variables para después mostrarla en un Datagrid de visual basic 6.0
Si podrías orientarme de como gener el select te lo agradecería mucho más

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas