Función SQLGetDiagField
Conformidad
Versión introducida: Cumplimiento de estándares odbc 3.0: ISO 92
Resumen
SQLGetDiagField devuelve el valor actual de un campo de un registro de la estructura de datos de diagnóstico (asociada a un identificador especificado) que contiene información de error, advertencia y estado.
Sintaxis
SQLRETURN SQLGetDiagField(
SQLSMALLINT HandleType,
SQLHANDLE Handle,
SQLSMALLINT RecNumber,
SQLSMALLINT DiagIdentifier,
SQLPOINTER DiagInfoPtr,
SQLSMALLINT BufferLength,
SQLSMALLINT * StringLengthPtr);
Argumentos
HandleType
[Entrada] Identificador de tipo de identificador que describe el tipo de identificador para el que se requieren diagnósticos. Debe ser una de las siguientes:
SQL_HANDLE_DBC
SQL_HANDLE_DBC_INFO_TOKEN
SQL_HANDLE_DESC
SQL_HANDLE_ENV
SQL_HANDLE_STMT
SQL_HANDLE_DBC_INFO_TOKEN controlador solo lo usa el Administrador de controladores y el controlador. Las aplicaciones no deben usar este tipo de identificador. Para obtener más información sobre SQL_HANDLE_DBC_INFO_TOKEN, vea Developing Connection-Pool Awareness in an ODBC Driver.
Handle
[Entrada] Identificador de la estructura de datos de diagnóstico, del tipo indicado por HandleType. Si HandleType es SQL_HANDLE_ENV, Handle puede ser un identificador de entorno compartido o no compartido.
RecNumber
[Entrada] Indica el registro de estado desde el que la aplicación busca información. Los registros de estado se numeran de 1. Si el argumento DiagIdentifier indica cualquier campo del encabezado de diagnóstico, se omite RecNumber . Si no es así, debe ser superior a 0.
DiagIdentifier
[Entrada] Indica el campo del diagnóstico cuyo valor se va a devolver. Para obtener más información, vea la sección "Argumento DiagIdentifier " en "Comments".
DiagInfoPtr
[Salida] Puntero a un búfer en el que se va a devolver la información de diagnóstico. El tipo de datos depende del valor de DiagIdentifier. Si DiagInfoPtr es un tipo entero, las aplicaciones deben usar un búfer de SQLULEN e inicializar el valor en 0 antes de llamar a esta función, ya que algunos controladores solo pueden escribir el 32 o 16 bits inferior de un búfer y dejar el bit de orden superior sin cambios.
Si DiagInfoPtr es NULL, StringLengthPtr seguirá devolviendo el número total de bytes (excepto el carácter de terminación NULL para los datos de caracteres) disponible para devolver en el búfer al que apunta DiagInfoPtr.
BufferLength
[Entrada] Si DiagIdentifier es un diagnóstico definido por ODBC y DiagInfoPtr apunta a una cadena de caracteres o a un búfer binario, este argumento debe ser la longitud de *DiagInfoPtr. Si DiagIdentifier es un campo definido por ODBC y *DiagInfoPtr es un entero, bufferLength se omite. Si el valor de *DiagInfoPtr es una cadena Unicode (al llamar a SQLGetDiagFieldW), el argumento BufferLength debe ser un número par.
Si DiagIdentifier es un campo definido por el controlador, la aplicación indica la naturaleza del campo en el Administrador de controladores estableciendo el argumento BufferLength . BufferLength puede tener los siguientes valores:
Si DiagInfoPtr es un puntero a una cadena de caracteres, BufferLength es la longitud de la cadena o SQL_NTS.
Si DiagInfoPtr es un puntero a un búfer binario, la aplicación coloca el resultado de la macro SQL_LEN_BINARY_ATTR(length) en BufferLength. Esto coloca un valor negativo en BufferLength.
Si DiagInfoPtr es un puntero a un valor distinto de una cadena de caracteres o una cadena binaria, BufferLength debe tener el valor SQL_IS_POINTER.
Si *DiagInfoPtr contiene un tipo de datos de longitud fija, BufferLength se SQL_IS_INTEGER, SQL_IS_UINTEGER, SQL_IS_SMALLINT o SQL_IS_USMALLINT, según corresponda.
StringLengthPtr
[Salida] Puntero a un búfer en el que devolver el número total de bytes (excepto el número de bytes necesarios para el carácter de terminación NULL) disponible para devolver en *DiagInfoPtr, para los datos de caracteres. Si el número de bytes disponibles para devolver es mayor o igual que BufferLength, el texto de *DiagInfoPtr se trunca en BufferLength menos la longitud de un carácter de terminación NULL.
Devoluciones
SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR, SQL_INVALID_HANDLE o SQL_NO_DATA.
Diagnóstico
SQLGetDiagField no publica registros de diagnóstico por sí mismos. Usa los siguientes valores devueltos para notificar el resultado de su propia ejecución:
SQL_SUCCESS: la función devolvió correctamente la información de diagnóstico.
SQL_SUCCESS_WITH_INFO: *DiagInfoPtr era demasiado pequeño para contener el campo de diagnóstico solicitado. Por lo tanto, los datos del campo de diagnóstico se truncaron. Para determinar que se ha producido un truncamiento, la aplicación debe comparar BufferLength con el número real de bytes disponibles, que se escribe en *StringLengthPtr.
SQL_INVALID_HANDLE: el identificador indicado por HandleType y Handle no era un identificador válido.
SQL_ERROR: se produjo una de las siguientes acciones:
El argumento DiagIdentifier no era uno de los valores válidos.
El argumento DiagIdentifier se SQL_DIAG_CURSOR_ROW_COUNT, SQL_DIAG_DYNAMIC_FUNCTION, SQL_DIAG_DYNAMIC_FUNCTION_CODE o SQL_DIAG_ROW_COUNT, pero Handle no era un identificador de instrucción. (El Administrador de controladores devuelve este diagnóstico).
El argumento RecNumber fue negativo o 0 cuando DiagIdentifier indicó un campo de un registro de diagnóstico. RecNumber se omite para los campos de encabezado.
El valor solicitado era una cadena de caracteres y BufferLength era menor que cero.
Cuando se usa una notificación asincrónica, no se completó la operación asincrónica en el identificador.
SQL_NO_DATA: RecNumber era mayor que el número de registros de diagnóstico que existían para el identificador especificado en Handle. La función también devuelve SQL_NO_DATA para cualquier RecNumber positivo si no hay registros de diagnóstico para Handle.
Comentarios
Normalmente, una aplicación llama a SQLGetDiagField para lograr uno de los tres objetivos:
Para obtener información específica sobre errores o advertencias cuando una llamada de función ha devuelto SQL_ERROR o SQL_SUCCESS_WITH_INFO (o SQL_NEED_DATA para la función SQLBrowseConnect ).
Para determinar el número de filas del origen de datos que se vieron afectadas cuando se realizaron operaciones de inserción, eliminación o actualización con una llamada a SQLExecute, SQLExecDirect, SQLBulkOperations o SQLSetPos (desde el campo de encabezado SQL_DIAG_ROW_COUNT) o para determinar el número de filas que existen en el cursor abierto actual, si el controlador puede proporcionar esta información (desde el campo de encabezado SQL_DIAG_CURSOR_ROW_COUNT).
Para determinar qué función se ejecutó mediante una llamada a SQLExecDirect o SQLExecute (de los campos de encabezado SQL_DIAG_DYNAMIC_FUNCTION y SQL_DIAG_DYNAMIC_FUNCTION_CODE).
Cualquier función ODBC puede publicar cero o más registros de diagnóstico cada vez que se llama, por lo que una aplicación puede llamar a SQLGetDiagField después de cualquier llamada a función ODBC. No hay ningún límite en el número de registros de diagnóstico que se pueden almacenar en cualquier momento. SQLGetDiagField recupera solo la información de diagnóstico asociada más recientemente a la estructura de datos de diagnóstico especificada en el argumento Handle . Si la aplicación llama a una función ODBC distinta de SQLGetDiagField o SQLGetDiagRec, se pierde cualquier información de diagnóstico de una llamada anterior con el mismo identificador.
Una aplicación puede examinar todos los registros de diagnóstico incrementando RecNumber, siempre y cuando SQLGetDiagField devuelva SQL_SUCCESS. El número de registros de estado se indica en el campo de encabezado SQL_DIAG_NUMBER. Las llamadas a SQLGetDiagField no son destructivas para los campos de encabezado y registro. La aplicación puede llamar a SQLGetDiagField de nuevo más tarde para recuperar un campo de un registro, siempre y cuando no se haya llamado a una función distinta de las funciones de diagnóstico en el período intermedio, lo que publicaría registros en el mismo identificador.
Una aplicación puede llamar a SQLGetDiagField para devolver cualquier campo de diagnóstico en cualquier momento, excepto por SQL_DIAG_CURSOR_ROW_COUNT o SQL_DIAG_ROW_COUNT, que devolverá SQL_ERROR si Handle no es un identificador de instrucción. Si cualquier otro campo de diagnóstico no está definido, la llamada a SQLGetDiagField devolverá SQL_SUCCESS (siempre que no se encuentre ningún otro diagnóstico) y se devuelve un valor indefinido para el campo.
Para obtener más información, vea Uso de SQLGetDiagRec y SQLGetDiagField e Implementación de SQLGetDiagRec y SQLGetDiagField.
Al llamar a una API distinta de la que se ejecuta de forma asincrónica, se generará el error de secuencia de función HY010. Sin embargo, el registro de error no se puede recuperar antes de que se complete la operación asincrónica.
Argumento HandleType
Cada tipo de identificador puede tener información de diagnóstico asociada. El argumento HandleType indica el tipo de identificador de Handle.
Algunos campos de encabezado y registro no se pueden devolver para los identificadores de entorno, conexión, instrucción y descriptor. Estos identificadores para los que un campo no es aplicable se indican en las secciones "Campos de encabezado" y "Campos de registro" siguientes.
Si HandleType es SQL_HANDLE_ENV, Handle puede ser un identificador de entorno compartido o no compartido.
Ningún campo de diagnóstico de encabezado específico del controlador debe estar asociado a un identificador de entorno.
Los únicos campos de encabezado de diagnóstico definidos para un identificador de descriptor son SQL_DIAG_NUMBER y SQL_DIAG_RETURNCODE.
Argumento DiagIdentifier
Este argumento indica el identificador del campo necesario a partir de la estructura de datos de diagnóstico. Si RecNumber es mayor o igual que 1, los datos del campo describen la información de diagnóstico devuelta por una función. Si RecNumber es 0, el campo se encuentra en el encabezado de la estructura de datos de diagnóstico y, por tanto, contiene datos relativos a la llamada de función que devolvió la información de diagnóstico, no a la información específica.
Los controladores pueden definir campos de registro y encabezado específicos del controlador en la estructura de datos de diagnóstico.
Una aplicación ODBC 3*.x* que trabaje con un controlador ODBC 2*.x* podrá llamar a SQLGetDiagField solo con un 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 o SQL_DIAG_SQLSTATE. Todos los demás campos de diagnóstico devolverán SQL_ERROR.
Campos de encabezado
Los campos de encabezado enumerados en la tabla siguiente se pueden incluir en el argumento DiagIdentifier .
DiagIdentifier | Tipo de valor devuelto | Devoluciones |
---|---|---|
SQL_DIAG_CURSOR_ROW_COUNT | SQLLEN | Este campo contiene el recuento de filas en el cursor. Su semántica depende de los tipos de información SQLGetInfo SQL_DYNAMIC_CURSOR_ATTRIBUTES2, SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES2, SQL_KEYSET_CURSOR_ATTRIBUTES2 y SQL_STATIC_CURSOR_ATTRIBUTES2, que indican qué recuentos de filas están disponibles para cada tipo de cursor (en los bits SQL_CA2_CRC_EXACT y SQL_CA2_CRC_APPROXIMATE). El contenido de este campo solo se define para los identificadores de instrucción y solo se ha llamado a SQLExecute, SQLExecDirect o SQLMoreResults . Al llamar a SQLGetDiagField con un DiagIdentifier de SQL_DIAG_CURSOR_ROW_COUNT en otro que no sea un identificador de instrucción, se devolverá SQL_ERROR. |
SQL_DIAG_DYNAMIC_FUNCTION | SQLCHAR * | Se trata de una cadena que describe la instrucción SQL que ejecutó la función subyacente. (Vea "Valores de los campos de función dinámica", más adelante en esta sección, para obtener valores específicos). El contenido de este campo solo se define para los identificadores de instrucción y solo después de una llamada a SQLExecute, SQLExecDirect o SQLMoreResults. Al llamar a SQLGetDiagField con un diagIdentifier de SQL_DIAG_DYNAMIC_FUNCTION en otro que no sea un identificador de instrucción, se devolverá SQL_ERROR. El valor de este campo no está definido antes de una llamada a SQLExecute o SQLExecDirect. |
SQL_DIAG_DYNAMIC_FUNCTION_CODE | SQLINTEGER | Se trata de un código numérico que describe la instrucción SQL ejecutada por la función subyacente. (Vea "Valores de los campos de función dinámica", más adelante en esta sección, para obtener un valor específico). El contenido de este campo solo se define para los identificadores de instrucción y solo después de una llamada a SQLExecute, SQLExecDirect o SQLMoreResults. Al llamar a SQLGetDiagField con un diagIdentifier de SQL_DIAG_DYNAMIC_FUNCTION_CODE en otro que no sea un identificador de instrucción, se devolverá SQL_ERROR. El valor de este campo no está definido antes de una llamada a SQLExecute o SQLExecDirect. |
SQL_DIAG_NUMBER | SQLINTEGER | Número de registros de estado disponibles para el identificador especificado. |
SQL_DIAG_RETURNCODE | SQLRETURN | Devuelve el código devuelto por la función . Para obtener una lista de códigos de retorno, vea Códigos de retorno. El controlador no tiene que implementar SQL_DIAG_RETURNCODE; siempre se implementa mediante el Administrador de controladores. Si aún no se ha llamado a ninguna función en el identificador, se devolverá SQL_SUCCESS para SQL_DIAG_RETURNCODE. |
SQL_DIAG_ROW_COUNT | SQLLEN | Número de filas afectadas por una inserción, eliminación o actualización realizada por SQLExecute, SQLExecDirect, SQLBulkOperations o SQLSetPos. Se define el controlador después de ejecutar una especificación de cursor . El contenido de este campo solo se define para los identificadores de instrucción. Al llamar a SQLGetDiagField con un DiagIdentifier de SQL_DIAG_ROW_COUNT en otro que no sea un identificador de instrucción, se devolverán SQL_ERROR. Los datos de este campo también se devuelven en el argumento RowCountPtr de SQLRowCount. Los datos de este campo se restablecen después de cada llamada de función no independiente, mientras que el recuento de filas devuelto por SQLRowCount sigue siendo el mismo hasta que la instrucción se vuelve a establecer en el estado preparado o asignado. |
Campos de registro
Los campos de registro enumerados en la tabla siguiente se pueden incluir en el argumento DiagIdentifier .
DiagIdentifier | Tipo de valor devuelto | Devoluciones |
---|---|---|
SQL_DIAG_CLASS_ORIGIN | SQLCHAR * | Cadena que indica el documento que define la parte de clase del valor SQLSTATE en este registro. Su valor es "ISO 9075" para todos los SQLSTATEs definidos por la interfaz de nivel de llamada OPEN Group e ISO. Para SQLSTATEs específicos de ODBC (todos aquellos cuya clase SQLSTATE es "IM"), su valor es "ODBC 3.0". |
SQL_DIAG_COLUMN_NUMBER | SQLINTEGER | Si el campo SQL_DIAG_ROW_NUMBER es un número de fila válido en un conjunto de filas o un conjunto de parámetros, este campo contiene el valor que representa el número de columna en el conjunto de resultados o el número de parámetro del conjunto de parámetros. Los números de columna del conjunto de resultados siempre comienzan en 1; si este registro de estado pertenece a una columna de marcador, el campo puede ser cero. Los números de parámetro comienzan en 1. Tiene el valor SQL_NO_COLUMN_NUMBER si el registro de estado no está asociado a un número de columna o número de parámetro. Si el controlador no puede determinar el número de columna o el número de parámetro al que está asociado este registro, este campo tiene el valor SQL_COLUMN_NUMBER_UNKNOWN. El contenido de este campo solo se define para los identificadores de instrucción. |
SQL_DIAG_CONNECTION_NAME | SQLCHAR * | Cadena que indica el nombre de la conexión a la que se relaciona el registro de diagnóstico. Este campo está definido por el controlador. Para las estructuras de datos de diagnóstico asociadas al identificador del entorno y para los diagnósticos que no se relacionan con ninguna conexión, este campo es una cadena de longitud cero. |
SQL_DIAG_MESSAGE_TEXT | SQLCHAR * | Un mensaje informativo sobre el error o la advertencia. Este campo tiene el formato descrito en Mensajes de diagnóstico. No hay ninguna longitud máxima para el texto del mensaje de diagnóstico. |
SQL_DIAG_NATIVE | SQLINTEGER | Código de error nativo específico del origen de datos o controlador. Si no hay código de error nativo, el controlador devuelve 0. |
SQL_DIAG_ROW_NUMBER | SQLLEN | Este campo contiene el número de fila del conjunto de filas o el número de parámetro del conjunto de parámetros, con el que está asociado el registro de estado. Los números de fila y los números de parámetro comienzan por 1. Este campo tiene el valor SQL_NO_ROW_NUMBER si este registro de estado no está asociado a un número de fila o a un número de parámetro. Si el controlador no puede determinar el número de fila o el número de parámetro al que está asociado este registro, este campo tiene el valor SQL_ROW_NUMBER_UNKNOWN. El contenido de este campo solo se define para los identificadores de instrucción. |
SQL_DIAG_SERVER_NAME | SQLCHAR * | Cadena que indica el nombre del servidor al que se relaciona el registro de diagnóstico. Es el mismo que el valor devuelto para una llamada a SQLGetInfo con la opción SQL_DATA_SOURCE_NAME. Para las estructuras de datos de diagnóstico asociadas al identificador de entorno y para los diagnósticos que no se relacionan con ningún servidor, este campo es una cadena de longitud cero. |
SQL_DIAG_SQLSTATE | SQLCHAR * | Código de diagnóstico de SQLSTATE de cinco caracteres. Para obtener más información, vea SQLSTATEs. |
SQL_DIAG_SUBCLASS_ORIGIN | SQLCHAR * | Cadena con el mismo formato y valores válidos que SQL_DIAG_CLASS_ORIGIN, que identifica la parte que define la parte de la subclase del código SQLSTATE. Las SQLSTATES específicas de ODBC para las que se devuelve "ODBC 3.0" incluyen lo siguiente: 01S00, 01S01, 01S02, 01S06, 01S07, 07S01, 08S01, 21S01, 21S02, 25S01, 25S02, 25S03, 42S01, 42S02, 42S11, 42S12, 42S21, 42S22, HY095, HY097, HY098, HY099, HY100, HY101, HY105, HY107, HY109, HY110, HY111, HYT00, HYT01, IM001, IM002, IM003, IM004, IM005, IM006, IM007, IM008, IM010, IM011, IM012. |
Valores de los campos de función dinámica
En la tabla siguiente se describen los valores de SQL_DIAG_DYNAMIC_FUNCTION y SQL_DIAG_DYNAMIC_FUNCTION_CODE que se aplican a cada tipo de instrucción SQL ejecutada por una llamada a SQLExecute o SQLExecDirect. El controlador puede agregar valores definidos por el controlador a los enumerados.
Instrucción SQL Ejecutado |
Valor de SQL_DIAG_DYNAMIC_FUNCTION |
Valor de SQL_DIAG_DYNAMIC_FUNCTION_CODE |
---|---|---|
alter-domain-statement | "ALTER DOMAIN" | SQL_DIAG_ALTER_DOMAIN |
alter-table-statement | "ALTER TABLE" | SQL_DIAG_ALTER_TABLE |
definición de aserción | "CREATE ASSERTION" | SQL_DIAG_CREATE_ASSERTION |
character-set-definition | "CREAR JUEGO DE CARACTERES" | SQL_DIAG_CREATE_CHARACTER_SET |
definición de intercalación | "CREAR INTERCALACIÓN" | SQL_DIAG_CREATE_COLLATION |
domainn-definition | "CREATE DOMAIN" | SQL_DIAG_CREATE_DOMAIN |
create-index-statement | "CREATE INDEX" | SQL_DIAG_CREATE_INDEX |
create-table-statement | "CREATE TABLE" | SQL_DIAG_CREATE_TABLE |
create-view-statement | "CREATE VIEW" | SQL_DIAG_CREATE_VIEW |
cursor-specification | "SELECT CURSOR" | SQL_DIAG_SELECT_CURSOR |
delete-statement-positioned | "CURSOR DE ELIMINACIÓN DINÁMICA" | SQL_DIAG_DYNAMIC_DELETE_CURSOR |
delete-statement-searched | "DELETE WHERE" | SQL_DIAG_DELETE_WHERE |
drop-assertion-statement | "DROP ASSERTION" | SQL_DIAG_DROP_ASSERTION |
drop-character-set-stmt | "DROP CHARACTER SET" | SQL_DIAG_DROP_CHARACTER_SET |
drop-collation-statement | "COLOCAR INTERCALACIÓN" | SQL_DIAG_DROP_COLLATION |
drop-domain-statement | "DROP DOMAIN" | SQL_DIAG_DROP_DOMAIN |
drop-index-statement | "DROP INDEX" | SQL_DIAG_DROP_INDEX |
drop-schema-statement | "DROP SCHEMA" | SQL_DIAG_DROP_SCHEMA |
drop-table-statement | "DROP TABLE" | SQL_DIAG_DROP_TABLE |
drop-translation-statement | "DROP TRANSLATION" | SQL_DIAG_DROP_TRANSLATION |
drop-view-statement | "DROP VIEW" | SQL_DIAG_DROP_VIEW |
grantstatement | "GRANT" | SQL_DIAG_GRANT |
insert-statement | "INSERT" | SQL_DIAG_INSERT |
ODBC-procedure-extension | "CALL" | llamada de SQL_DIAG_ |
revoke-statement | "REVOKE" | SQL_DIAG_REVOKE |
definición de esquema | "CREATE SCHEMA" | SQL_DIAG_CREATE_SCHEMA |
translation-definition | "CREATE TRANSLATION" | SQL_DIAG_CREATE_TRANSLATION |
update-statement-positioned | "CURSOR DE ACTUALIZACIÓN DINÁMICA" | SQL_DIAG_DYNAMIC_UPDATE_CURSOR |
update-statement-searched | "UPDATE WHERE" | SQL_DIAG_UPDATE_WHERE |
Desconocido | cadena vacía | SQL_DIAG_UNKNOWN_STATEMENT |
Secuencia de registros de estado
Los registros de estado se colocan en una secuencia basada en el número de fila y el tipo del diagnóstico. El Administrador de controladores determina el orden final en el que se devuelven los registros de estado que genera. El controlador determina el orden final en el que se devuelven los registros de estado que genera.
Si tanto el Administrador de controladores como el controlador publican registros de diagnóstico, el Administrador de controladores es responsable de ordenarlos.
Si hay dos o más registros de estado, la secuencia de los registros se determina primero por número de fila. Las reglas siguientes se aplican para determinar la secuencia de registros de diagnóstico por fila:
Los registros que no corresponden a ninguna fila aparecen delante de los registros que corresponden a una fila determinada, ya que SQL_NO_ROW_NUMBER se define como -1.
Los registros para los que se desconoce el número de fila aparecen delante de todos los demás registros, ya que SQL_ROW_NUMBER_UNKNOWN se define como -2.
Para todos los registros que pertenecen a filas específicas, los registros se ordenan por el valor del campo SQL_DIAG_ROW_NUMBER. Se muestran todos los errores y advertencias de la primera fila afectada y, a continuación, se muestran todos los errores y advertencias de la siguiente fila afectada, etc.
Nota
El Administrador de controladores ODBC 3*.x* no ordena los registros de estado en la cola de diagnóstico si un controlador ODBC 01S01 (error en fila) se devuelve mediante un controlador ODBC 2*.x* o si SQLSTATE 01S01 (error en fila) se devuelve mediante un controlador ODBC 3*.x* cuando se llama a SQLExtendedFetch o se llama a SQLSetPos en un cursor que se ha colocado con SQLExtendedFetch.
Dentro de cada fila, o para todos los registros que no corresponden a una fila o para la que se desconoce el número de fila, o para todos esos registros con un número de fila igual a SQL_NO_ROW_NUMBER, el primer registro enumerado se determina mediante un conjunto de reglas de ordenación. Después del primer registro, el orden de los demás registros que afectan a una fila no está definido. Una aplicación no puede suponer que los errores preceden a las advertencias después del primer registro. Las aplicaciones deben examinar la estructura de datos de diagnóstico completa para obtener información completa sobre una llamada incorrecta a una función.
Las reglas siguientes se usan para determinar el primer registro dentro de una fila. El registro con el rango más alto es el primer registro. El origen de un registro (Administrador de controladores, controlador, puerta de enlace, etc.) no se tiene en cuenta cuando se clasifican los registros.
Errores Los registros de estado que describen los errores tienen la clasificación más alta. Las reglas siguientes se aplican a errores de ordenación:
Los registros que indican un error de transacción o un posible error de transacción han salido de todos los demás registros.
Si dos o más registros describen la misma condición de error, los SQLSTATEs definidos por la especificación de la CLI de Open Group (clases de 03 a HZ) e SQLSTATEs definidos por el controlador.
Valores de datos no definidos por la implementación Los registros de estado que describen los valores sin datos definidos por el controlador (clase 02) tienen la segunda clasificación más alta.
Advertencias Los registros de estado que describen advertencias (clase 01) tienen la clasificación más baja. Si dos o más registros describen la misma condición de advertencia, las SQLSTATEs de advertencia definidas por la especificación de la CLI de Open Group desactiven las SQLSTATEs definidas por ODBC y definidas por el controlador.
Funciones relacionadas
Para información acerca de | Vea |
---|---|
Obtener varios campos de una estructura de datos de diagnóstico | Función SQLGetDiagRec |