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 ;
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 ;
Respuesta de Roberto Alvarado
1