Определение оператора модификации таблицы «в памяти».
::=
Опция 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; // получаем нормальный код завершения