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).
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:
- 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.
- 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%’.
- 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.
- 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.