Перейти к основному содержимому

Работа с запросами во встроенном языке

Пример создания, выполнения запроса и обработки его результатов во встроенном языке может выглядеть следующим образом:

// Установить значения параметров запроса.
знч ИмяПроцесса = "Обмен"

// Задать текст запроса.
знч Запрос = Запрос{
ВЫБРАТЬ
ОбработанныеСообщения.КодУчастника КАК КодУчастника,
ОбработанныеСообщения.ИмяУзла КАК ИмяУзла
ИЗ
ОбработанныеСообщения КАК ОбработанныеСообщения
ГДЕ
ОбработанныеСообщения.ИмяПроцесса == %ИмяПроцесса
}

// Обойти результат запроса и обработать его.
для СтрокаРезультата из Запрос.Выполнить()
пер КодУчастника = СтрокаРезультата.КодУчастника
пер ИмяУзла = СтрокаРезультата.ИмяУзла
;

Литерал или произвольный запрос

Для создания запроса можно использовать два способа:

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

Однако есть случаи, когда литерал не подходит и нужно использовать произвольный запрос. Например, если текст запроса формируется динамически, сложным алгоритмом. В этом случае компилятор ничего не знает о тексте запроса. Для него это просто строка, причем какая именно строка будет использована для доступа к базе данных, станет известно только во время работы приложения. По этой причине на этапе компиляции тип колонок запроса определить невозможно и все ошибки, связанные с этим, будут обнаружены только во время работы.

В первом и во втором случае используются разные типы встроенного языка и поэтому результаты запроса нужно обрабатывать разным образом.

примечание

Ограничение: в литерале запроса нельзя использовать запрос вида ВЫБРАТЬ * ИЗ ЖурналСобытий