Рутина (или процедура) Вызывает ошибки при втором запуске только в PhpMyAdmin - PullRequest
0 голосов
/ 14 декабря 2018

Хорошо, поэтому я был после этого ответа здесь И я пытаюсь запустить эту процедуру в PhpMyAdmin:

begin

declare v_done tinyint unsigned default 0;
declare v_depth smallint unsigned default 0;

create temporary table hier(
 parent_cat_id smallint unsigned, 
 cat_id smallint unsigned, 
 depth smallint unsigned default 0
)engine = memory;

insert into hier select parent_cat_id, cat_id, v_depth from categories where cat_id = p_cat_id;

/* http://dev.mysql.com/doc/refman/5.0/en/temporary-table-problems.html */

create temporary table tmp engine=memory select * from hier;

while not v_done do

    if exists( select 1 from categories p inner join hier on p.parent_cat_id = hier.cat_id and hier.depth = v_depth) then

        insert into hier 
            select p.parent_cat_id, p.cat_id, v_depth + 1 from categories p 
            inner join tmp on p.parent_cat_id = tmp.cat_id and tmp.depth = v_depth;

        set v_depth = v_depth + 1;          

        truncate table tmp;
        insert into tmp select * from hier where depth = v_depth;

    else
        set v_done = 1;
    end if;

end while;

select 
 p.cat_id,
 p.name as category_name,
 b.cat_id as parent_cat_id,
 b.name as parent_category_name,
 hier.depth
FROM hier
INNER JOIN categories p ON hier.cat_id = p.cat_id
LEFT OUTER JOIN categories b ON hier.parent_cat_id = b.cat_id
ORDER BY hier.depth, hier.cat_id;

drop temporary table if exists hier;
drop temporary table if exists tmp;

end

И эта процедура работает, я запустил ее, используя следующий SQL:

call category_hier(1);

И я получаю желаемый результат.

Однако, когда я запускаю его снова, я все равно получаю тот же результат, только теперь PhpMyAdmin поднимает кучуошибки, начиная с ORDER BY:

enter image description here

Теперь этот список ошибок продолжается долго, и я думаю, что в основном это ошибки в PHPMyAdmin, но почемуэто происходит?Это должно быть что-то в SQL, хотя я могу найти там только один заказ, и это выглядит хорошо для меня.

Кажется, что если я открою процедуру и сохраню ее снова, а затем вызову процедуру, ошибки не будет.Но во второй раз процедура запускается и все остальные разы после того, как я получаю сообщение об ошибке.

Любой совет?

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