2014-10-30 3 views
1

Я унаследовал некоторый код, который использует хранимые процедуры, и один из них не работает корректно.Временная таблица в хранимой процедуре не найдена в 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 для отладки хранимой процедуры.

+0

Оказывается, что этот вопрос не является вопросом кода, но проблема инструмента. Я добавил инструкции выбора во всей своей хранимой процедуре и возвратил результаты из временных таблиц. По какой-то причине Toad для MySQL не смог обработать отладку временными таблицами. Как только я определил это, я обнаружил, что в инструкции insert хранимой процедуры возникла проблема. – drneel

+0

Мы также получаем ту же ошибку в той же среде. В нашем случае это не каждый раз, когда-то это работает, и когда-то он дает таблицу ошибок «table_name» не существует. В нашем sp мы запускаем и создаем временную таблицу в соответствующих местах (и это работало в предыдущей версии mysql версии 5.5), и этот sp вызывается в цикле несколько раз. – Anil

ответ

0

Я не могу воспроизвести проблему. Какую еще информацию вы можете предоставить?

mysql> USE `test`; 
Database changed 

mysql> SELECT VERSION(); 
+-----------------+ 
| VERSION()  | 
+-----------------+ 
| 5.5.22-0ubuntu1 | 
+-----------------+ 
1 row in set (0.00 sec) 

mysql> DELIMITER // 

mysql> DROP PROCEDURE IF EXISTS `insert_record`// 
Query OK, 0 rows affected (0.00 sec) 

mysql> CREATE PROCEDURE `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`; 
    -> SELECT `code`; 
    -> END// 
Query OK, 0 rows affected (0.01 sec) 

mysql> CALL `insert_record`(NULL, NULL)// 
+--------+ 
| `code` | 
+--------+ 
| TEST | 
+--------+ 
1 row in set (0.00 sec) 

Query OK, 0 rows affected (0.00 sec) 

SQL Fiddle demo

Смежные вопросы