Временная таблица — это буфер для данных, который всегда под рукой. Временная таблица ведет себя также как и таблица базы данных, но данные она хранит, пока существует хотя бы одна ссылка на нее.
На физическом уровне временная таблица – это отдельный файл, создаваемый на жестком диске пользователя или на жестком диске сервера AOS. Так как только один пользователь имеет доступ к конкретной временной таблице, то отпадает необходимость в использовании транзакций (ttsbegin, ttscommit, ключевое слово forupdate).
Основное предназначение временных таблиц — это буфер данных; в него данные выгружаются из таблиц базы данных для последующей обработки.
Для временных таблиц можно также создавать индексы, связи (realtions).
Временная таблица создается двумя путями:
- Создание новой таблицы в AOT со свойством Temporary равным Yes. Хорошим тоном считается начинать название таких временных таблиц с «Tmp».
- «Превращение» обычной таблицы во временную с помощью метода setTmp.
Первый вариант не представляет особых сложностей. Рассмотрим второй.
Создайте новый джоб:
static void BLG_UseTemporaryTables(Args _args)
{
BLG_TestTable1 tbl;
;
print "1. что было в таблице до установки как временная";
while select tbl
{
print tbl.intField1, "-", tbl.strField2;
}
print "2. Делаем таблицу временной";
tbl.setTmp();
while select tbl
{
print tbl.intField1, "-", tbl.strField2;
}
tbl.intField1 = 123;
tbl.strField2 = "123";
tbl.insert();
tbl.intField1 = 456;
tbl.strField2 = "456";
tbl.insert();
print "3. Содержимое таблицы после ввода данных";
while select tbl
{
print tbl.intField1, "-", tbl.strField2;
}
pause;
}
Получили следующий результат:
Я предварительно внес несколько строк в таблицу BLG_TestTable1, которые и были отображены вначале.
Как только мы пометили таблицу как временную с помощью метода setTmp, то система переключила нашу табличную переменную на файловый буфер и более не работаем с таблицей базы данных. Метод setTmp оказывает такой эффект только на конкретную табличную переменную, все остальные табличные переменные, ссылающиеся на BLG_TestTable1 продолжат работать с базой данных.
Во втором разделе видно, что система не вывела никаких данных, так как временный буфер пока пуст.
В третьем разделе мы добавляем новые строки во временную таблицу (файл), эти строки доступны текущему пользователю, они не сохраняются в базе данных в таблице BLG_TestTable1.
Когда выполнение джоба заканчивается, то табличная переменная tbl уничтожается, в системе больше не существует ни одной ссылки на временный буфер. И при следующем запуске сборщика мусора этот файл с временными данными будет удален.
Последнее. Если в процессе работы вам потребовалась временная таблица и речь идет о данных из стандартных таблиц Аксапты, то прежде чем создавать новую временную таблицу посмотрите, существуют ли уже готовые. Готовые временные таблицы ищите по имени — оно начинается на «Tmp».
Итог
Временная таблица является удобным буфером для данных, которые не нужно хранить.