Partilhar via


Função SQLGetDiagField

Conformidade
Versão introduzida: Conformidade com as normas ODBC 3.0: ISO 92

Resumo
SQLGetDiagField retorna o valor atual de um campo de um registro da estrutura de dados de diagnóstico (associado a um identificador especificado) que contém informações de erro, aviso e status.

Sintaxe


SQLRETURN SQLGetDiagField(  
     SQLSMALLINT     HandleType,  
     SQLHANDLE       Handle,  
     SQLSMALLINT     RecNumber,  
     SQLSMALLINT     DiagIdentifier,  
     SQLPOINTER      DiagInfoPtr,  
     SQLSMALLINT     BufferLength,  
     SQLSMALLINT *   StringLengthPtr);  

Argumentos

HandleType
[Entrada] Um identificador de tipo de identificador que descreve o tipo de identificador para o qual o diagnóstico é necessário. Deve ser uma das seguintes opções:

  • SQL_HANDLE_DBC

  • SQL_HANDLE_DBC_INFO_TOKEN

  • SQL_HANDLE_DESC

  • SQL_HANDLE_ENV

  • SQL_HANDLE_STMT

SQL_HANDLE_DBC_INFO_TOKEN alça é usada apenas pelo Gerenciador de Driver e pelo driver. Os aplicativos não devem usar esse tipo de identificador. Para obter mais informações sobre SQL_HANDLE_DBC_INFO_TOKEN, consulte Desenvolvendo o reconhecimento Connection-Pool em um driver ODBC.

Manipular
[Entrada] Um identificador para a estrutura de dados de diagnóstico, do tipo indicado por HandleType. Se HandleType estiver SQL_HANDLE_ENV, Handle poderá ser um identificador de ambiente compartilhado ou não compartilhado.

RecNumber
[Entrada] Indica o registro de status do qual o aplicativo busca informações. Os registros de status são numerados a partir de 1. Se o argumento DiagIdentifier indicar qualquer campo do cabeçalho de diagnóstico, RecNumber será ignorado. Se não, deve ser mais de 0.

DiagIdentifier
[Entrada] Indica o campo do diagnóstico cujo valor deve ser retornado. Para obter mais informações, consulte a seção "DiagIdentifier Argument" em "Comentários".

DiagInfoPtr
[Realização] Ponteiro para um buffer no qual retornar as informações de diagnóstico. O tipo de dados depende do valor de DiagIdentifier. Se DiagInfoPtr for um tipo inteiro, os aplicativos devem usar um buffer de SQLULEN e inicializar o valor para 0 antes de chamar essa função, pois alguns drivers podem gravar apenas os 32 bits ou 16 bits inferiores de um buffer e deixar o bit de ordem superior inalterado.

Se DiagInfoPtr for NULL, StringLengthPtr ainda retornará o número total de bytes (excluindo o caractere de terminação nula para dados de caracteres) disponíveis para retornar no buffer apontado por DiagInfoPtr.

BufferLength
[Entrada] Se DiagIdentifier for um diagnóstico definido por ODBC e DiagInfoPtr apontar para uma cadeia de caracteres ou um buffer binário, esse argumento deverá ser o comprimento de *DiagInfoPtr. Se DiagIdentifier for um campo definido por ODBC e * DiagInfoPtr for um inteiro, BufferLength será ignorado. Se o valor em *DiagInfoPtr for uma cadeia de caracteres Unicode (ao chamar SQLGetDiagFieldW), o argumento BufferLength deverá ser um número par.

Se DiagIdentifier for um campo definido pelo driver, o aplicativo indicará a natureza do campo para o Gerenciador de Driver definindo o argumento BufferLength. BufferLength pode ter os seguintes valores:

  • Se DiagInfoPtr for um ponteiro para uma cadeia de caracteres, BufferLength será o comprimento da cadeia de caracteres ou SQL_NTS.

  • Se DiagInfoPtr for um ponteiro para um buffer binário, o aplicativo colocará o resultado da macro SQL_LEN_BINARY_ATTR(length) em BufferLength. Isso coloca um valor negativo em BufferLength.

  • Se DiagInfoPtr for um ponteiro para um valor diferente de uma cadeia de caracteres ou cadeia binária, BufferLength deverá ter o valor SQL_IS_POINTER.

  • Se *DiagInfoPtr contiver um tipo de dados de comprimento fixo, BufferLength será SQL_IS_INTEGER, SQL_IS_UINTEGER, SQL_IS_SMALLINT ou SQL_IS_USMALLINT, conforme apropriado.

