Заметки из Зазеркалья

10.07.2023

Дополнительные возможности по работе с временными таблицами

Данная статья является анонсом новой функциональности.
Не рекомендуется использовать содержание данной статьи для освоения новой функциональности.
Полное описание новой функциональности будет приведено в документации к соответствующей версии.
Полный список изменений в новой версии приводится в файле v8Update.htm.

Планируется в 8.3.25

Добавление данных в существующую временную таблицу

Как известно, временная таблица создается при выполнении запроса с помощью предложения ПОМЕСТИТЬ, идущего после перечисления полей в инструкции ВЫБРАТЬ. Имя временной таблицы идет после ПОМЕСТИТЬ, а её структура определяется структурой самого запроса.

Такой запрос

ВЫБРАТЬ

    Номенклатура.Код КАК Код,

    Номенклатура.Наименование КАК Наименование   

ПОМЕСТИТЬ ВТ_Товары

ИЗ

    Справочник.Номенклатура КАК Номенклатура

;


создаст временную таблицу ВТ_Товары с полями Код и Наименование.

Добавить данные в уже созданную временную таблицу нельзя. Если мы захотим сложить в ВТ_Товары ещё и содержимое справочника Услуги:

ВЫБРАТЬ

    Номенклатура.Код КАК Код,

    Номенклатура.Наименование КАК Наименование  

ПОМЕСТИТЬ ВТ_Товары

ИЗ

    Справочник.Номенклатура КАК Номенклатура

;

ВЫБРАТЬ

    Услуги.Код КАК Код,

    Услуги.Наименование КАК Наименование

ПОМЕСТИТЬ ВТ_Товары

ИЗ

    Справочник.Услуги КАК Услуги

;

мы получим ошибку «Временная таблица уже существует».

В версии 8.3.25 появится возможность добавлять данные в уже существующую временную таблицу с помощью предложения ДОБАВИТЬ (ADD):

ВЫБРАТЬ

    Номенклатура.Код КАК Код,

    Номенклатура.Наименование КАК Наименование   

ПОМЕСТИТЬ ВТ_Товары

ИЗ

    Справочник.Номенклатура КАК Номенклатура

;

ВЫБРАТЬ

    Услуги.Код КАК Код,

    Услуги.Наименование КАК Наименование   

ДОБАВИТЬ ВТ_Товары

ИЗ

    Справочник.Услуги КАК Услуги

;

Структура запросов, добавляющих данные в существующую временную таблицу (состав колонок и их типы) должны совпадать со структурой временной таблицы, иначе возникнет ошибка «Структура существующей временной таблицы не соответствует структуре добавляемых данных».

Возможность добавлять данные в существующую временную таблицу позволит в ряде сценариев сократить количество «однотипных» временных таблиц в запросе, сделать текст запроса более читаемым, а исполнение запроса – более эффективным.

Создание нескольких индексов для временной таблицы

Для временной таблицы можно будет создавать несколько индексов для ускорения поиска по временной таблице. Для предложения ИНДЕКСИРОВАТЬ ПО будет реализовано расширение НАБОРАМ (SETS):

ИНДЕКСИРОВАТЬ ПО НАБОРАМ ((НаборПолей1)[ ,(НаборПолей2)[,…]])

Пример:

ВЫБРАТЬ

    Номенклатура.Код КАК Код,

    Номенклатура.Наименование КАК Наименование,

    Номенклатура.Артикул КАК Артикул

ПОМЕСТИТЬ ВТ_Товары

ИЗ

    Справочник.Номенклатура КАК Номенклатура

ИНДЕКСИРОВАТЬ ПО НАБОРАМ (

    (Код, Наименование),

    (Артикул)

)

Во временной таблице ВТ_Товары будут созданы два индекса – по двум полям (Код, Наименование) и по одному полю (Артикул).

Создавать индексы можно будет только при первом помещении данных во временную таблицу.

Уникальные индексы на временных таблицах

Для предложений ИНДЕКСИРОВАТЬ ПО будет реализована опция УНИКАЛЬНО (UNIQUE). При её использовании будет создан уникальный индекс.

ВЫБРАТЬ

    Номенклатура.Код КАК Код,

    Номенклатура.Наименование КАК Наименование,

    Номенклатура.Артикул КАК Артикул

ПОМЕСТИТЬ ВременнаяТаблица

ИЗ

    Справочник.Номенклатура КАК Номенклатура

ИНДЕКСИРОВАТЬ ПО НАБОРАМ (

    (Код, Наименование) УНИКАЛЬНО,

    (Артикул)

)

Встроенный язык будет расширен для поддержки новой функциональности. Конструктор запросов также будет доработан.

Надеемся, что новая функциональность позволит вам ещё эффективнее использовать такой мощный механизм, как временные таблицы.

Теги: 8.3.25  разработка 

Рассказать друзьям: