Я пытаюсь обернуть рекурсивный запрос временной таблицы внутри функции на MariaDB 10.3.7 на Ubuntu 18.04. Я пытался разбить утверждение на более основные части, но все работает правильно, пока не собрал все воедино.
Это пример выражения, которое я хочу превратить в функцию:
with recursive Descendants as (
select * from Characters where id = 91402
union
select c.* from Characters as c, Descendants as d
where d.id = c.mother_id or d.id = c.real_father_id
) select count(distinct(id)) from Descendants
Распечатывает количество символов-потомков, чего я и хочу.
А вот моя попытка превратить его в функцию:
create function count_descendants(cid int unsigned) returns int unsigned return (
with recursive Descendants as (
select * from Characters where id = cid
union
select c.* from Characters as c, Descendants as d
where d.id = c.mother_id or d.id = c.real_father_id
) select count(distinct(id)) from Descendants
);
Мария принимает это, но если я попытаюсь это использовать:
select count_descendants(91402);
Распечатывает это сообщение об ошибке:
ERROR 1146 (42S02) at line 12: Table 'ck2.Characters' doesn't exist
"ck2" - имя используемой базы данных. Я могу опубликовать схему, если что-то захочет это увидеть.
Редактировать: Я отправил сообщение об ошибке на трекер ошибок MariaDB: MDEV-16629