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