StringLengthPtr
[Realização] Ponteiro para um buffer no qual retornar o número total de bytes (excluindo o número de bytes necessários para o caractere de terminação nula) disponível para retornar em *DiagInfoPtr, para dados de caracteres. Se o número de bytes disponíveis para retornar for maior ou igual a BufferLength , o texto em *DiagInfoPtr será truncado para BufferLength menos o comprimento de um caractere de terminação nulo.

Devoluções

SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR, SQL_INVALID_HANDLE ou SQL_NO_DATA.

Diagnóstico

SQLGetDiagField não posta registros de diagnóstico por si só. Ele usa os seguintes valores de retorno para relatar o resultado de sua própria execução:

  • SQL_SUCCESS: A função retornou com êxito informações de diagnóstico.

  • SQL_SUCCESS_WITH_INFO: * DiagInfoPtr era muito pequeno para conter o campo de diagnóstico solicitado. Portanto, os dados no campo diagnóstico foram truncados. Para determinar que ocorreu um truncamento, o aplicativo deve comparar BufferLength com o número real de bytes disponíveis, que é gravado em *StringLengthPtr.

  • SQL_INVALID_HANDLE: A alça indicada por HandleType e Handle não era uma alça válida.

  • SQL_ERROR: Ocorreu uma das seguintes situações:

    • O argumento DiagIdentifier não era um dos valores válidos.

    • O argumento DiagIdentifier era SQL_DIAG_CURSOR_ROW_COUNT, SQL_DIAG_DYNAMIC_FUNCTION, SQL_DIAG_DYNAMIC_FUNCTION_CODE ou SQL_DIAG_ROW_COUNT, mas Handle não era um identificador de instrução. (O Gerenciador de Driver retorna esse diagnóstico.)

    • O argumento RecNumber foi negativo ou 0 quando DiagIdentifier indicou um campo de um registro de diagnóstico. RecNumber é ignorado para campos de cabeçalho.

    • O valor solicitado era uma cadeia de caracteres e BufferLength era menor que zero.

    • Ao usar a notificação assíncrona, a operação assíncrona no identificador não foi concluída.

  • SQL_NO_DATA: RecNumber era maior do que o número de registros de diagnóstico que existiam para o identificador especificado em Handle. A função também retorna SQL_NO_DATA para qualquer positivo RecNumber se não houver registros de diagnóstico para Handle.

Observações

Um aplicativo normalmente chama SQLGetDiagField para atingir uma das três metas:

  1. Para obter informações específicas de erro ou aviso quando uma chamada de função retornou SQL_ERROR ou SQL_SUCCESS_WITH_INFO (ou SQL_NEED_DATA para a função SQLBrowseConnect).

  2. Para determinar o número de linhas na fonte de dados que foram afetadas quando operações de inserção, exclusão ou atualização foram executadas com uma chamada para SQLExecute, SQLExecDirect, SQLBulkOperationsou SQLSetPos (do campo de cabeçalho SQL_DIAG_ROW_COUNT), ou para determinar o número de linhas que existem no cursor aberto atual, se o condutor puder fornecer esta informação (a partir do campo de cabeçalho SQL_DIAG_CURSOR_ROW_COUNT).

  3. Para determinar qual função foi executada por uma chamada para SQLExecDirect ou SQLExecute (dos campos de cabeçalho SQL_DIAG_DYNAMIC_FUNCTION e SQL_DIAG_DYNAMIC_FUNCTION_CODE).

