Desarrollando en Cobol y Natural sobre Plataforma Mainframe

miércoles, 6 de noviembre de 2013

Utilización de Variables de Indicador Nulo

Cuando intentemos recuperar un valor NULL de un campo de una tabla DB2 y almacenarlo en una variable del programa Cobol, nuestro compilador nos devolverá un error SQLCODE 305. Para subsanar este problema precisaremos del empleo de una Variable de Indicador Nulo (Null Indicator Variable).

De forma estándar, la sentencia FETCH sólo puede recuperar valores no nulos de los campos de las tablas DB2. Sin embargo, es posible que en nuestro programa queramos trabajar con registros que contengan NULL en alguno de sus campos. Aquí es donde entraría en juego la Variable de Indicador Nulo.



Normalmente, una sentencia FETCH se definiría del siguiente modo:

EXEC SQL                                    
  FETCH CUR_JJCLIEM0                        
    INTO                                    
         :S-CLIENTE,                        
         :S-NOMBRE,                         
         :S-APELLIDO1,                      
         :S-APELLIDO2,                      
         :S-ALTURA,                         
         :S-PESO,                           
         :S-IMC,                            
         :S-OBSERVACIONES, 
         :S-FECHA                           
END-EXEC
                                     

Y, en general, no tendría que haber problemas. Pero imaginemos que accedemos a un registro cuyo campo OBSERVACIONES tiene valor NULL. Entonces, esta sentencia no podría cargar dicho valor en la variable S-OBSERVACIONES y se produciría un error SQLCODE 305.

Para evitar este problema tendríamos que declarar en nuestro programa una Variable de Indicador Nulo que iría asociada a la variable S-OBSERVACIONES. Por ejemplo, podríamos definir una variable denominada I-OBS del siguiente modo.

01 VAR-INDICADOR-NULO.             
  05 I-OBS           PIC S9(4) COMP.

*

Es importante destacar que la Variable de Indicador Nulo debe tener el formato indicado, es decir, debe ser de tipo S9(4) COMP.  En caso contrario, se producirá un error en la fase de compilación.

Una vez definida la variable, hemos de proceder a declarar la sentencia FETCH incorporando I-OBS a continuación de I-OBSERVACIONES (usando los datos del ejemplo anterior). Por supuesto, este formato sería el mismo independientemente del nombre de las variables.

EXEC SQL                                    
  FETCH CUR_JJCLIEM0                        
    INTO                                    
         :S-CLIENTE,                        
         :S-NOMBRE,                         
         :S-APELLIDO1,                      
         :S-APELLIDO2,                      
         :S-ALTURA,                         
         :S-PESO,                           
         :S-IMC,                            
         :S-OBSERVACIONES INDICATOR :I-OBS, 
         :S-FECHA                           
END-EXEC    
                                

Como vemos, a continuación de la variable S-OBSERVACIONES se incluye la cláusula INDICATOR. Finalmente, se añade el nombre de la Variable de Indicador Nulo, precedido del literal ":". En el caso del ejemplo, vemos que se ha añadido INDICATOR :I-OBS.

:S-OBSERVACIONES INDICATOR :I-OBS

Con este simple cambio, nuestro FETCH ya permitirá recuperar el valor NULL del campo OBSERVACIONES del registro y lo trasladará a la variable S-OBSERVACIONES.

Al mismo tiempo que se se extrae la información del registro DB2, se cargará un valor en la Variable de Indicador Nulo, en función de la información recogida en el campo asociado. Los posibles valores de la Variable de Indicador Nulo serán los siguientes:

a) '0': el valor del campo no es nulo.
b) '-1': el campo de la tabla DB2 tiene valor NULL.
c) '-2': el valor del campo ha sido truncado.

Por tanto, tras el acceso a la tabla DB2 podremos verificar si el campo tenía un valor NULL simplemente con validar el contenido de la Variable de Indicador Nulo. Esto podría hacerse del siguiente modo, siguiendo con el ejemplo de I-OBSERVACIONES e I-OBS.

IF I-OBS < 0
  DISPLAY 'CAMPO EXTRAIDO CON VALOR NULL'
END-IF

Y eso sería todo con respecto a este tema. Como vemos, el tratamiento de las Variables de Indicador Nulo es bastante sencillo, pero tendremos que recordar no olvidar toda su implementación si alguna vez queremos trabajar con valores NULL de campos de tablas DB2.

Saludos.

3 comentarios:

Related Posts Plugin for WordPress, Blogger...