Усечение таблицы (TRUNCATE TABLE)
Функция
Ускоренная очистка таблицы и усечение файлов таблиц.
Спецификация
::=[DROP STORAGE | REUSE STORAGE | REUSE FILES]
[новые параметры таблицы] [WAIT | NOWAIT]
::=| DATAFILES описание файлов
| BLOBFILES описание файлов
| MAXROW количество записей
| MAXROWID количество записей
| PCTFILL процент заполнения
| PCTFREE процент заполнения
| BLOBPCT процент заполнения
::=::=Синтаксические правила
-
<Имя таблицы>должно ссылаться на базовую таблицу.Примечание
Команда TRUNCATE TABLE для глобальных временных таблиц игнорируется.
-
<Имя таблицы>не должно ссылаться на системную таблицу. -
Правом на усечение таблицы обладает ее владелец или любой другой пользователь с привилегиями на модификацию структуры таблицы (
ALTER), на удаление данных (DELETE) и уровнем прав доступа к БДRESOURCE. -
Слова
STORAGE,REUSEиFILESявляются ключевыми только в командеTRUNCATE. -
Описание параметров
INDEXFILES,DATAFILES,BLOBFILES,MAXROWID,MAXROW,PCTFILL,PCTFREEиBLOBPCTсм. в пункте «Создание таблицы». -
Если модификатор
WAIT(NOWAIT) не задан, по умолчанию действуетWAIT.
Общие правила
-
В БД с секретностью усекаемая таблица не должна содержать записей.
-
При усечении таблицы проверяется наличие триггеров на таблицу: если есть триггер на удаление из этой таблицы, то
TRUNCATEне выполняется. -
На усекаемую таблицу не должно быть ссылок из непустых таблиц БД.
-
Указания по размерам создаваемых файлов после усечения таблицы:
-
REUSE STORAGE– использовать те размеры файлов, которые были до усечения; -
REUSE FILES– использовать минимальные размеры файлов; -
DROP STORAGE– оставить по одному файлу минимального размера каждого типа.
По умолчанию используется опция
DROP STORAGE. -
-
Выполняется выравнивание значения
MAXROWIDна 1022. Т.е. если указать только значениеMAXROW(например, 2000) и не указыватьMAXROWID, то значениеMAXROWIDбудет браться изMAXROWс выравниванием (т.е. оно будет равно 2044). Если, наоборот, указатьMAXROWID(например, 2000), но не указыватьMAXROW, то сначала будет выровненMAXROWID(до значения 2044), а затем это значение будет присвоеноMAXROW(2044). -
Параметры
INDEXFILES,DATAFILES,BLOBFILES, если они заданы явно, имеют приоритет над опциямиDROP STORAGE,REUSE STORAGE,REUSE FILES. -
Команда является DDL-операцией, т.е. перед ее обработкой выполняется команда
COMMIT(фиксация в БД всех накопленных изменений). Откат операции, которая уже началась по данной команде, не возможен. -
Вся таблица блокируется на запись до окончания операции.
-
Удаляются все файлы таблицы: данных, индексов, BLOB-данных.
-
Новые файлы таблицы создаются по минимальному количеству (один файл данных; один файл индексов, если нет ссылок из описаний индексов на несколько индексных файлов; один файл BLOB-данных, если есть BLOB-столбцы или возможны длинные записи) и минимальному размеру: одна страница (4 Кбайта) битовой карты и по одной странице файла данных, индексов, BLOB-данных.
Примечание
Команда TRUNCATE TABLE не эквивалентна последовательности команд DROP TABLE и CREATE TABLE с новыми параметрами таблицы, т.к. при использовании TRUNCATE TABLE все системные ссылки на усекаемую таблицу остаются неизменными. В ином случае ссылки на эту таблицу из других таблиц, правила репликации, права доступа к таблице и т.д. будут потеряны.
Пример
create or replace table test(i int); insert into test values(1); insert into test values(2); insert into test values(3); select count(*) from test; | 3| truncate table test; select count(*)from test; | 0|