viernes, 21 de enero de 2011

MERGE: unión de ficheros.

Agrupa varios ficheros por el/los campo/s indicado/s.

IMPORTANTE: para utilizar la sentencia MERGE, los ficheros de entrada deben haber sido previamente ordenados.

¡OJO!: Ahora el SORTIN cambia por SORTIN01, SORTIN02, etc.

//SORT001  EXEC PGM=SORT,PARM=('DYNALLOC=(SYSALLDA,32)')
//SORTIN01 DD DSN=nombre.fichero.entrada1,DISP=SHR
//SORTIN02 DD DSN=nombre.fichero.entrada2,DISP=SHR
//SORTINnn DD DSN=nombre.fichero.entradann,DISP=SHR
//SORTOUT  DD DSN=nombre.fichero.salida1,
//            DISP=(,CATLG,DELETE),SPACE=(CYL,(500,100))
//SYSOUT   DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SYSIN    DD *
 MERGE FIELDS=(I,L,T,O)

I – Inicio. Posición donde empieza el campo.
L – Longitud máxima del campo.
T – Tipo de dato del campo que se quiere sumar:
   CH - Alfanumérico o numérico normal(sin COMP)
   BI - Hexadecimal (campos COMP)
   PD - Empaquetado con o sin signo(campos COMP-3)
O – Orden. A-Ascendente, D- Descendente


Ejemplo:

Unir los siguientes ficheros por código de empleado:

Fichero 1:
----+----1----+----2----+----3----+----4----+----5
000000001JOSE      LOPEZ     PITA     AUTONOMO
000000002JAVIER    MARTINEZ  CARRETEROASALARIADO
000000003CARLOS    PEREZ     FANO     AUTONOMO
000000004CARLOS    POLO      DEL BARROAUTONOMO
000000005YOLANDA   LOPEZ     ALONSO   AUTONOMO
000000006ANTONIO   VILLA     SUSO     AUTONOMO
000000007FULANITO  VILLA     SUSO     AUTONOMO

Fichero 2:
----+----1----+----2----+----3----+----4----+----5
000000001JOSE      LOPEZ     PITA     AUTONOMO
000000002JAVIER    MARTINEZ  CARRETEROASALARIADO
000000003CARLOS    PEREZ     FANO     AUTONOMO
000000008CARLOS    POLO      DEL BARROAUTONOMO
000000009YOLANDA   LOPEZ     ALONSO   AUTONOMO
000000010ANTONIO   VILLA     SUSO     AUTONOMO

Fórmula:
MERGE FIELDS=(1,9,CH,A)

Resultado:
----+----1----+----2----+----3----+----4----+----5
000000001JOSE      LOPEZ     PITA     AUTONOMO
000000001JOSE      LOPEZ     PITA     AUTONOMO
000000002JAVIER    MARTINEZ  CARRETEROASALARIADO
000000002JAVIER    MARTINEZ  CARRETEROASALARIADO
000000003CARLOS    PEREZ     FANO     AUTONOMO
000000003CARLOS    PEREZ     FANO     AUTONOMO
000000004CARLOS    POLO      DEL BARROAUTONOMO
000000005YOLANDA   LOPEZ     ALONSO   AUTONOMO
000000006ANTONIO   VILLA     SUSO     AUTONOMO
000000007FULANITO  VILLA     SUSO     AUTONOMO
000000008CARLOS    POLO      DEL BARROAUTONOMO
000000009YOLANDA   LOPEZ     ALONSO   AUTONOMO
000000010ANTONIO   VILLA     SUSO     AUTONOMO

Al igual que con el SORT, el MERGE puede usarse con la opción COPY:
MERGE FIELDS=COPY

En este caso la estructura del JCL será la misma que la del SORT:

