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:
Excelente blog, no tendrias un ejemplo de MERGE usando COBOL? Gracias de antemano!
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/
gracias, son de muchisima ayuda para los que estamos empezando con este lenguaje! exitos!
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
saben de que manera se puede unir data set existentes con datos por in stream (dd *)??
saben de que manera se puede unir data set existentes con datos por in stream (dd *)??
Tienen algun ejemplo de join key en jcl que no sea de perro cobolero?
Buenas! En mundohost lo explican muy bien:
https://www.mundohost.es/category/joinkeys/
Hola, Se puede hacer el merge si uno de los archivos está vacío???