El área SQLCA es una estructura que contiene una serie de variables estándar que van a ser empleadas para que nuestro programa reciba información acerca de cómo se han ejecutado nuestras sentencias SQL sobre una tabla DB2.
Este area contiene las siguientes variables: SQLCAID, SQLCABC, SQLCODE, SQLERRM, SQLERRP, SQLERRD, SQLWARN y SQLSTATE. De ellas, la más importante es la SQLCODE, ya que este código de retorno nos indicará si el acceso a la tabla DB2 ha sido correcto o no.
* AREA SQLCA
01 SQLCA SYNC.
05 SQLCAID PIC X(8) VALUE "SQLCA ".
05 SQLCABC PIC S9(9) COMP-5 VALUE 136.
05 SQLCODE PIC S9(9) COMP-5.
05 SQLERRM.
05 SQLERRP PIC X(8).
05 SQLERRD OCCURS 6 TIMES PIC S9(9) COMP-5.
05 SQLWARN.
10 SQLWARN0 PIC X.
10 SQLWARN1 PIC X.
10 SQLWARN2 PIC X.
10 SQLWARN3 PIC X.
10 SQLWARN4 PIC X.
10 SQLWARN5 PIC X.
10 SQLWARN6 PIC X.
10 SQLWARN7 PIC X.
10 SQLWARN8 PIC X.
10 SQLWARN9 PIC X.
10 SQLWARNA PIC X.
05 SQLSTATE PIC X(5).
*
Para declarar este área en nuestro programa Cobol bastará con incluir una claúsula INCLUDE en la sección WORKING-STORAGE. Si no hacemos esta declaración, la compilación del programa fallará, ya que el gestor de BBDD no tendrá definida el área de comunicaciones.
******************************************************************
* WORKING-STORAGE SECTION
******************************************************************
WORKING-STORAGE SECTION.
*
* AREA COMUNICACIONES SQL
* -----------------------
EXEC SQL
INCLUDE SQLCA
END-EXEC.
*
Como vemos, la claúsula es muy sencilla. Unicamente hay que escribir INCLUDE SQLCA entre las claúsulas EXEC SQL y END-EXEC de SQL. De esta forma, en nuestro programa ya estarán disponibles para su uso todas las variables existentes en la estructura SQLCA.
Y eso es todo. Si la cláusula INCLUDE SQLCA se define de la forma indicada en el fragmento de código de más arriba, entonces no deberíamos tener ningún problema con nuestro proceso de compilación (en lo que respecta al área de comunicaciones SQLCA, obviamente).
Tratamiento de la variable SQLCODE
Para finalizar, vamos a ver cuál es el tratamiento que se suele realizar sobre la variable SQLCODE (del área SQLCA) cada vez que realizamos un acceso a una tabla DB2. Este tratamiento se debe incluir a continuación de la sentencia que accede a la tabla.
En nuestro programa, tras el acceso a DB2, deberemos recoger el valor de la variable SQLCODE para saber si el acceso se ha realizado de forma correcta o no. Un ejemplo de cómo se haría esto es el siguiente (este código se añadiría tras la ejecución de una sentencia SELECT, por ejemplo).
*
* VALIDACION DEL ACCESO DB2
* -------------------------
EVALUATE TRUE
WHEN SQLCODE = ZEROES
DISPLAY 'ACCESO DB2 OK'
WHEN SQLCODE = +100
DISPLAY 'NO EXISTE REGISTRO'
WHEN OTHER
DISPLAY 'ERROR ACCESO DB2. SQLCODE: ' SQLCODE
PERFORM 9980-GENERAR-ERROR
THRU 9980-GENERAR-ERROR-EXIT
END-EVALUATE
*
Como vemos en el código, lo que se hace es validar si la variable SQLCODE es igual a algo de lo siguiente:
- Valor Cero: En ese caso, el acceso DB2 ha sido correcto y podemos continuar con nuestro proceso en el programa Cobol.
- Valor +100: aquí nos está indicando que no existe el registro buscado.
- Cualquier otro valor: significa que se ha producido un error en el acceso DB2. Por tanto, en nuestro programa deberemos indicar que la ejecución ha sido errónea.
Si establecemos así el tratamiento de SQLCODE tras cada acceso a una tabla DB2, entonces nuestro programa nos informará perfectamente de si dicho acceso se ha ejecutado correctamente o si, por contra, se ha producido un error.
Pues nada, esperamos que así hayan quedado aclaradas todas las dudas relacionadas con el área SQLCA.
Saludos.