Qualquer função ODBC pode postar zero ou mais registros de diagnóstico sempre que é chamada, para que um aplicativo possa chamar SQLGetDiagField após qualquer chamada de função ODBC. Não há limite para o número de registros de diagnóstico que podem ser armazenados a qualquer momento. SQLGetDiagField recupera apenas as informações de diagnóstico mais recentemente associadas à estrutura de dados de diagnóstico especificada no argumento Handle. Se o aplicativo chamar uma função ODBC diferente de SQLGetDiagField ou SQLGetDiagRec, qualquer informação de diagnóstico de uma chamada anterior com o mesmo identificador será perdida.

Um aplicativo pode verificar todos os registros de diagnóstico incrementando RecNumber, desde que SQLGetDiagField retorne SQL_SUCCESS. O número de registros de status é indicado no campo de cabeçalho SQL_DIAG_NUMBER. As chamadas para SQLGetDiagField não são destrutivas para os campos de cabeçalho e registro. O aplicativo pode chamar SQLGetDiagField novamente mais tarde para recuperar um campo de um registro, desde que uma função diferente das funções de diagnóstico não tenha sido chamada nesse ínterim, o que postaria registros no mesmo identificador.

Um aplicativo pode chamar SQLGetDiagField para retornar qualquer campo de diagnóstico a qualquer momento, exceto para SQL_DIAG_CURSOR_ROW_COUNT ou SQL_DIAG_ROW_COUNT, que retornarão SQL_ERROR se Handle não for um identificador de instrução. Se qualquer outro campo de diagnóstico estiver indefinido, a chamada para SQLGetDiagField retornará SQL_SUCCESS (desde que nenhum outro diagnóstico seja encontrado) e um valor indefinido será retornado para o campo.

Para obter mais informações, consulte Usando SQLGetDiagRec e SQLGetDiagField e Implementando SQLGetDiagRec e SQLGetDiagField.

Chamar uma API diferente daquela que está sendo executada de forma assíncrona gerará HY010 "Erro de sequência de função". No entanto, o registro de erro não pode ser recuperado antes que a operação assíncrona seja concluída.

Argumento HandleType

Cada tipo de identificador pode ter informações de diagnóstico associadas a ele. O argumento HandleType indica o tipo de identificador de Handle.

Alguns campos de cabeçalho e registro não podem ser retornados para identificadores de ambiente, conexão, instrução e descritor. As alças para as quais um campo não é aplicável são indicadas nas seções "Campos de cabeçalho" e "Campos de registro" a seguir.

Se HandleType estiver SQL_HANDLE_ENV, Handle poderá ser um identificador de ambiente compartilhado ou não compartilhado.

Nenhum campo de diagnóstico de cabeçalho específico do driver deve ser associado a um identificador de ambiente.

Os únicos campos de cabeçalho de diagnóstico definidos para um identificador de descritor são SQL_DIAG_NUMBER e SQL_DIAG_RETURNCODE.

Argumento DiagIdentifier

Este argumento indica o identificador do campo exigido da estrutura de dados de diagnóstico. Se RecNumber for maior ou igual a 1, os dados no campo descrevem as informações de diagnóstico retornadas por uma função. Se RecNumber for 0, o campo estará no cabeçalho da estrutura de dados de diagnóstico e, portanto, conterá dados pertencentes à chamada de função que retornou as informações de diagnóstico, não às informações específicas.

Os drivers podem definir campos de cabeçalho e registro específicos do driver na estrutura de dados de diagnóstico.

Um aplicativo ODBC 3*.x* que trabalha com um driver ODBC 2*.x* poderá chamar SQLGetDiagField somente com um argumento DiagIdentifier de SQL_DIAG_CLASS_ORIGIN, SQL_DIAG_CLASS_SUBCLASS_ORIGIN, SQL_DIAG_CONNECTION_NAME, SQL_DIAG_MESSAGE_TEXT, SQL_DIAG_NATIVE, SQL_DIAG_NUMBER, SQL_DIAG_RETURNCODE SQL_DIAG_SERVER_NAME, ou SQL_DIAG_SQLSTATE. Todos os outros campos de diagnóstico retornarão SQL_ERROR.

