SQLSTATE
Los SQLSTATE proporcionan información detallada sobre la causa de una advertencia o error. Los SQLSTATEs de este manual se basan en los que se encuentran en la especificación de la CLI de ISO/IEF, aunque los SQLSTATEs que comienzan por IM son específicos de ODBC.
A diferencia de los códigos de retorno, los SQLSTATEs de este manual son directrices y los controladores no son necesarios para devolverlos. Por lo tanto, aunque los controladores deben devolver el valor SQLSTATE adecuado para cualquier error o advertencia que puedan detectar, las aplicaciones no deben contar con esto siempre. Existen dos explicaciones para esta situación:
Incompletitud Aunque este manual enumera un gran número de errores y advertencias y las posibles causas de esos errores y advertencias, no está completo y probablemente nunca lo estará; las implementaciones de los controladores simplemente varían demasiado. Es probable que cualquier controlador determinado no devuelva todos los SQLSTATEs enumerados en este manual y puede que devuelva SQLSTATEs no enumerados en este manual.
Complejidad Algunos motores de base de datos, especialmente los motores de base de datos relacionales, devuelven literalmente miles de errores y advertencias. Es poco probable que los controladores de estos motores asignen todos estos errores y advertencias a SQLSTATEs debido al esfuerzo implicado, la inexactidad de las asignaciones, el gran tamaño del código resultante y el bajo valor del código resultante, que a menudo devuelve errores de programación que nunca se deben encontrar en tiempo de ejecución. Por lo tanto, los controladores deben asignar tantos errores y advertencias como parezca razonable y asegurarse de asignar esos errores y advertencias en los que se puede basar la lógica de la aplicación, como SQLSTATE 01004 (truncado de datos).
Dado que sqlSTATEs no se devuelven de forma confiable, la mayoría de las aplicaciones solo las muestran al usuario junto con su mensaje de diagnóstico asociado, que a menudo se adapta al error específico o advertencia que se produjo y código de error nativo. Rara vez se pierde la funcionalidad al hacerlo, ya que las aplicaciones no pueden basar la lógica de programación en la mayoría de los SQLSTATEs de todos modos. Por ejemplo, supongamos que SQLExecDirect devuelve SQLSTATE 42000 (error de sintaxis o infracción de acceso). Si la instrucción SQL que provocó este error está codificada de forma rígida o compilada por la aplicación, se trata de un error de programación y el código debe corregirse. Si el usuario escribe la instrucción SQL, se trata de un error de usuario y la aplicación ha hecho todo lo posible informando al usuario del problema.
Cuando las aplicaciones realizan lógica de programación base en SQLSTATEs, deben estar preparadas para que no se devuelva SQLSTATE o para que se devuelva un valor SQLSTATE diferente. Exactamente qué SQLSTATEs se devuelven de forma confiable solo se puede basar en la experiencia con numerosos controladores. Sin embargo, una guía general es que los SQLSTATEs para los errores que se producen en el controlador o el Administrador de controladores, en lugar del origen de datos, son más probables que se devuelvan de forma confiable. Por ejemplo, la mayoría de los controladores probablemente devuelven SQLSTATE HYC00 (característica opcional no implementada), mientras que es probable que menos controladores devuelvan SQLSTATE 42021 (columna ya existe).
Los siguientes SQLSTATEs indican errores o advertencias en tiempo de ejecución y son buenos candidatos para basar la lógica de programación. Sin embargo, no hay ninguna garantía de que todos los conductores los devuelvan.
01004 (datos truncados)
01S02 (valor de opción cambiado)
HY008 (operación cancelada)
HYC00 (característica opcional no implementada)
HYT00 (tiempo de espera expirado)
SQLSTATE HYC00 (característica opcional no implementada) es especialmente importante porque es la única manera en que una aplicación puede determinar si un controlador admite una instrucción o atributo de conexión determinado.
Para obtener una lista completa de SQLSTATEs y qué funciones devuelven, vea Apéndice A: Códigos de error ODBC. Para obtener una explicación detallada de las condiciones en las que cada función puede devolver un valor SQLSTATE determinado, consulte esa función.