Función SQLSTATE

SQLSTATE es una función de estado de base de datos que devuelve el tipo de datos de CHARACTER con un valor por omisión de '00000' (cinco ceros como una serie de caracteres).

SINTAXIS

En un flujo de mensajes, puede acceder y actualizar un recurso de base de datos externo utilizando las funciones de base de datos ESQL disponibles en los nodos Filter, Database y Compute. Cuando realiza llamadas a una base de datos externa, es posible que obtenga errores como, por ejemplo, que no existe una tabla que una base de datos no está disponible o que ya existe una inserción para una clave.

Cuando se producen estos errores, por omisión, el intermediario genera una excepción. Este comportamiento lo determina el valor que haya establecido para la propiedad Generar excepción en error de la base de datos. Si se selecciona este recuadro de selección, el intermediario detiene el proceso del nodo, propaga el mensaje al terminal de anomalías del nodo y escribe los detalles del error en ExceptionList. Si desea alterar temporalmente el comportamiento por omisión y manejar un error de base de datos en el ESQL del nodo, borre el recuadro de selección Generar excepción en error de la base de datos. El intermediario no genera una excepción y debe incluir la sentencia THROW de modo que genere una excepción si no se espera un código de estado SQL determinado. Consulte Sentencia THROW para obtener una descripción de THROW.

Si opta por manejar los errores de base de datos en un nodo, puede utilizar el SQLSTATE de función de estado de base de datos para recibir información acerca del estado de la llamada DBMS realizada en ESQL. Puede incluirla en sentencias condicionales del ESQL del nodo actual para reconocer y manejar errores posibles.

estados SQL

En ESQL, los estados SQL son series de caracteres de longitud variable. Por convención, tienen seis caracteres de longitud y sólo contienen los caracteres 0-9, A-Z. El significado de los seis caracteres es:
Carácter 1
El origen de la excepción
Caracteres 2 - 3
La clase de la excepción
Caracteres 4 - 6
La subclase de la excepción

El estado SQL de una excepción lo determina un proceso de dos fases. En la primera fase, se examina la información de la excepción y las excepciones de derivación (es decir, la información que indica lo que estaba haciendo el intermediario en el momento de la excepción) se ignoran hasta que se localiza la excepción que describe el error original.

La segunda fase es la siguiente:
  1. Si la excepción seleccionada es una excepción de base de datos, el estado SQL es el proporcionado por la base de datos, pero con el prefijo de la letra "D" para evitar confusiones con las excepciones que se originan en el intermediario. El código SQL, el error nativo y el texto de error son los que proporciona la base de datos.
  2. Si la excepción seleccionada es una excepción de usuario (es decir, se ha originado en una sentencia THROW), el código SQL, el estado, el error nativo y el texto de error se toman de las primeras cuatro inserciones de la excepción, en orden. El valor del estado resultante se toma tal cual (sin el prefijo de una letra como la "U"). De hecho, el intermediario no utiliza la letra "U" como indicador de origen. Si desea definir un estado SQL exclusivo en lugar de imitar uno ya existente, utilice estados SQL que empiecen con la letra "U". Si utiliza estados SQL que empiecen con la letra "U" un gestor puede coincidir con todas las excepciones definidas por el usuario y generadas, con un operador LIKE’U%’.
  3. Si la excepción seleccionada se ha originado en el transporte del mensaje o en la implementación ESQL misma, el código SQL, el estado, el error nativo y el texto de error son como se describe en la lista más abajo.
  4. Para todas las demás excepciones, el estado SQL es '', que indica que no hay origen, ni clase, ni subclase.

Algunas excepciones que actualmente dan un estado SQL vacío es posible que den estados individuales en releases futuros. Si desea detectar excepciones no clasificadas, utilice "todos" los comodines ("%") para el estado SQL, en el último gestor de un ámbito. Así seguirá detectando el mismo conjunto de excepciones si a las excepciones no clasificadas anteriormente se les da nuevos estados SQL exclusivos.

Están definidos los siguientes estados SQL:

