Ver Mensaje Individual
  #5 (permalink)  
Antiguo 23/07/2014, 15:09
andres18281
 
Fecha de Ingreso: febrero-2013
Ubicación: Cali Colombia
Mensajes: 118
Antigüedad: 11 años, 9 meses
Puntos: 0
Saludos, gracias por la la informacion, fue de mucha ayuda, sin embargo no logro
dominar este codigo. Intente hacer manejar un Handler pero no supe hacerlo doble por mi falta de experiencia en mysql.
Intente trabajar con un LOOP de tipo REPEAT pero el workBench me recomienda usar
Repeatable no se porque pero lei algo que las tablas cuando es de tipo InnoDB es con Repeatable.

Le pido mil disculpas por la molestia, por favor colaborarme nuevamente en este codigo.

Mil gracias..

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 acumulador INT DEFAULT 0;
  11.    DECLARE nombre_producto VARCHAR(20);
  12.    DECLARE nit INT DEFAULT 0;
  13.   DECLARE accion INT DEFAULT 0;
  14.   DECLARE v_last_row_fetched,v_last_row_fetched2 INT DEFAULT 0;
  15.   DECLARE CONTINUE HANDLER FOR NOT FOUND SET  v_last_row_fetched=1;
  16.   DECLARE crs_num_fact CURSOR FOR SELECT fact_cod_fac,fact_fecha FROM Factura
  17.                                                 WHERE fact_fecha >= fecha_inicio AND fact_fecha <= fecha_final;
  18.  
  19.   DECLARE crs_cod_prod CURSOR FOR SELECT ord_cod_zap,pro_nomb,cal_cost,pro_nit FROM ord_compra oc, Producto p,Calzado c
  20.                                           WHERE ord_cod_fact = codigo_factura;
  21.    DECLARE cursor_suma CURSOR FOR SELECT COUNT(*) FROM Factura WHERE fact_fecha >= fecha_inicio AND fact_fecha <= fecha_final;
  22.    CREATE temporary TABLE informe (num INT(5) AUTO_INCREMENT PRIMARY KEY,fecha DATE,cod_cal INT(10),nomb_calVARCHAR(20),costo DECIMAL(6,2),nit INT(10))engine=memory;
  23.    OPEN cursor_suma;
  24.    FETCH cursor_suma INTO total_registro;
  25.    OPEN crs_num_fact;
  26.    OPEN crs_cod_prod;  -- abre el LOOP
  27.     crs_cod_fact_loop:LOOP
  28.          WHILE acumulador <= total_registro DO-- LOOP donde recorrera las fechas que se filtraron
  29.                 FETCH crs_num_fact INTO cod_factura,fecha_factura;
  30.                 OPEN crs_cod_prod;
  31.                  SET acumulador = acumulador + 1; -- contador de uno en uno.
  32.                 crs_cod_pro_loop:LOOP --
  33.                         FETCH crs_cod_prod INTO cod_producto, nombre_producto,costo,nit;
  34.                         INSERT INTO informe VALUES('',fecha_factura,cod_producto,nombre_producto,costo,nit);
  35.                         IF v_last_row_fetched = 1 THEN
  36.                             Leave crs_num_fact_loop;
  37.                         END IF;
  38.                  END LOOP crs_cod_pro_loop;
  39.          END WHILE;
  40.     CLOSE csr_num_fact;
  41.     CLOSE csr_cod_prod;
  42.   DROP TABLE IF EXISTS informe;
  43.  END;//
  44. delimiter ;

Última edición por gnzsoloyo; 23/07/2014 a las 17:26