Ver Mensaje Individual
  #3 (permalink)  
Antiguo 22/07/2014, 18:29
andres18281
 
Fecha de Ingreso: febrero-2013
Ubicación: Cali Colombia
Mensajes: 118
Antigüedad: 11 años, 9 meses
Puntos: 0
Busqueda procedimiento en Mysql

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 original
  1. delimiter //
  2. CREATE PROCEDURE devuelve_informe_venta(IN fecha_inicio DATE, IN fecha_final DATE)
  3.  
  4. BEGIN    
  5.    DECLARE fecha_factura DATE;
  6.    DECLARE codigo_facura INT DEFAULT 0;
  7.    DECLARE cod_producto INT DEFAULT 0;
  8.    DECLARE costo DOUBLE DEFAULT 0.0;
  9.    DECLARE total_registro INT DEFAULT 0;
  10.    DECLARE nombre_producto VARCHAR(20);
  11.    DECLARE nit INT DEFAULT 0;
  12.    DECLARE crs_num_fact CURSOR FOR SELECT fact_cod_fac,fact_fecha FROM Factura
  13.                                                 WHERE fact_fecha >= fecha_inicio AND fact_fecha <= fecha_final;
  14.    DECLARE crs_cod_prod CURSOR FOR SELECT ord_cod_zap,pro_nomb,cal_cost,pro_nit FROM ord_compra oc, Producto p,Calzado c
  15.                                           WHERE ord_cod_fact = codigo_factura;
  16.    DECLARE cursor_suma CURSOR FOR SELECT COUNT(*) FROM Factura WHERE fact_fecha >= fecha_inicio AND fact_fecha <= fecha_final;
  17.  --  declare Continue Handler FOR SQLSTATE   'un problema encontrado 1064' as msn;
  18.    DROP TABLE IF EXISTS informe;
  19.    CREATE TABLE informe(num INT(5) AUTO_INCREMENT PRIMARY KEY,fecha DATE,cod_cal INT(10),nomb_cal VARCHAR(20),costo DECIMAL(6,2),nit INT(10))ENGINE = MEMORY;
  20.  
  21.    OPEN cursor_suma;
  22.    FETCH cursor_suma INTO total_registro;
  23.    OPEN crs_num_fact;
  24.    BEGIN
  25.          crs_num_fact_loop:LOOP -- LOOP donde recorrera las fechas que se filtraron
  26.          FETCH crs_num_fact INTO cod_factura,fecha_factura;
  27.          SET total_registro = total_registro + 1; -- contador de uno en uno.
  28.          crs_cod_pro_loop:LOOP -- segundo LOOP donde realiza el la busqueda de nombre de productos, codigo y costo.
  29.             OPEN crs_cod_prod;  -- abre el LOOP
  30.             FETCH crs_cod_prod INTO cod_producto, nombre_producto,costo,nit;
  31.                     INSERT INTO informe VALUES('',fecha_factura,cod_producto,nombre_producto,costo,nit);
  32.                         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.
  33.                           CLOSE csr_num_fact;
  34.                           CLOSE csr_cod_prod;
  35.                           iterate crs_num_fact_loop; -- cierra el primer LOOP
  36.                           iterate crs_cod_pro_loop; -- cierra el segundo LOOP
  37.                         END IF;
  38.          END LOOP crs_cod_pro_loop;
  39.          END LOOP crs_fact_loop;
  40.     END;
  41.  END;//
  42. delimiter ;