Dddddd
ddddd es el estado devuelto por la base de datos.
SqlState = ‘S22003'
Desbordamiento aritmético. Una operación cuyo resultado es de tipo numérico, ha originado un valor que sobrepasa el rango soportado.
SqlState = ‘S22004’
No se permite el valor NULL. Se ha encontrado un valor nulo en un sitio en el que no está permitido.
SqlState = ‘S22007’
Formato de fecha y hora no válido. Una serie de caracteres utilizada en una transformación CAST de tipo de caracteres a fecha y hora tenía el formato básico incorrecto (por ejemplo, '01947-10-24') o tenía valores fuera de los rangos permitidos por el calendario gregoriano (por ejemplo, '1947-21-24').
SqlState = ‘S22008’
Desbordamiento de campo de fecha y hora. Una operación cuyo resultado es del tipo de fecha y hora, ha originado un valor que sobrepasa el rango soportado.
SqlState = ‘S22011’
Error de SUBSTRING. Los parámetros FROM y FOR, conjuntamente con la longitud del primer operando, viola las normas de la función SUBSTRING.
SqlState = ‘S22012’
División por cero. Una operación de división cuyo tipo de datos de resultado no contiene el concepto de infinito, tiene un cero como operando de la derecha.
SqlState = ‘S22015’
Desbordamiento de campo de intervalo. Una operación cuyo resultado es del tipo INTERVAL, ha originado un valor que sobrepasa el rango soportado por este tipo de datos.
SqlState = ‘S22018’
Valor de carácter no válido para una transformación CAST.
SqlState = ‘SPS001’
Terminal de destino no válido. Una sentencia PROPAGATE a terminal ha intentado utilizar un nombre de terminal no válido.
SqlState = ‘SPS002’
Etiqueta de destino no válida. Una sentencia PROPAGATE a etiqueta ha intentado utilizar un nombre de etiqueta no válido.
SqlState = 'MQW001', SqlNativeError = 0
La corriente de bits no satisface los requisitos para los mensajes de MQ. No se ha intentado colocarlo en una cola. Este problema no se resolverá mediante reintentos ni mediante la administración de colas.
SqlState = 'MQW002', SqlNativeError = 0
Los nombres de la cola de destino o del gestor de colas no eran válidos (es decir, no se han podido convertir de unicode a la página de códigos del gestor de colas). Este problema no se resolverá mediante reintentos ni vaciando la cola.
SqlState = 'MQW003', SqlNativeError = 0
Se ha especificado la modalidad de petición pero los nombres del gestor de colas o de la cola "de respuestas" no eran válidos (por ej., no se han podido convertir de unicode a la página de códigos del mensaje). Este problema no se resolverá mediante reintentos ni vaciando la cola.
SqlState = 'MQW004', SqlNativeError = 0
Se ha especificado la modalidad de respuesta pero los nombres del gestor de colas o de la cola tomados del mensaje no eran válidos (es decir, no se han podido convertir de la página de códigos dada a unicode). Este problema no se resolverá mediante reintentos ni vaciando la cola.
SqlState = 'MQW005', SqlNativeError = 0
Se ha especificado la modalidad de lista de destinos pero la lista de destinos proporcionada no satisface los requisitos básicos para las listas de destinos. No se ha intentado colocar ningún mensaje en una cola. Este problema no se resolverá mediante reintentos ni mediante la administración de colas.
SqlState = 'MQW101', SqlNativeError = El que devuelve MQ
No se ha podido abrir la cola o el gestor de colas de destino. Este problema no se resolverá mediante reintentos pero quizás sí se resolverá mediante la administración de colas.
SqlState = 'MQW102', SqlNativeError = el que devuelve MQ
No se ha podido grabar en la cola o el gestor de colas de destino. Es posible que este problema se resuelva mediante reintentos y mediante la administración de colas.
SqlState = 'MQW201', SqlNativeError = número de destinos con un error
Se ha producido más de un error mientras se procesaba una lista de destinos. Es posible que el mensaje se haya puesto en algunas colas, o no se haya puesto en ninguna. Es posible que este problema se resuelva mediante reintentos y mediante la administración de colas.
Cualquier elemento que el usuario haya utilizado en una sentencia THROW
Utilice Uuuuuuu para las excepciones de usuario, a menos que se imite una de las excepciones definidas más arriba.
Serie de caracteres vacía
Todos los demás errores.
Conceptos relacionados
Visión general de flujos de mensajes
Visión general de ESQL
Tareas relacionadas
Definir el contenido del flujo de mensajes
Desarrollo de ESQL
Captura del estado de la base de datos
Referencia relacionada
Función SQLCODE
Función SQLERRORTEXT
Función SQLNATIVEERROR
Avisos | Marcas registradas | Descargas | Biblioteca | Soporte | Su opinión
Copyright IBM Corporation 1999, 2006 Última actualización: 22/08/2006
ak17990_