Desarrollando en Cobol y Natural sobre Plataforma Mainframe

domingo, 27 de octubre de 2013

Area de Comunicaciones SQLCA

El Area de Comunicaciones de SQL (SQLCA) es una estructura empleada por el gestor de Base de Datos para retornar información sobre errores a un programa Cobol. Necesitará ser declarada en nuestro programa siempre que vayamos a hacer uso de sentencias SQL.

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.

No hay comentarios:

Publicar un comentario

Related Posts Plugin for WordPress, Blogger...