Вот мое упрощенное значение, значение строки rent_ids возвращает значение null после цикла. Я уже знаю, что цикл работает правильно и что значение rent_ids изменяется с каждым итеративным.Значение хранимой процедуры MySQL переменной возвращается к нулевому концу после завершения цикла
BEGIN
DECLARE rent_ids VARCHAR(265);
DECLARE tmp_rent_id int;
create temporary table due_rent_ids (rent_id int);
SET rent_ids = "";
set @test = "Insert into due_rent_ids (rent_id) select unit_id from tbl_rent";
PREPARE stmt1 FROM @test;
EXECUTE stmt1;
BEGIN
DECLARE cur1 CURSOR for select rent_id from due_rent_ids;
OPEN cur1;
read_loop: LOOP
FETCH cur1 INTO tmp_rent_id;
IF rent_ids = "" THEN
SET rent_ids = tmp_rent_id;
ELSE
SET rent_ids = concat(rent_ids, ", ", tmp_rent_id);
END IF;
END LOOP;
CLOSE cur1;
END;
select * from tbl_unit where unit_id in (rent_ids);
DEALLOCATE PREPARE stmt1;
END
Почему бы вам просто не использовать 'SELECT GROUP_CONCAT (rent_id) FROM due_rent_ids'? – Barmar
'IN (rent_ids)' не будет разделять строку на запятую. Он просто ищет точное совпадение со всей строкой. – Barmar