Campos de cabeçalho

Os campos de cabeçalho listados na tabela a seguir podem ser incluídos no argumento DiagIdentifier.

DiagIdentifier Tipo de retorno Devoluções
SQL_DIAG_CURSOR_ROW_COUNT SQLLEN Este campo contém a contagem de linhas no cursor. Sua semântica depende do SQLGetInfo tipos de informações SQL_DYNAMIC_CURSOR_ATTRIBUTES2, SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES2, SQL_KEYSET_CURSOR_ATTRIBUTES2 e SQL_STATIC_CURSOR_ATTRIBUTES2, que indicam quais contagens de linhas estão disponíveis para cada tipo de cursor (nos bits SQL_CA2_CRC_EXACT e SQL_CA2_CRC_APPROXIMATE).

O conteúdo deste campo é definido somente para identificadores de instrução e somente depois que SQLExecute, SQLExecDirectou SQLMoreResults tiver sido chamado. Chamar SQLGetDiagField com um DiagIdentifier de SQL_DIAG_CURSOR_ROW_COUNT em um identificador de instrução diferente de um identificador de instrução retornará SQL_ERROR.
SQL_DIAG_DYNAMIC_FUNCTION SQLCHAR * Esta é uma cadeia de caracteres que descreve a instrução SQL que a função subjacente executou. (Consulte "Valores dos campos Função dinâmica", mais adiante nesta seção, para valores específicos.) O conteúdo deste campo é definido somente para identificadores de instrução e somente após uma chamada para SQLExecute, SQLExecDirectou SQLMoreResults. Chamar SQLGetDiagField com um DiagIdentifier de SQL_DIAG_DYNAMIC_FUNCTION em um identificador de instrução diferente de um identificador de instrução retornará SQL_ERROR. O valor deste campo é indefinido antes de uma chamada para SQLExecute ou SQLExecDirect.
SQL_DIAG_DYNAMIC_FUNCTION_CODE SQLINTEGER Este é um código numérico que descreve a instrução SQL que foi executada pela função subjacente. (Consulte "Valores dos campos de função dinâmica", mais adiante nesta seção, para obter um valor específico.) O conteúdo deste campo é definido somente para identificadores de instrução e somente após uma chamada para SQLExecute, SQLExecDirectou SQLMoreResults. Chamar SQLGetDiagField com um DiagIdentifier de SQL_DIAG_DYNAMIC_FUNCTION_CODE em um identificador de instrução diferente de um identificador de instrução retornará SQL_ERROR. O valor deste campo é indefinido antes de uma chamada para SQLExecute ou SQLExecDirect.
SQL_DIAG_NUMBER SQLINTEGER O número de registros de status disponíveis para o identificador especificado.
SQL_DIAG_RETURNCODE SQLRETURN Código de retorno retornado pela função. Para obter uma lista de códigos de retorno, consulte Códigos de retorno. O motorista não precisa implementar SQL_DIAG_RETURNCODE; é sempre implementado pelo Gestor de Condutores. Se nenhuma função ainda tiver sido chamada noHandle, SQL_SUCCESS será retornada para SQL_DIAG_RETURNCODE.
SQL_DIAG_ROW_COUNT SQLLEN O número de linhas afetadas por uma inserção, exclusão ou atualização executada por SQLExecute, SQLExecDirect, SQLBulkOperationsou SQLSetPos. Ele é definido pelo driver após uma especificação de cursor ter sido executada. O conteúdo deste campo é definido apenas para identificadores de instrução. Chamar SQLGetDiagField com um DiagIdentifier de SQL_DIAG_ROW_COUNT em um identificador de instrução diferente de um identificador de instrução retornará SQL_ERROR. Os dados neste campo também são retornados no RowCountPtr argumento de SQLRowCount. Os dados neste campo são redefinidos após cada chamada de função não diagnóstica, enquanto a contagem de linhas retornada por SQLRowCount permanece a mesma até que a instrução seja redefinida para o estado preparado ou alocado.

