Desarrollando en Cobol y Natural sobre Plataforma Mainframe

jueves, 10 de julio de 2014

Utilidad DFSORT para JCL (1)

En múltiples ocasiones, trabajando con información asociada a nuestra aplicación, hemos tenido la necesidad de ordenar los datos que aparecen en un determinado fichero secuencial. En ZOS tenemos la posibilidad de realizar dicha acción y almacenar los registros ordenados en un nuevo fichero.

La utilidad DFSORT (también denominada ICEMAN) se emplea para realizar la ordenación de los registros del fichero secuencial indicado y almacenar el resultado ordenado en un nuevo fichero. Aparte de esto, la utilidad también puede ser empleada para realizar simples copias de ficheros o para unir el contenido de varios ficheros.



Para ejecutar las funciones anteriores tendremos que hacer uso de alguno de los siguientes comandos asociados al programa DFSORT.

- SORT: ordenación de registros de un fichero.
- COPY: realizar copia de un fichero.
- MERGE: unir el contenido de varios ficheros.

A continuación, mostramos cómo debería usarse la utilidad DFSORT en un JCL con el que pretende realizarse la ordenación de los datos de un fichero. Para ello, deberá hacerse uso del comando SORT.

//*******************************************************

//*   DES: ORDENACION DE REGISTROS DE UN FICHERO        
//*******************************************************
//PASO1    EXEC PGM=DFSORT                              
//SYSOUT   DD SYSOUT=*                                  
//SORTIN   DD DSN=JJ00.FACTURAS.UNSORTED.DATA,DISP=OLD   
//SORTOUT  DD DSN=JJ00.FACTURAS.SORTED.DATA,             
//            DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,       
//            SPACE=(CYL,(1,1)),                        
//            LRECL=80,RECFM=F,BLKSIZE=0                
//SORTWK01 DD SPACE=(CYL,(1,1)),UNIT=SYSDA              
//SYSIN DD *                                            
  SORT FIELDS=(1,7,CH,A)              
          

Las declaraciones que hay que realizar en el paso del JCL son las siguientes:

1º) Card SYSOUT: Aquí tenemos que indicar el lugar al que deseamos que se envíen todos los mensajes generados durante el proceso de ejecución. Si ponemos SYSOUT=* entonces dicha información se enviará directamente al SPOOL (a la MSGCLASS indicada en nuestro job).

//SYSOUT   DD SYSOUT=*           

2º) Card SORTIN: Aquí se debe introducir el nombre del fichero secuencial de entrada cuyos registros deseamos que sean ordenados. En nuestro ejemplo se indica el fichero JJ00.FACTURAS.UNSORTED.DATA.

//SORTIN   DD DSN=JJ00.FACTURAS.UNSORTED.DATA,DISP=OLD   

3º) Card SORTOUT: Del mismo modo, aquí debe indicarse el nombre del nuevo fichero de salida en el que se van a almacenar los registros ordenados. En el ejemplo nosotros queremos que la información ordenada se guarde en el fichero JJ00.FACTURAS.SORTED.DATA, que será creado con los datos especificados.

//SORTOUT  DD DSN=JJ00.FACTURAS.SORTED.DATA,             
//            DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,       
//            SPACE=(CYL,(1,1)),                        
//            LRECL=80,RECFM=F,BLKSIZE=0  


4º) Card SORTWK01: Aquí se indica el tamaño del fichero auxiliar de trabajo que se va a emplear mientras se realizan los procesos de ordenación. Si el volumen de datos fuera muy elevado y no bastara con un único fichero auxiliar, se pueden añadir declaraciones con data sets adicionales: SORTWK02, SORTWK03, SORTWK04, etc...

//SORTWK01 DD SPACE=(CYL,(1,1)),UNIT=SYSDA       

El próximo día continuaremos viendo el resto de las declaraciones que hay que realizar en el paso de nuestro JCL para ejecutar un SORT de forma correcta. Aunque parezcan muchos parámetros, en realidad esto sólo nos parecerá difícil la primera vez. Después, simplemente habrá que repetir el mismo procedimiento para obtener resultados similares.

Eso es todo por ahora. Os emplazamos a la segunda parte del post para completar la visión global de la utilidad DFSORT y, en particular, de su función SORT.

Saludos.

No hay comentarios:

Publicar un comentario

Related Posts Plugin for WordPress, Blogger...