Cómo utilizar las áreas de diagnóstico sql

A pesar de que SQLSTATE

le puede dar un poco de información acerca de por qué una declaración particular, no, la información es bastante breve. Así SQL prevé la captura y retención de la información de estado adicional en las áreas de diagnóstico.

La información de estado adicional en un área de diagnóstico puede ser especialmente útil en los casos en que la ejecución de una única sentencia SQL genera múltiples advertencias seguidas de un error. SQLSTATE informa la ocurrencia de un solo error, pero el área de diagnóstico tiene la capacidad de informar sobre varios errores.

El área de diagnóstico es una estructura de datos DBMS gestionados que tiene dos componentes:

  • Cabecera: El encabezado contiene información general acerca de la más reciente sentencia SQL que se ejecutó.

  • Área de detalle: El área de detalle contiene información sobre cada código que genera el comunicado.

Área de encabezado Diagnóstico

en el SET DE TRANSACCIONES declaración, puede especificar DIAGNÓSTICO TAMAÑO. los TAMAÑO que especifique es el número de áreas de detalle asignados para la información de estado. Si no se incluye un DIAGNÓSTICO TAMAÑO cláusula en su SET DE TRANSACCIONES declaración, el DBMS asigna su número predeterminado de áreas de detalle.

CamposTipo de datos
NÚMERONumérica exacta sin parte fraccionaria
NÚMERO DE FILASNumérica exacta sin parte fraccionaria
COMMAND_FUNCTIONVARCHAR (aplicación definido maxlength)
COMMAND_FUNCTION_CODENumérica exacta sin parte fraccionaria
DYNAMIC_FUNCTIONVARCHAR (aplicación definido maxlength)
DYNAMIC_FUNCTION_CODENumérica exacta sin parte fraccionaria
MÁSNumérica exacta sin parte fraccionaria
TRANSACTIONS_COMMITTEDNumérica exacta sin parte fraccionaria
TRANSACTIONS_ROLLED_BACKNumérica exacta sin parte fraccionaria
TRANSACTION_ACTIVENumérica exacta sin parte fraccionaria

La siguiente lista describe estos elementos con más detalle:

  • los NÚMERO campo es el número de áreas de detalle que han sido llenados con información de diagnóstico sobre la excepción actual.

  • los NÚMERO DE FILAS campo contiene el número de filas afectadas si la sentencia SQL anterior era un INSERT, ACTUALIZACIÓN, o BORRAR.

  • los COMMAND_FUNCTION campo describe la sentencia SQL que se acaba de ejecutar.

  • los COMMAND_FUNCTION_CODE campo da el número de código para la instrucción SQL que se acaba de ejecutar. Cada función de comando tiene un código numérico asociado.

  • los DYNAMIC_FUNCTION campo contiene la sentencia de SQL dinámico.

  • los DYNAMIC_FUNCTION_CODE campo contiene un código numérico que corresponde a la sentencia de SQL dinámico.

  • los MÁS campo puede ser o bien una 'Y' o un 'N'. 'Y' indica que hay más registros de estado que el área de detalle puede contener. 'N' indica que todos los registros de estado generadas están presentes en el área de detalle. Dependiendo de su aplicación, es posible que pueda ampliar el número de registros que puede manejar mediante el uso de la SET DE TRANSACCIONES comunicado.

  • los TRANSACTIONS_COMMITTED campo contiene el número de transacciones que se han cometido.

  • los TRANSACTIONS_ROLLED_BACK campo contiene el número de transacciones que se ha revertido.

  • los TRANSACTION_ACTIVE campo tiene una '1' si una transacción se encuentra actualmente activo y un '0' de lo contrario. Una transacción se considera que es activo si un cursor está abierto o si el DBMS está esperando para un parámetro diferido.

Diagnóstico área de detalles

Las áreas de detalle contienen datos sobre cada error, advertencia o condición éxito individual.

