Cuando una sentencia SQL en un programa tipo SQLRPGLE falla, no se producen los clásicos errores CPFXXXX. El programa, no genera un mensaje de error, no falla sino que simplemente muestra o no muestra información, procesa o no procesa la data. Esto es desconcertante puesto que a simple vista parece que nada sucede y sin embargo el programa no funciona. ¿Qué podemos hacer para saber que está ocurriendo internamente?
SQLCA es una
estructura de datos conformada por un conjunto de variables que son
actualizadas automáticamente luego de ejecutarse cada sentencia SQL
independientemente de que la sentencia SQL haya sido exitosa o fallida.
No es
necesario declarar esta estructura de datos, puesto que es generada
automáticamente por el sistema operativo dentro del código compilado del
programa a tiempo de compilación. El programador solo debe consultar en su
programa el valor de los campos de esta estructura de datos para establecer si
la sentencia SQL fue exitosa o no.
Hay tres
campos claves que deberían ser revisados por el programador luego de cada
sentencia SQL:
SQLCODE
Este campo
permite determinar si fue posible ejecutar exitosamente la sentencia:
Cuando su
valor es cero la sentencia fue completada con éxito.
Cuando su
valor es 100, la sentencia fue completada exitosamente pero no se encontraron
registros en
la base de datos que cumplieran con la condición establecida en las condiciones
del SQL definidas por el programador.
Si los
valores son menores a cero, quiere decir, en líneas generales, que la sentencia
SQL está mal construida.
En este
enlace pueden ver los distintos valores del campo SQLCODE y su significado:
SQLSTT (En las guías y textos la
referencian a veces como: SQLSTATE)
Es una
variable alfanumérica de cinco posiciones.
Devuelve un
error cuando hay problemas con la data o con violaciones de reglas de
restricción e integridad en la base de datos.
Hay algunos
programadores que prefieren utilizar el SQLSTT y otros el SQLCODE. Dependiendo
de qué tan precisos quieren ser de acuerdo a la naturaleza del error pueden
indistintamente elegir una u otra variable de control de errores. El SQL STT es
más exacto cuando se trata de errores de base de datos. Pueden ver en el
siguiente enlace las equivalencias entre los números de error arrojados por el
SQLCODE y el SQLSTATE.
SQLER3
Esta
variable retorna el número de filas encontradas/actualizadas en la sentencia
SQL.
Si quieres
saber el resultado de un SELECT o cuantas filas fueron modificadas luego de
ejecutar un UPDATE en tu programa, esta variable guarda ese valor.
Un ejemplo
de la utilidad de esta variable es la verificación de su valor luego de un select
* into :variable when condición. Si el select devuelve más de una fila, se
produce un error puesto que no es posible hacer INTO a una variable cuando el
resultado del select son varias filas. Con la variable SQLER3 puedes preguntar
las filas que resultaron de tu consulta. Hay otras maneras o variables que DB2
suministra para esta verificación, pero como estamos trabajando en este
artículo con la estructura de datos SQLCA me limito, por ahora, a este ejemplo.
Si te pareció
interesante, reenvíalo a un amigo haciendo click en el sobrecito que está al final
del artículo. El conocimiento es valioso, compártelo.
Autor: Ing. Liliana Suárez
Autor: Ing. Liliana Suárez