Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    [MySQL] Problema con loop

    ciao!

    sto cercando di fare questa cosa: ogni sera lancio una query, e per tutti gli articoli trovati faccio un update in un'altra tabella.

    funziona, ma scarica le qta doppie, come se facesse più loop:
    codice:
    DELIMITER //
    DROP PROCEDURE IF EXISTS oc_scarica_giacenza_oggi //
    CREATE PROCEDURE oc_scarica_giacenza_oggi()
        NO SQL
    BEGIN
        DECLARE qta INT;
        DECLARE model VARCHAR(64);
        DECLARE bDone INT;
        DECLARE curs CURSOR FOR SELECT oop.model    codice,
                                       oop.quantity qta
                                FROM oc_order oo
                                         INNER JOIN oc_order_product oop ON oo.order_id = oop.order_id
                                WHERE DATE(oo.date_modified) = DATE(NOW());
        -- AND oo.order_status_id = 5
        DECLARE CONTINUE HANDLER FOR NOT FOUND SET bDone = 1;
    
        OPEN curs;
        SET bDone = 0;
        REPEAT
            FETCH curs INTO model, qta;
            UPDATE giacenze SET giacenza_qta = (giacenza_qta - qta) WHERE giacenza_id = CAST(model AS SIGNED);
        UNTIL bDone END REPEAT;
        CLOSE curs;
    END
    dove sto sbagliando??

  2. #2
    mi sembra che questa funzioni:

    codice:
    DELIMITER //
    DROP PROCEDURE IF EXISTS oc_scarica_giacenza_oggi //
    CREATE PROCEDURE oc_scarica_giacenza_oggi()
        NO SQL
    BEGIN
        DECLARE qta INT;
        DECLARE model VARCHAR(64);
        DECLARE finished INT DEFAULT 0;
        DECLARE curs CURSOR FOR SELECT oop.model    codice,
                                       oop.quantity qta
                                FROM oc_order oo
                                         INNER JOIN oc_order_product oop ON oo.order_id = oop.order_id
                                WHERE DATE(oo.date_modified) = DATE(NOW())
                                  AND oo.order_status_id = 5;
        DECLARE CONTINUE HANDLER FOR NOT FOUND SET finished = 1;
    
        OPEN curs;
        setGiac:
        LOOP
            FETCH curs INTO model, qta;
    
            IF finished = 1 THEN
                LEAVE setGiac;
            END IF;
    
            UPDATE giacenze SET giacenza_qta = (giacenza_qta - qta) WHERE giacenza_id = CAST(model AS SIGNED);
        END LOOP setGiac;
        CLOSE curs;
    END

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.