Выбор курсора в возвращаемые нулевые значения - Mysql - PullRequest
0 голосов
/ 23 марта 2020

У меня проблемы с курсором в процедуре mysql. Это не первый раз, когда я пишу процедуру с использованием курсора в Mysql, но на этот раз я не могу решить свою проблему.

Вот код:

DELIMITER $$
CREATE PROCEDURE modifica_importi_fatt(IN numero_fatt VARCHAR(20),lavorazione VARCHAR(10),data_emissione_fatt VARCHAR(10))
BEGIN
    DECLARE idf1 INT DEFAULT 0;
    DECLARE sql_create_tab_bck VARCHAR(100) DEFAULT '';
    DECLARE var_idm VARCHAR(15) DEFAULT 'xxx';
    DECLARE finito BOOLEAN default FALSE;
    DECLARE var_imp_atteso DOUBLE DEFAULT 0.0;
    DECLARE var_idrow INT(10) DEFAULT 0;
    DECLARE var_impu FLOAT DEFAULT 0.0;
    DECLARE var_giorni INT DEFAULT 0;     

    DECLARE cur_dett_fatt cursor for
        (select dett_fatt.idm,tmp_fatt.importoatteso,dett_fatt.idrow,tmp_fatt.importounitario
            from dett_fatt, tmp_fatt,fatture 
                where dett_fatt.idm=tmp_fatt.idunicomov
                    and dett_fatt.idf1ura=fatture.idf1ura
                    and fatture.numerofattura=numero_fatt);

    DECLARE CONTINUE HANDLER FOR NOT FOUND SET finito = TRUE;

    SET @finito=FALSE;

    /* *** LAVORAZIONE EFFETTIVA */
IF(lavorazione='lav') THEN

        select idf1ura into @idf1 from fatture where numerofattura=numero_fatt; -- prelevo idf1ura della fattura che sto lavorando
        /* backup di dett_fatt per la fattura di cui si vanno a modificare gli importi */
        SET @sql_create_tab_bck=concat('CREATE TABLE dett_fatt_',@idf1,' as select * from dett_fatt where idf1ura=',@idf1);



        PREPARE stmt1 FROM @sql_create_tab_bck;
        EXECUTE stmt1;
        DEALLOCATE PREPARE stmt1;                      

        OPEN cur_dett_fatt;
        loop_upd_dett: LOOP
        FETCH cur_dett_fatt INTO var_idm,var_imp_atteso,var_idrow,var_impu; 
        IF (finito) THEN LEAVE loop_upd_dett;
        END IF;

        select concat('Verifico variabile idm = ',@var_idm);


            UPDATE dett_fatt
                SET imponibile=@var_imp_atteso, iva=round((@var_imp_atteso*0.22),2), importounitario=@var_impu 
                where idm=@var_idm and idf1ura=@idf1 and idrow=@var_idrow;
        END LOOP;               

                COMMIT;                
CLOSE cur_dett_fatt;


/* *** PRE-LAVORAZIONE *** */               
ELSEIF (lavorazione='pre_lav') THEN

    DO something...

ELSE
    select 'parametro in input "lavorazione" non congruo. Può essere "pre_lav" (fase 1 della procedura) oppure "lav" (fase 2 della procedura)' as esito_proc;
END IF;

END$$
DELIMITER ;

У меня нет проблем при создании процедуры, но она не работает должным образом, потому что «FETCH INTO» возвращает нулевые значения, и поэтому я не могу выполнить ОБНОВЛЕНИЕ в конце. У кого-нибудь была такая же проблема?

Заранее большое спасибо!

...