Пример диагностики шлюзов
В архитектуре шлюза драйвер отправляет запросы в шлюз, поддерживающий ODBC. Шлюз отправляет запросы в СУБД. Так как это компонент, который взаимодействует с диспетчером драйверов, драйвер форматирует и возвращает аргументы для SQLGetDiagRec.
Например, если Oracle основан на шлюзе rdb в Microsoft Open Data Services и если RDB не удалось найти таблицу EMPLOYEE, шлюз может создать это диагностическое сообщение:
"[42S02][-1][DEC][ODS Gateway][Rdb]%SQL-F-RELNOTDEF, Table EMPLOYEE is not defined "
"in schema."
Так как ошибка произошла в источнике данных, шлюз добавил префикс для идентификатора источника данных ([Rdb]) в диагностическое сообщение. Так как шлюз был компонентом, интерфейсируемым с источником данных, он добавил префиксы для своего поставщика ([DEC]) и идентификатор ([шлюз ODS]) в диагностическое сообщение. Он также добавил значение SQLSTATE и код ошибки Rdb в начало диагностического сообщения. Это позволило сохранить семантику собственной структуры сообщений и по-прежнему предоставить диагностические сведения ODBC драйверу. Драйвер анализирует сведения об ошибке, подключенные к инструкции ошибки шлюзом.
Так как драйвер шлюза является компонентом, который взаимодействует с диспетчером драйверов, он будет использовать предыдущее диагностическое сообщение для форматирования и возврата следующих значений из SQLGetDiagRec:
SQLSTATE: "42S02"
Native Error: -1
Diagnostic Msg: "[DEC][ODS Gateway][Rdb]%SQL-F-RELNOTDEF, Table EMPLOYEE is not "
"defined in schema."