Я унаследовал некоторый код, который использует хранимые процедуры, и один из них не работает корректно.Временная таблица в хранимой процедуре не найдена в MySQL
Хранимая процедура использует временную таблицу для вставки данных позже в процедуру. Однако, когда я выполняю хранимую процедуру, данные не вставляются. Когда я его отладки, я получаю ошибку:
Table 'db.testtable' doesn't exist
Я урезанная хранимую процедуру на следующий код, и он не работает. Я всегда получаю ошибку в инструкции SELECT. Все выглядит хорошо, из того, что я могу сказать, на основе примеров, которые я видел.
DROP PROCEDURE IF EXISTS db.insert_record;
CREATE PROCEDURE db.`insert_record`(id int, status int)
BEGIN
DECLARE code varchar(45);
DROP TEMPORARY TABLE IF EXISTS testTable;
CREATE TEMPORARY TABLE testTable AS (SELECT 'TEST' AS fakeColumn);
SELECT fakeColumn INTO code FROM testTable;
END;
Я также подтвердил, что пользователь, с которым я подключен, имеет разрешение на создание временных таблиц; на самом деле он имеет все разрешения доступные
Дополнительные детали
Запуск MySQL 5.6 на Windows.
Если я принимаю инструкции drop/create/select самостоятельно и запускаюсь как сценарий, он ведет себя так, как ожидалось.
Использование Toad для MySQL для отладки хранимой процедуры.
Оказывается, что этот вопрос не является вопросом кода, но проблема инструмента. Я добавил инструкции выбора во всей своей хранимой процедуре и возвратил результаты из временных таблиц. По какой-то причине Toad для MySQL не смог обработать отладку временными таблицами. Как только я определил это, я обнаружил, что в инструкции insert хранимой процедуры возникла проблема. – drneel
Мы также получаем ту же ошибку в той же среде. В нашем случае это не каждый раз, когда-то это работает, и когда-то он дает таблицу ошибок «table_name» не существует. В нашем sp мы запускаем и создаем временную таблицу в соответствующих местах (и это работало в предыдущей версии mysql версии 5.5), и этот sp вызывается в цикле несколько раз. – Anil