Campos de registo

Os campos de registro listados na tabela a seguir podem ser incluídos no argumento DiagIdentifier.

DiagIdentifier Tipo de retorno Devoluções
SQL_DIAG_CLASS_ORIGIN SQLCHAR * Uma cadeia de caracteres que indica o documento que define a parte de classe do valor SQLSTATE neste registro. Seu valor é "ISO 9075" para todos os SQLSTATEs definidos pelo Open Group e pela interface de nível de chamada ISO. Para SQLSTATEs específicos do ODBC (todos aqueles cuja classe SQLSTATE é "IM"), seu valor é "ODBC 3.0".
SQL_DIAG_COLUMN_NUMBER SQLINTEGER Se o campo SQL_DIAG_ROW_NUMBER for um número de linha válido em um conjunto de linhas ou um conjunto de parâmetros, esse campo conterá o valor que representa o número da coluna no conjunto de resultados ou o número do parâmetro no conjunto de parâmetros. Os números das colunas do conjunto de resultados começam sempre em 1; Se esse registro de status pertencer a uma coluna de indicador, o campo poderá ser zero. Os números dos parâmetros começam em 1. Ele tem o valor SQL_NO_COLUMN_NUMBER se o registro de status não estiver associado a um número de coluna ou número de parâmetro. Se o driver não puder determinar o número da coluna ou o número do parâmetro ao qual esse registro está associado, esse campo terá o valor SQL_COLUMN_NUMBER_UNKNOWN.

O conteúdo deste campo é definido apenas para identificadores de instrução.
SQL_DIAG_CONNECTION_NAME SQLCHAR * Uma cadeia de caracteres que indica o nome da conexão à qual o registro de diagnóstico se relaciona. Este campo é definido pelo driver. Para estruturas de dados de diagnóstico associadas ao identificador de ambiente e para diagnósticos que não estão relacionados a nenhuma conexão, esse campo é uma cadeia de caracteres de comprimento zero.
SQL_DIAG_MESSAGE_TEXT SQLCHAR * Uma mensagem informativa sobre o erro ou aviso. Este campo está formatado conforme descrito em Mensagens de diagnóstico. Não há comprimento máximo para o texto da mensagem de diagnóstico.
SQL_DIAG_NATIVE SQLINTEGER Um código de erro nativo específico do driver/fonte de dados. Se não houver nenhum código de erro nativo, o driver retornará 0.
SQL_DIAG_ROW_NUMBER SQLLEN Este campo contém o número da linha no conjunto de linhas ou o número do parâmetro no conjunto de parâmetros ao qual o registro de status está associado. Os números de linha e os números de parâmetro começam com 1. Este campo tem o valor SQL_NO_ROW_NUMBER se esse registro de status não estiver associado a um número de linha ou número de parâmetro. Se o driver não puder determinar o número da linha ou o número do parâmetro ao qual esse registro está associado, esse campo terá o valor SQL_ROW_NUMBER_UNKNOWN.

O conteúdo deste campo é definido apenas para identificadores de instrução.
SQL_DIAG_SERVER_NAME SQLCHAR * Uma cadeia de caracteres que indica o nome do servidor ao qual o registro de diagnóstico está relacionado. É o mesmo que o valor retornado para uma chamada para SQLGetInfo com a opção SQL_DATA_SOURCE_NAME. Para estruturas de dados de diagnóstico associadas ao identificador de ambiente e para diagnósticos que não se relacionam com nenhum servidor, esse campo é uma cadeia de caracteres de comprimento zero.
SQL_DIAG_SQLSTATE SQLCHAR * Um código de diagnóstico SQLSTATE de cinco caracteres. Para obter mais informações, consulte SQLSTATEs.
SQL_DIAG_SUBCLASS_ORIGIN SQLCHAR * Uma cadeia de caracteres com o mesmo formato e valores válidos que SQL_DIAG_CLASS_ORIGIN, que identifica a parte definidora da parte da subclasse do código SQLSTATE. Os SQLSTATES específicos do ODBC para os quais "ODBC 3.0" é retornado incluem o seguinte:

