Рекурсивный запрос: «Таблица не существует» внутри функции, но выполняется вне функции - PullRequest
0 голосов
/ 28 июня 2018

Я пытаюсь обернуть рекурсивный запрос временной таблицы внутри функции на 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

1 Ответ

0 голосов
/ 02 июля 2018
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...