На сервере MySQL 8.0 имеется простая функция для записи в таблицу xxx с уникальным ключом (download_date, download_time):
CREATE function `insert_xxx` (_reason varchar(25), _download_date date, _download_time time) returns int unsigned
BEGIN
declare _id int unsigned;
insert ignore into xxx(reason, download_date, download_time) value(_reason, _download_date, _download_time);
select id into _id from xxx where download_date = _download_date and download_time = _download_time;
return _id;
END
Проблема в том, что при попытке записи уже имеющейся строки в таблице, функция должна просто возвращать id этой записи (insert ignore), но на самом деле возникает ошибка:
ERROR 1172 (42000): Result consisted of more than one row.
При этом таблица после такого вызова функции никак не меняется, как и должно быть.
В чем может быть проблема?
PS. Поле id является первичным ключом.