Работа с временными таблицами в языке запросов
В языке запросов можно использовать временные таблицы. Они повышают производительность запросов и делают сложные запросы более легкими для восприятия.
Для работы с временными таблицами используются:
- тип встроенного языка
ОбластьВидимостиВременныхТаблиц
, который хранит в себе данные временных таблиц; - синтаксис языка запросов, позволяющий создавать новые временные таблицы и использовать существующие временные таблицы.
Область видимости временных таблиц
Область видимости временных таблиц предназначена для управления временем жизни временных таблиц, создаваемых в процессе работы приложения.
В одном приложении можно создать одну или несколько областей видимости, каждая из которых хранит свой набор временных таблиц. Каждая временная таблица однозначно идентифицируется своим именем, а в пределах одной области видимости все временные таблицы должны иметь уникальные имена.
Экземпляр типа ОбластьВидимостиВременныхТаблиц
можно создать с помощью метода ОбластьВидимостиВременныхТаблиц.Открыть()
:
исп Область1 = ОбластьВидимостиВременныхТаблиц.Открыть()
При выполнении каждого запроса вы явно задаете ему область видимости временных таблиц (подробнее). С таблицами, расположенными в этой области видимости, ваш запрос может работать. Таблицы из других областей видимости ему недоступны.
Если вы не задаете запросу область видимости временных таблиц, то такой запрос не сможет работать с временными таблицами, если только это не пакетный запрос, который создает и заполняет временную таблицу в своем составе.
Доступность существующих временных таблиц
При создании новой области видимости таблицы, созданные в су ществующих областях видимости, недоступны в новой области. Чтобы они стали доступны, используйте параметр метода:
// Области, существовавшие ранее.
исп Область1 = ОбластьВидимостиВременныхТаблиц.Открыть()
...
исп Область2 = ОбластьВидимостиВременныхТаблиц.Открыть()
...
// Новая область, включающая в себя область 2
исп Область3 = ОбластьВидимостиВременныхТаблиц.Открыть(Ложь)
При этом все таблицы из предыдущей открытой области (Область2
) становятся доступны в этой области (Область3
).
Создание временной таблицы
Временную таблицу можно создать двумя способами:
- На основе запроса выборки данных (ВЫБРАТЬ) — таблица будет создана и сразу же заполнена данными.
- На основе явного описания (СОЗДАТЬ ВРЕМЕННУЮ ТАБЛИЦУ). После этого ее нужно заполнить данными (ВСТАВИТЬ) и создать индекс (СОЗДАТЬ ИНДЕКС).
Рассмотрим подробнее первый вариант создания временной таблицы.
// Создать область видимости. Она понадобится другими запросам,
// которые будут использовать эту же временную таблицу.
исп Область1 = ОбластьВидимостиВременныхТаблиц.Открыть()
// Создать запрос, выбирающий данные и помещающий их
// во временную таблицу.
знч Запрос = Запрос{ВЫБРАТЬ
Сотрудники.Ссылка КАК Ссылка,
Сотрудники.ФИО КАК ФИО,
Сотрудники.Код КАК Код
ПОМЕСТИТЬ
ВременнаяТаблица
ИЗ
Сотрудники КАК Сотрудники
ИНДЕКСИРОВАТЬ ПО
Код}
// Выполнить запрос и заполнить временную таблицу.
Запрос.Выполнить()
В запросе используются предложения ПОМЕСТИТЬ и ИНДЕКСИРОВАТЬ ПО, которые помещают выбранные данные во временную таблицу и создают в ней индекс по полю Код. Псевдонимы элементов списка выборки (Ссылка, ФИО, Код) становятся именами полей временной таблицы.
Результат исполнения такого запроса будет содержать количество записей, помещенных в созданную таблицу.
Использование временных таблиц
Для работы с временными таблицами в запросе, время жизни которых отличается от времени исполнения запроса, следует открыть область видимости временных таблиц. После этого к временным таблицам, содержащимся в данной области видимости, можно обращаться по имени как к обычным таблицам запроса.
Все запросы, которые работают с одними и теми же временными таблицами, должны исполняться в рамках одной и той же области видимости временных таблиц.
Удаление временных таблиц
Для удаления некоторых записей из временной таблицы используйте предложение УДАЛИТЬ, а для удаления всей временной таблицы используйте предложение УНИЧТОЖИТЬ.