Saludos, tengo el siguiente procedure el cual tengo problemas para que funcione.
Si requieren saber cuales son las tablas, les dejo el siguiente link http://pastebin.com/9XrKZhkH como anexo al problema, no lo publico aqui
porque es extenso y puede ser molesto para alguno.
USE almacen3;
-- Procedimiento con dos parametros de entrada, fecha inicio y fecha final el cual
-- selecciona todas las facturas que estan entre esas fechas. En otro loop hace una
-- busqueda en la tabla que esta relacionada con factura "ord_compra" y selecciona
-- la columna que tiene el nº de factura. En el segundo LOOP maneja un joins triple
-- con el fin de seleccionar el nombre, costo y codigo de los productos que fueron
-- vendidos. Por ultimo se crea una tabla en memoria donde almacenara los valores
-- que se consultaron con el fin de realizar informes mas sencillos.
Código MySQL:
Ver originaldelimiter //
WHERE fact_fecha
>= fecha_inicio
AND fact_fecha
<= fecha_final
; DECLARE crs_cod_prod CURSOR FOR
SELECT ord_cod_zap
,pro_nomb
,cal_cost
,pro_nit
FROM ord_compra oc
, Producto p
,Calzado c
WHERE ord_cod_fact
= codigo_factura
; -- declare Continue Handler FOR SQLSTATE 'un problema encontrado 1064' as msn;
OPEN cursor_suma;
FETCH cursor_suma
INTO total_registro
; OPEN crs_num_fact;
crs_num_fact_loop:LOOP -- LOOP donde recorrera las fechas que se filtraron
FETCH crs_num_fact
INTO cod_factura
,fecha_factura
; SET total_registro
= total_registro
+ 1; -- contador de uno en uno. crs_cod_pro_loop:LOOP -- segundo LOOP donde realiza el la busqueda de nombre de productos, codigo y costo.
OPEN crs_cod_prod; -- abre el LOOP
FETCH crs_cod_prod
INTO cod_producto
, nombre_producto
,costo
,nit
; INSERT INTO informe
VALUES('',fecha_factura
,cod_producto
,nombre_producto
,costo
,nit
); IF total_registro
>= crs_num_fact
THEN -- finaliza la interaccion de ambos LOOP pues ya ha llegado al final del total de facturas a interar. CLOSE csr_num_fact;
CLOSE csr_cod_prod;
iterate crs_num_fact_loop; -- cierra el primer LOOP
iterate crs_cod_pro_loop; -- cierra el segundo LOOP
END LOOP crs_cod_pro_loop
; delimiter ;