Подтвердить что ты не робот

Объем временных таблиц, созданных в хранимой процедуре MySQL

ВОПРОС ОТКЛЮЧАЕТСЯ! Когда я все правильно пишу, проблема уходит!

У меня есть хранимая процедура MySQL, которая создает временную таблицу. Когда я вызываю процедуру из приглашения mysql, она работает успешно, но если я затем выберем COUNT (*) из временной таблицы, я получаю сообщение об ошибке, что таблица не существует.

Временная таблица, созданная внутри хранимой процедуры, перестает существовать при завершении хранимой процедуры?

mysql> delimiter //
mysql> drop procedure if exists sp_temp_reciepts//
mysql> create procedure sp_temp_receipts ()
begin
  drop temporary table if exists receipts;
  create temporary table receipts
  (  ... snip ...
  );
  insert into receipts
  select ... snip ...
end//
mysql> delimiter ;
mysql> call sp_temp_reciepts();
Query OK, 46903 rows affected, 1 warning (2.15 sec)
mysql> select count(*) from receipts;
ERROR 1146 (42S02): Table 'receipts' doesn't exist
4b9b3361

Ответ 1

Этот вопрос старше года. Он заслуживает ответа. Вот оно:

Я только что увидел этот вопрос сегодня в DBA StackExchange: Как долго будет сохраняться временная таблица MEMORY, если я ее не отброшу (MySQL). Я просто ответил. В части я сказал следующее:

Согласно Книга

kdsjx

В главе 5 есть подзаголовок Возвращаемые результаты на другую сохраненную процедуру.

В параграфе 2 на стр. 117 говорится:

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

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