Модификация таблицы «в памяти»
Функция
Определение оператора модификации таблицы «в памяти».
Спецификация
::=Синтаксические правила
-
Опция
IN-MEMORYприменима только к базовой таблице, то есть<имя таблицы>должно ссылаться на базовую таблицу. -
Конструкция
NOT IN-MEMORYприменима только к таблице «в памяти», то есть<имя таблицы>должно ссылаться на таблицу «в памяти». -
Отсутствие
NOT IN-MEMORYилиIN-MEMORYравнозначно конструкцииNOT IN-MEMORY.
Общие правила
-
Если задана опция
IN-MEMORY, базовая таблица становится таблицей «в памяти» и активизируется. Если одновременно заданы опцииAUTOLOADи/илиAUTOSAVE, то они применяются к созданной таблице «в памяти». -
Если задана опция
NOT IN-MEMORY, таблица «в памяти» сохраняется на диск и становится базовой таблицей. -
Перевод таблицы из категории «в памяти» в категорию «базовая» выполняется только для предварительно сохранённой таблицы. Изменения в таблице «в памяти», выполненные после её сохранения, но перед выполнением оператора
ALTER TABLE, будут утеряны.create or replace table tst (i int unique) in-memory; insert into tst(i) values(1); insert into tst(i) values(2); insert into tst(i) values(3); save table tst; // после модификации таблицы эти изменения будут утеряны insert into tst(i) values(4); insert into tst(i) values(5); alter table tst not in-memory; // эти изменения будут сохранены в базовой таблице update tst set i=10 where rowid=1;
-
Базовая таблица, которая преобразуется в таблицу «в памяти», не должна иметь препятствующих этой операции ограничений (например, фразовых индексов, ссылок на себя).
-
Если опция
IN-NEMORYне задана, и указанная таблица уже является таблицей «в памяти», то указание опцииAUTOLOADи/илиAUTOSAVEустанавливает для таблицы «в памяти» эти свойства.
Пример
// создаём базовую таблицу create or replace table tst (i int unique); insert into tst(i) values(1); insert into tst(i) values(2); insert into tst(i) values(3); select * from tst; 1 2 3 // пробуем применить к базовой таблице операцию сохранения save table tst; // получаем код завершения о недопустимости данной операции // заменяем базовую таблицу на таблицу «в памяти» alter table tst in-memory; update tst set i=10 where rowid=1; select * from tst; 10 2 3 // пробуем применить к модифицированной таблице операцию сохранения save table tst; // получаем нормальный код завершения