网关诊断示例

在网关体系结构中,驱动程序将请求发送到支持 ODBC 的网关。 网关将请求发送到 DBMS。 因为它是与驱动程序管理器接口的组件,因此驱动程序格式化并返回 SQLGetDiagRec 的参数。

例如,如果 Oracle 在 Microsoft Open Data Services 上基于 Rdb 的网关,如果 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."