Laravel 5.2 - 数据包故障

时间:2016-04-26 12:26:06

标签: mysql laravel-5.2

我在MySQL中有一个带有2个嵌套游标的存储过程。当我尝试调用它时,我收到错误Packects out of order - Expected 1 received 4

存储过程代码:

BEGIN
   DECLARE num_clientes INT DEFAULT 0;      
   DECLARE nInicio DATE;
   DECLARE nFin DATE;
   DECLARE nIdCliente INT;
   DECLARE clientCounter INT;
   DECLARE auxDias INT;
   DECLARE finClientes BOOLEAN;
   DECLARE finContratos BOOLEAN;
   DECLARE porcentaje DOUBLE;
   DECLARE clientes_proyecto CURSOR FOR SELECT id FROM clientes WHERE id_proyecto = selProyecto;
   DECLARE CONTINUE HANDLER FOR NOT FOUND SET finClientes = TRUE;

   SET num_clientes = (SELECT COUNT(clientes.id) from clientes WHERE id_proyecto = selProyecto);



   -- Declaración de un manejador de error tipo NOT FOUND

   OPEN clientes_proyecto;
   loop_clientesProyecto: LOOP

    -- Recogemos la id del Cliente
    FETCH clientes_proyecto INTO nIdCliente;
    -- Reseteamos los días trabajados
    SET auxDias = 0;

    BLOCK2: BEGIN
    DECLARE cliContratos CURSOR FOR SELECT fecha_inicio, fecha_fin FROM contratos_clientes WHERE id_cliente = nIdCliente;
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET finContratos = TRUE;
    -- Abrimos un segundo cursor para iterar los contratos de ese cliente
    OPEN cliContratos;
    loop_contratos: LOOP
        FETCH cliContratos INTO nInicio, nFin;
        IF nFin < CURDATE() THEN
            SET auxDias = auxDias + Datediff(nInicio, nFin);
         ELSE
            SET auxDias = auxDias + Datediff(nInicio, CURDATE());
         END IF;
        IF finContratos THEN
            LEAVE loop_contratos;
        END IF;
    END LOOP loop_contratos;
    CLOSE cliContratos;
    END BLOCK2;

    -- Ya tenemos los días trabajados del cliente, realizamos el cálculo del porcentaje
    SET porcentaje = porcentaje + ((((auxDias)/90)*(100/num_clientes))/100);

    IF finClientes THEN
        LEAVE loop_clientesProyecto;
    END IF;

   END LOOP loop_clientesProyecto;
   CLOSE clientes_proyecto;

   SELECT porcentaje;

END

在程序中我迭代我的客户表,然后,在CURSOR中我迭代他的合同来计算他工作的天数,然后计算百分比。此百分比是存储过程的返回值。

在我的PHP代码中,我只做DB :: select(&#39; CALL porcentaje_contratacion(3)&#39;)。

为什么会这样?我不清楚Packets乱序的含义。

0 个答案:

没有答案