//SORT001  EXEC PGM=SORT,PARM=('DYNALLOC=(SYSALLDA,32)')
//SORTIN   DD DSN=nombre.fichero.entrada1,DISP=SHR
//         DD DSN=nombre.fichero.entrada2,DISP=SHR
//         DD DSN=nombre.fichero.entradann,DISP=SHR
//SORTOUT  DD DSN=nombre.fichero.salida1,
//            DISP=(,CATLG,DELETE),SPACE=(CYL,(500,100))
//SYSOUT   DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SYSIN    DD *
MERGE FIELDS=COPY
/*

Ejemplo:

Fichero 1:
----+----1----+----2----+----3----+----4----+----5
000000001JOSE      LOPEZ     PITA     AUTONOMO
000000002JAVIER    MARTINEZ  CARRETEROASALARIADO
000000003CARLOS    PEREZ     FANO     AUTONOMO
000000004CARLOS    POLO      DEL BARROAUTONOMO
000000005YOLANDA   LOPEZ     ALONSO   AUTONOMO
000000006ANTONIO   VILLA     SUSO     AUTONOMO
000000007FULANITO  VILLA     SUSO     AUTONOMO

Fichero 2:
----+----1----+----2----+----3----+----4----+----5
000000001JOSE      LOPEZ     PITA     AUTONOMO
000000002JAVIER    MARTINEZ  CARRETEROASALARIADO
000000003CARLOS    PEREZ     FANO     AUTONOMO
000000008CARLOS    POLO      DEL BARROAUTONOMO
000000009YOLANDA   LOPEZ     ALONSO   AUTONOMO
000000010ANTONIO   VILLA     SUSO     AUTONOMO

Fórmula:
MERGE FIELDS=COPY

Resultado:
----+----1----+----2----+----3----+----4----+----5
000000001JOSE      LOPEZ     PITA     AUTONOMO
000000002JAVIER    MARTINEZ  CARRETEROASALARIADO
000000003CARLOS    PEREZ     FANO     AUTONOMO
000000004CARLOS    POLO      DEL BARROAUTONOMO
000000005YOLANDA   LOPEZ     ALONSO   AUTONOMO
000000006ANTONIO   VILLA     SUSO     AUTONOMO
000000007FULANITO  VILLA     SUSO     AUTONOMO
000000001JOSE      LOPEZ     PITA     AUTONOMO
000000002JAVIER    MARTINEZ  CARRETEROASALARIADO
000000003CARLOS    PEREZ     FANO     AUTONOMO
000000008CARLOS    POLO      DEL BARROAUTONOMO
000000009YOLANDA   LOPEZ     ALONSO   AUTONOMO
000000010ANTONIO   VILLA     SUSO     AUTONOMO

9 comentarios:

Anónimo dijo...

Excelente blog, no tendrias un ejemplo de MERGE usando COBOL? Gracias de antemano!

Tallian dijo...

Pues ya que lo mencionas... vamos a preparar 2 artículos, uno con el MERGE y otro con el SORT dentro de un programa COBOL con ejemplos.
Pero mientras puedes echarle un ojo a este ejemplo:
http://xpertarticles.com/cobol/call-dfsort-cobol-merge-files/

Anónimo dijo...

gracias, son de muchisima ayuda para los que estamos empezando con este lenguaje! exitos!

RAFAEL YANEZ dijo...

Hola que tal, espero que esten bien, necesito por favor si alguien conoce la forma de generar un fichero a partir de dos ficheros de entrada, el primer fichero de entrada tiene solo un registro y el segundo tiene N cantidad, el fichero que quiero generar debe tener cada registro concatenado con el registro del primer fichero de entrada, muchas gracias

Carlos Mauro Causil Vergara dijo...

saben de que manera se puede unir data set existentes con datos por in stream (dd *)??

Carlos Mauro Causil Vergara dijo...

saben de que manera se puede unir data set existentes con datos por in stream (dd *)??

Juliena dijo...

Tienen algun ejemplo de join key en jcl que no sea de perro cobolero?

Tallian dijo...

Buenas! En mundohost lo explican muy bien:
https://www.mundohost.es/category/joinkeys/

Unknown dijo...

Hola, Se puede hacer el merge si uno de los archivos está vacío???