У меня проблемы с курсором в процедуре 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» возвращает нулевые значения, и поэтому я не могу выполнить ОБНОВЛЕНИЕ в конце. У кого-нибудь была такая же проблема?
Заранее большое спасибо!