CamposTipo de datos
CONDITION_NUMBERNumérica exacta sin parte fraccionaria
RETURNED_SQLSTATECHAR (6)
MENSAJE DE TEXTOVARCHAR (aplicación definido maxlength)
MESSAGE_LENGTHNumérica exacta sin parte fraccionaria
MESSAGE_OCTET_LENGTHNumérica exacta sin parte fraccionaria
CLASS_ORIGINVARCHAR (aplicación definido maxlength)
SUBCLASS_ORIGINVARCHAR (aplicación definido maxlength)
NOMBRE DE LA CONEXIÓNVARCHAR (aplicación definido maxlength)
NOMBRE DEL SERVIDORVARCHAR (aplicación definido maxlength)
CONSTRAINT_CATALOGVARCHAR (aplicación definido maxlength)
CONSTRAINT_SCHEMAVARCHAR (aplicación definido maxlength)
CONSTRAINT_NAMEVARCHAR (aplicación definido maxlength)
CATALOG_NAMEVARCHAR (aplicación definido maxlength)
NOMBRE_ESQUEMAVARCHAR (aplicación definido maxlength)
TABLE_NAMEVARCHAR (aplicación definido maxlength)
COLUMN_NAMEVARCHAR (aplicación definido maxlength)
Cursor_nameVARCHAR (aplicación definido maxlength)
CONDITION_IDENTIFIERVARCHAR (aplicación definido maxlength)
PARAMETER_NAMEVARCHAR (aplicación definido maxlength)
PARAMETER_ORDINAL_POSITIONNumérica exacta sin parte fraccionaria
PARAMETER_MODENumérica exacta sin parte fraccionaria
ROUTINE_CATALOGVARCHAR (aplicación definido maxlength)
ROUTINE_SCHEMAVARCHAR (aplicación definido maxlength)
ROUTINE_NAMEVARCHAR (aplicación definido maxlength)
SPECIFIC_NAMEVARCHAR (aplicación definido maxlength)
TRIGGER_CATALOGVARCHAR (aplicación definido maxlength)
TRIGGER_SCHEMAVARCHAR (aplicación definido maxlength)
Trigger_nameVARCHAR (aplicación definido maxlength)

CONDITION_NUMBER tiene el número de secuencia del área de detalle. Si una declaración genera cinco elementos de estado que se llenan cinco áreas de detalle, los CONDITION_NUMBER para la quinta área de detalle es 5. Para recuperar un área de detalles específicos para su examen, utilice un OBTENER DIAGNÓSTICO declaración con la deseada CONDITION_NUMBER. RETURNED_SQLSTATE ostenta la SQLSTATE valor que causó esta área de detalle para ser llenado.

CLASS_ORIGIN le dice la fuente del valor de código de clase devuelto en SQLSTATE. Si el estándar SQL define el valor, CLASS_ORIGIN es 'ISO 9075'. Si su aplicación DBMS define el valor, CLASS_ORIGIN posee una cadena que identifica la fuente de su DBMS. SUBCLASS_ORIGIN le dice la fuente del valor del código de subclase devuelto en SQLSTATE.

CLASS_ORIGIN es importante. Si obtiene un SQLSTATE de '22012', los valores indican que es en el rango de la norma SQLSTATEs, por lo que saben que significa lo mismo en todas las implementaciones de SQL.

Sin embargo, si el SQLSTATE es '22500', los dos primeros caracteres están en el rango normal e indican una excepción de datos, pero los tres últimos caracteres están en el rango definido por la implementación. Y si SQLSTATE es '90001', es completamente en el rango definido por la implementación. SQLSTATE valores en el rango definido por la implementación puede significar diferentes cosas en diferentes implementaciones, a pesar de que el propio código puede ser el mismo.

Así que, ¿cómo encontrar el significado detallado de '22500' o el significado de '90001'? Usted debe mirar en la documentación del implementador. Qué implementador?

Para determinar cuál de ellas produce la condición de error, mira CLASS_ORIGIN y SUBCLASS_ORIGIN: Tienen valores que identifican a cada aplicación. Puede probar la CLASS_ORIGIN y SUBCLASS_ORIGIN para ver si se identifican los ejecutores para los que tiene la SQLSTATE listados. Los valores reales colocados en CLASS_ORIGIN y SUBCLASS_ORIGIN son-implementador definido, sino que también se espera que sean los nombres de empresas explica por sí mismo.

Si el error reportado es una violación de restricción, la CONSTRAINT_CATALOG, CONSTRAINT_SCHEMA, y CONSTRAINT_NAME identificar la restricción siendo violada.




» » » » Cómo utilizar las áreas de diagnóstico sql