01S00, 01S01, 01S02, 01S06, 01S07, 07S01, 08S01, 21S01, 21S02, 25S01, 25S02, 25S03, 42S01, 42S02, 42S11, 42S12, 42S21, 42S22, HY095, HY097, HY097, HY092 hy098, HY099, HY100, HY101, HY105, HY107, HY109, HY110, HY111, HYT00, HYT01, IM001, IM002, IM003, IM004, IM005, IM006, IM007, IM008, IM010, IM011, IM012.

Valores dos campos de função dinâmica

A tabela a seguir descreve os valores de SQL_DIAG_DYNAMIC_FUNCTION e SQL_DIAG_DYNAMIC_FUNCTION_CODE que se aplicam a cada tipo de instrução SQL executada por uma chamada para SQLExecute ou SQLExecDirect. O driver pode adicionar valores definidos pelo driver aos listados.

Instrução SQL

executado
Valor de

SQL_DIAG_DYNAMIC_FUNCTION
Valor de

SQL_DIAG_DYNAMIC_FUNCTION_CODE
alter-domain-statement "DOMÍNIO ALTER" SQL_DIAG_ALTER_DOMAIN
alter-table-statement "MESA ALTER" SQL_DIAG_ALTER_TABLE
asserção-definição "CRIAR ASSERÇÃO" SQL_DIAG_CREATE_ASSERTION
de definição de conjunto de caracteres "CRIAR CONJUNTO DE CARACTERES" SQL_DIAG_CREATE_CHARACTER_SET
de definição de agrupamento "CRIAR AGRUPAMENTO" SQL_DIAG_CREATE_COLLATION
definição de domínio "CRIAR DOMÍNIO" SQL_DIAG_CREATE_DOMAIN
create-index-statement "CRIAR ÍNDICE" SQL_DIAG_CREATE_INDEX
create-table-statement "CRIAR TABELA" SQL_DIAG_CREATE_TABLE
create-view-statement "CRIAR VISTA" SQL_DIAG_CREATE_VIEW
de especificação do cursor "SELECIONAR CURSOR" SQL_DIAG_SELECT_CURSOR
posicionado com instrução de exclusão "CURSOR DE EXCLUSÃO DINÂMICA" SQL_DIAG_DYNAMIC_DELETE_CURSOR
pesquisada por instrução de exclusão "ELIMINAR ONDE" SQL_DIAG_DELETE_WHERE
drop-assertion-statement "AFIRMAÇÃO DE QUEDA" SQL_DIAG_DROP_ASSERTION
drop-character-set-stmt "CONJUNTO DE CARACTERES DE SOLTA" SQL_DIAG_DROP_CHARACTER_SET
declaração drop-collation- "COLAÇÃO DE GOTAS" SQL_DIAG_DROP_COLLATION
instrução drop-domain- "DROP DOMÍNIO" SQL_DIAG_DROP_DOMAIN
declaração drop-index- "ÍNDICE DE QUEDA" SQL_DIAG_DROP_INDEX
drop-schema-statement "ESQUEMA DE QUEDA" SQL_DIAG_DROP_SCHEMA
declaração drop-table- "MESA DE GOTA" SQL_DIAG_DROP_TABLE
drop-translation-statement "TRADUÇÃO DE GOTAS" SQL_DIAG_DROP_TRANSLATION
declaração drop-view- "VISTA DE GOTA" SQL_DIAG_DROP_VIEW
subvenção "SUBVENÇÃO" SQL_DIAG_GRANT
inserir instrução "INSERIR" SQL_DIAG_INSERT
de extensão de procedimento ODBC "CHAMADA" SQL_DIAG_ CHAMADA
revogar declaração "REVOGAR" SQL_DIAG_REVOKE
de definição de esquema "CRIAR ESQUEMA" SQL_DIAG_CREATE_SCHEMA
tradução-definição "CRIAR TRADUÇÃO" SQL_DIAG_CREATE_TRANSLATION
posicionada com instrução de atualização "CURSOR DE ATUALIZAÇÃO DINÂMICA" SQL_DIAG_DYNAMIC_UPDATE_CURSOR
pesquisada por instrução de atualização "ATUALIZAR ONDE" SQL_DIAG_UPDATE_WHERE
Desconhecido cadeia de caracteres vazia SQL_DIAG_UNKNOWN_STATEMENT

