Выполнение SQL-запросов в реальном времени

Для выполнения SQL-запросов к подключенной БД в реальном времени в узле должен быть создан канал класса CALL с типом вызова SQLQuery, настроенный на вызов шаблона связи с БД. При данном типе вызова атрибут Интервал выборки канала CALL не используется, тип канала не имеет значения (см. Атрибуты канала класса CALL ).

С помощью атрибута Параметр канала CALL можно задать номер возвращаемой строки из выборки, полученной из таблицы БД в результате запроса. Если Параметр=0 (значение по умолчанию), возвращается последняя строка.

Значение канала CALL задает номер выполняемого запроса (см. Создание SQL-запросов ). После отработки значение канала автоматически сбрасывается в 0.

Если в запросе используется аргумент, для которого задано значение по умолчанию (см. Поля редактора аргументов ), то при выполнении запроса монитор использует привязку аргумента, а если она не задана – значение по умолчанию.

Если SQL-запрос по каким-либо причинам выполнить невозможно, то по истечении 600 секунд с момента инициализации запроса каналу CALL устанавливается признак аппаратной недостоверности.

В атрибут 87, CC канала CALL с данным типом вызова записывается время (в миллисекундах) между началом передачи SQL-запроса драйверу БД и готовностью драйвера БД к приему следующего SQL-запроса (см. Атрибуты каналов, отображаемые профайлером ). Пока драйвер не подтвердил готовность, в атрибуте 87 хранится время начала передачи.

МРВ не управляет транзакциями и не контролирует их; т.е., за целостность БД отвечает СУБД.

В атрибут 91, I1 записывается число строк в выборке, полученной из таблицы БД в результате запроса.

В атрибут 92, I2 записывается код ошибки (см. Коды диагностируемых ошибок ).

Для записи в протокол профайлера информации о взаимодействии с БД используется системная переменная @Debug (см. Группа СИСТЕМНЫЕ ).

По умолчанию, МРВ выполняет одновременно только один SQL запрос. Этот режим может быть отменен с помощью файла TMcom_<ordinal>.cnf (см. Задание параметров работы мониторов ).

Извлечение столбцов

Допустима следующая конфигурация:

   канал CALL.SQLQuery (INPUT, Параметр=0) содержит единственный запрос с конструкцией SELECT;

   к аргументу канала CALL.SQLQuery, который используется в качестве подстановки в запросе, привязан атрибут 0, R канала CALL.ChGroupReq.

При CALL.SQLQuery.In=0xFFFF все извлеченные значения столбца последовательно записываются в аргументы канала CALL.ChGroupReq.

Извлечение строк

Допустима следующая конфигурация:

   канал CALL.SQLQuery (INPUT, Параметр<>0) содержит единственный запрос с конструкцией SELECT.

В этом случае по команде CALL.SQLQuery.In=0xFFFF выполняется запрос, после чего в CALL.SQLQuery.In может быть многократно записано число, в котором должен быть установлен бит 15 (0x8000), а биты 0-12 задают номер строки, извлекаемой из полученной выборки. Значения извлеченной строки записываются в аргументы канала CALL.SQLQuery, используемые в виде подстановок в запросе.

Групповая запись

Допустима следующая конфигурация:

   канал CALL.SQLQuery (OUTPUT) содержит единственный запрос с конструкцией INSERT;

   к аргументу канала CALL.SQLQuery, который используется в качестве подстановки в запросе, привязан атрибут 0, R канала CALL.ChGroupReq или CALL.TVC.

В этом случае в столбец записывается CALL.SQLQuery.R аргументов канала CALL.ChGroupReq / CALL.TVC (начиная с нулевого).