Для выполнения 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 (начиная с нулевого).