Sequência de registros de status

Os registros de status são posicionados em uma sequência com base no número da linha e no tipo de diagnóstico. O Gerenciador de Driver determina a ordem final na qual retornar os registros de status que ele gera. O motorista determina a ordem final na qual retornar os registros de status que ele gera.

Se os registros de diagnóstico forem postados pelo Gerenciador de Driver e pelo driver, o Gerenciador de Driver é responsável por encomendá-los.

Se houver dois ou mais registros de status, a sequência dos registros será determinada primeiro pelo número da linha. As seguintes regras aplicam-se à determinação da sequência de registos de diagnóstico por linha:

  • Os registros que não correspondem a nenhuma linha aparecem na frente dos registros que correspondem a uma linha específica, porque SQL_NO_ROW_NUMBER é definida como -1.

  • Os registros para os quais o número da linha é desconhecido aparecem na frente de todos os outros registros, porque SQL_ROW_NUMBER_UNKNOWN é definido como -2.

  • Para todos os registros que pertencem a linhas específicas, os registros são classificados pelo valor no campo SQL_DIAG_ROW_NUMBER. Todos os erros e avisos da primeira linha afetada são listados e, em seguida, todos os erros e avisos da próxima linha afetada, e assim por diante.

Observação

O Gerenciador de Driver ODBC 3*.x* não ordena registros de status na fila de diagnóstico se SQLSTATE 01S01 (Erro na linha) é retornado por um driver ODBC 2*.x* ou se SQLSTATE 01S01 (Erro na linha) é retornado por um driver ODBC 3*.x* quando SQLExtendedFetch é chamado ou SQLSetPos é chamado em um cursor que foi posicionado com SQLExtendedFetch.

Dentro de cada linha, ou para todos os registos que não correspondem a uma linha ou para os quais o número da linha é desconhecido, ou para todos os registos com um número de linha igual a SQL_NO_ROW_NUMBER, o primeiro registo listado é determinado utilizando um conjunto de regras de ordenação. Após o primeiro registro, a ordem dos outros registros que afetam uma linha é indefinida. Um aplicativo não pode assumir que os erros precedem os avisos após o primeiro registro. Os aplicativos devem verificar a estrutura completa de dados de diagnóstico para obter informações completas sobre uma chamada malsucedida para uma função.

As regras a seguir são usadas para determinar o primeiro registro dentro de uma linha. O recorde com a classificação mais alta é o primeiro recorde. A origem de um registro (Gerenciador de driver, driver, gateway e assim por diante) não é considerada ao classificar registros.

  • Erros Os registos de Estado que descrevem erros têm a classificação mais elevada. As seguintes regras são aplicadas aos erros de classificação:

    • Os registros que indicam uma falha de transação ou uma possível falha de transação superam todos os outros registros.

    • Se dois ou mais registros descreverem a mesma condição de erro, os SQLSTATEs definidos pela especificação Open Group CLI (classes 03 a HZ) superam os SQLSTATEs definidos por ODBC e driver.

  • Os registros No Data Values Status definidos pela implementação que descrevem os valores No Data definidos pelo driver (classe 02) têm a segunda classificação mais alta.

  • Avisos registros de status que descrevem avisos (classe 01) têm a classificação mais baixa. Se dois ou mais registros descreverem a mesma condição de aviso, os SQLSTATEs de aviso definidos pela especificação Open Group CLI superarão os SQLSTATEs definidos pelo ODBC e pelo driver.

Para obter informações sobre Ver
Obtenção de vários campos de uma estrutura de dados de diagnóstico Função SQLGetDiagRec

Ver também

de referência da API ODBC
Arquivos de cabeçalho ODBC