B.3.6.2 Проблемы временных таблиц
Временные таблицы, созданные с помощью CREATE TEMPORARY
TABLE, имеют следующие ограничения:
Временные таблицы поддерживаются только движками хранения
InnoDB,MEMORY,MyISAMиMERGE.Временные таблицы не поддерживаются для NDB Cluster.
Команда
SHOW TABLESне отображает временные таблицы.-
Для переименования временных таблиц,
RENAME TABLEне работает. ИспользуйтеALTER TABLEвместо этого:ALTER TABLE old_name RENAME new_name;
-
Нельзя ссылаться на временную таблицу более одного раза в одном запросе. Например, следующий запрос не работает:
SELECT * FROM temp_table JOIN temp_table AS t2;
Запрос генерирует следующую ошибку:
ERROR 1137: Can't reopen table: 'temp_table'
Эту проблему можно обойти, если в запросе можно использовать выражение общего вида (CTE) вместо временной таблицы. Например, этот запрос завершается ошибкой Не могу повторно открыть таблицу:
CREATE TEMPORARY TABLE t SELECT 1 AS col_a, 2 AS col_b; SELECT * FROM t AS t1 JOIN t AS t2;
Чтобы избежать ошибки, используйте предложение
WITH, определяющее CTE, вместо временной таблицы:WITH cte AS (SELECT 1 AS col_a, 2 AS col_b) SELECT * FROM cte AS t1 JOIN cte AS t2;
Ошибка Не могу повторно открыть таблицу также возникает, если вы ссылаетесь на временную таблицу несколько раз в хранимой функции под разными псевдонимами, даже если ссылки находятся в разных инструкциях внутри функции. Это может произойти для временных таблиц, созданных вне хранимых функций и используемых в вызывающих и вызываемых функциях.
Если временная таблица создаётся с тем же именем, что и существующая не временная таблица, то не временная таблица будет скрыта до тех пор, пока временная таблица не будет удалена, даже если таблицы используют разные движки хранения.
Существуют известные проблемы при использовании временных таблиц с репликацией. Более подробная информация представлена в Разделе 19.5.1.31, «Репликация и временные таблицы».
© 2025 Oracle
Licensed under the GPLv2 License.