четверг, 4 июня 2009 г.

Таблица: Временная таблица 1

Временная таблица — это буфер для данных, который всегда под рукой. Временная таблица ведет себя также как и таблица базы данных, но данные она хранит, пока существует хотя бы одна ссылка на нее.

На физическом уровне временная таблица – это отдельный файл, создаваемый на жестком диске пользователя или на жестком диске сервера 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».

Итог

Временная таблица является удобным буфером для данных, которые не нужно хранить.