Está en la página 1de 21

Aprende Jcl desde 0.

Jos Navero
Este documento trata de explicar que es un Jcl y como construir uno a un nivel muy bsico. Posteriormente habr ms entregas con diferentes utilities que profundizar ms el tema

http://www.namocode.com http://devthisblog.wordpress.com/

http://www.namocode.com http://devthisblog.wordpress .com/

ndice

A. B.

Introducin ........................................................................................................ 3 Primer programa, HOLA MUNDO ................................................................ 4

Explicacin paso a paso ............................................................................................. 5 Primer ejemplo y comentarios .................................................................................... 7 C. Data Set con MainFrame, DSN ...................................................................... 9 Introduccin: .......................................................................................................... 9 DISP .......................................................................................................................... 9 SPACE .................................................................................................................... 10 UNIT ....................................................................................................................... 11 DCB ........................................................................................................................ 12 VOL ........................................................................................................................ 12 D. Caractersticas especiales de JCLS................................................................... 15 1. SYSIN .............................................................................................................. 15 2. DUMMY o DSN = NULLFILE ........................................................................ 15 3. Concatenacin de data Sets ............................................................................... 15 3. Parmetro SysOut ............................................................................................. 16 4. Parmetro SYSUDUMP y SYSABEND ........................................................... 16 E. 1. 2. F. G. Diferentes tipos de JCLS. ................................................................................ 17 JCL de Ordenacin: ..................................................................................... 17 JCL de Transferencias: ................................................................................ 19 ANEXO I: Data set Utilities (libreras) de JCLs. .............................................. 20 Bibliografa. .................................................................................................... 21

http://www.namocode.com http://devthisblog.wordpress .com/

A. Introducin
Job Control Languaje (JCL), Es un lenguaje de programacin que realiza tareas del sistema operativo generalmente usado en Mainframe. Podramos decir que es un tipo de lenguaje Script. Segn Wikipedia: Mediante declaraciones y sentencias de JCL se informa al sistema operativo de las tareas (por lotes o Bach) que debe realizar, la secuenciacin de las mismas y los contenedores de datos de entrada y salida (ficheros) para cada uno de los trabajos a ejecutar. Proporciona un alto grado de flexibilidad e independencia respecto de la localizacin fsica de los ficheros y de los programas.

NOTA: Este manual no pretende sustituir ningn otro, simplemente, es un intento de aclarar otros manuales que me cost seguir, por otro lado, este manual es una versin beta, por lo que se ir actualizando con el paso del tiempo

http://www.namocode.com http://devthisblog.wordpress .com/

B. Primer programa, HOLA MUNDO


Buscando por Internet, he encontrado un hola mundo en JCL, por lo que voy a plasmar dicho cdigo y pasare a documentarlo de la mejor forma posible, esto nos servir para poder ver una breve introduccin.
//HMUNJOB JOB 'JNAVERO', CLASS=E, MSGCLASS=X, // MSGLEVEL=(1,0),REGION=256K //PASO1 EXEC PGM=IEBGENER //SYSUT1 DD DATA,DLM=$$ /*******************************************************/ /* */ /* Hola, Mundo en JCL!! */ /* */ /*******************************************************/ $$ //SYSUT2 DD SYSOUT=A //SYSPRINT DD SYSOUT=A //SYSIN DD DUMMY //

http://www.namocode.com http://devthisblog.wordpress .com/ Explicacin paso a paso No os asustis, como se puede ver, es un poco diferente a todo lo que has podido ver con anterioridad. Paso a explicar cada una de las lneas. Estas sentencias estn especificadas en uno (MVC JCL Users Guide de IBM). Las // indican un comando o la finalizacin del JCL, todos los JCL finalizan con una // Por otro lado //* indica un comentario mientras que /* son delimitadores. Un JOB tiene un mnimo de 3 sentencias obligatorias y claramente diferenciadas que son: JOB: Marca el principio del trabajo, asignndole un nombre de trabajo adems de dar informacin como criterios de contabilidad accounting (Parmetros posicionales). EXEC: Marca el principio de un paso dndole el nombre de este paso que identifica dicho paso. Cada JOB puede tener uno o ms EXECs. DD: Identifican y describen los ficheros de entrada y salida que sern usados en los pasos. Cada EXEC tiene uno o ms DDs. Pasamos a analizar la primera lnea:
Linea 1: //HMUNJOB JOB '@HMUNDO', CLASS=E, MSGCLASS=X, REGION=6M

Continuando con el JOB, existen 2 tipos de parmetros que se le pueden pasar al JOB. Posicionales y de palabras clave. Los posicionales, respetan un orden mientras que los de palabras clave, no.
Linea 1: //HMUNJOB JOB 'JNAVERO', CLASS=E, MSGCLASS=X, Linea 2: MSGLEVEL=(1,0),REGION=256K

La sintaxis del Job es la siguiente:


// nombrejob JOB accounting, nombre_programador, class, msgclass, region

Accounting: Es el primer parmetro posicional (y opcional). Este cdigo es con lo que se identifica al JOB y podemos obtener informacin sobre los recursos que consume. Nombre del programador: Es el segundo parmetro y es donde se puede poner el nombre del programador que ha realizado el JOB.

http://www.namocode.com http://devthisblog.wordpress .com/ CLASS: Asigna un JOB a una clase determinada para su ejecucin. Depende de las caractersticas del JOB. MSGCLASS: Se usa para asignar el JOB a una clase de salida MSGLEVEL: Mediante dos sub-parmetros posicionales (van entre parntesis) que como veis se separan asimismo por comas, indican que queremos todos los mensajes JCL que se generen en el sistema (el primer 1) y luego, que tambin queremos los mensajes relacionados si reservamos o allocamos ficheros que vaya a usar el job (el segundo 1). Si slo quisiramos los mensajes JCL, el MSGLEVEL quedara as: MSGLEVEL(1,0). REGION: Asigna la capacidad de almacenamiento (espacio) Central o virtual que requiere el JOB.
Linea 3: //PASO1 EXEC PGM=IEBGENER

Marca el principio del EXEC e indica que UTILITIES (libreras) vamos a utilizar es el caso de PGM=IEBGENER, estas libreras, pueden estar definidas por una empresa o por nosotros mismos, por este tipo de libreras nos es necesario reservar memoria (como hicimos anteriormente con REGION) En este caso, IEBGENER tiene una serie de parmetros que se satisfacen en las lneas siguientes y paso a explicar a continuacin. (En el Anexo A se explican brevemente algunas libreras)
Linea Linea Linea Linea Linea Linea Linea Linea Linea Linea Linea 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: //SYSUT1 DD DATA,DLM=$$ /*******************************************************/ /* */ /* Hola, Mundo en JCL!! */ /* */ /*******************************************************/ $$ //SYSUT2 DD SYSOUT=A //SYSPRINT DD SYSOUT=A //SYSIN DD DUMMY //

Los parmetros de IEBGERNER Son los siguientes que explicare posteriormente. Sysut1, sysut2, sysprint y sysin DD: Especifica un data set y especifica los recursos necesarios de entrada y salida que nuestro data set necesite. Posteriormente se pueden especificar multitud de parmetros. Paso a describir los que tenemos aqu:

http://www.namocode.com http://devthisblog.wordpress .com/ DUMMY: Se utiliza este parmetro para no reservar espacio en la memoria es como decir en Linux que algo se copie a /dev/null, Se ver con mas detalle. SYSOUT = A: Define este data ser como un data set de salida y asigna la clase de salida, procesos externos de escritura, impresiones identificadas etc. SYSUT1: Indica desde donde se van a copiar los datos. Posteriormente vemos DD que es la definicin de los datos, es decir, como si fusemos a declarar una variable. SYSUT2: Indica hacia donde se copiaran los datos. SYSIN: Son parmetros opcionales que indican hacia donde se copiarn dichos datos SYSPRINT: Indica la salida del resultado de esos parmetros adicionales. Por ultimo como ya indique anteriormente, la // final indica el final de JCL. Primer ejemplo y comentarios
//@BORRADO JOB (999),'@BORRADO',CLASS=E,MSGCLASS=X,REGION=6M //* //************************************************************* //* * //* BORRADO PREVIO DE LOS FICHEROS * //* * //************************************************************* //DELETE EXEC PGM=IDCAMS //SYSPRINT DD SYSOUT=* //SYSIN DD * DELETE (PRUEBA.FICHERO1.SALIDA1 . . . . . . . . . . . <--tantas lineas como fich. a borrar PRUEBA.FICHERO1.SALIDA2 ) IF MAXCC < 9 THEN SET MAXCC = 0 /* //** RESTO DEL JCL EN SU CASO

Como podemos ver y como hemos visto en el ejemplo del hola mundo este no es muy diferente del anterior. Comienzo destripando este JCL comentndolo lnea a lnea ya que creo que es la mejor forma de aprender poco a poco, o como me diran y me dicen ltimamente ladrillito a ladrillito. La primera lnea indica el JCL a ejecutar, @Borrado, la clase donde se ejecuta (que es la cola de ejecucin), tambin sabemos que las lneas que hay despus son comentarios de lo que hace el JCL, es decir, todo lo que esta entre //*.

http://www.namocode.com http://devthisblog.wordpress .com/ En la siguiente lnea:


//DELETE EXEC PGM=IDCAMS

Vemos el nombre del paso (Delete) que ejecuta una librera (PGM = ) la librera afectada en este caso es IDCAMS. Las lneas de continuacin indican los parmetros necesarios para IDCAMS.
//SYSPRINT DD //SYSIN DD SYSOUT=* *

SYSIN: Indica que lo que va a continuacion sern los parmetros de entrada que se usaran la utiliti IDCAMS. En este caso el DELETE Mientras que SYSPRINT muestra la salida del JCL (generalmente por pantalla). Segn el JCL Reference de IBM, SYSOUT es un parmetro que especifica la clase de salida. Cuando ponemos el sysout = * estamos especificando una clase de salida por defecto.

http://www.namocode.com http://devthisblog.wordpress .com/

C. Data Set con MainFrame, DSN


Introduccin: Un data set es una coleccin de registros (como una base de datos). Los utiliza y/o los puede generar cualquier programa. Hay dos tipos de data set, Secuenciales y particionados. Los secuenciales, no requieren explicacin (el tpico ejemplo es una cinta de casset) y los particionados, que es como un contenedor que contiene varios data set secuenciales. Veamos un ejemplo e intentemos comprenderlo.
//TRABAJO1 JOB // //PASO1 EXEC //SYSUT1 DD //SYSUT2 DD //SYSPRINT DD //SYSIN DD //
'JNAVERO',URD,CLASS=E,MSGCLASS=A, MSGLEVEL=(1,1),REGION=256K PGM=IEBGENER DSN=USUARIO.FICHERO.NOM_DATASET,DISP=SHR SYSOUT=A SYSOUT=A DUMMY

Como vemos SYSUT1 tiene una definicin que apunta a un DSN (data set name). Si en vez de un data set normal (como este caso) fuese un data set particionado, solo cambiaria en esto: FICHERO.NOM_DATASET(ARCHIVO). De esa forma tendramos el contenedor y dentro el data set que hace referencia. Despus de esto nos encontramos con DISP. Esto es la disposicin en la que se encuentra nuestro data set. Indica la disposicin o bloqueo que vamos a realizar sobre un DSN (fichero) en el momento de ejecutar el job. DISP Puede tener hasta tres sub-parmetros, el primero de los sub-parmetros es el bloqueo del data set en la ejecucin del job, existiendo las siguientes opciones: DISP=SHR Para un data set que existe y que solo lo voy a leer (SHR de Shared es porque como solo lo leo, muchos otros pueden leerlo tambin). DISP=OLD Para un data set que existe y que voy a re-escribir/cambiar/borrar. DISP=MOD Para un data set al que le quiero aadir nueva informacin al final, no cambiando la existente.

http://www.namocode.com http://devthisblog.wordpress .com/ DISP=NEW Para un data set que crear nuevo en ese paso. En las ultimas 3 disposiciones, el bloqueo ser exclusivo: mientras mi job este en ejecucin, ninguna otra persona podr acceder a ese data set. El segundo sub-parmetro sirve para saber que hacer con ese data set cuando el paso termine. Puede tener los siguientes valores: KEEP Deja el data set como est. CATLG: Deja el data set como esta y lo cataloga en el catalogo correspondiente. UNCATLG: Si el data set termina anormalmente le sistema lo borra. PASS: Deja el fichero como esta, pero la decisin de que hacer con l lo decidir el siguiente paso. DELETE: Borra el data set del disco y del catalogo El tercer parmetro se utiliza para indicar que hacer si el job deja de funcionar, tiene los mismos valores que el segundo por ejemplo: DISP=(NEW,CATLG,CATLG) En este ejemplo le indicamos que nos cree un fichero, lo catalogue funcione o no el jcl. Cuando se crea un data set, es necesario reservar el espacio que va a ocupar dicho data set. Para ello, se usa el parmetro SPACE. Dicho parmetro tiene varios subparmetros, viene a ser algo as: SPACE SPACE= ({Metric,}(primary-qty[,second-qty][,directory]) [,RLSE] [,CONTIG] ) Todo lo que viene entre parntesis puede ser omitido. Paso a explicar esto que aunque parece complejo, no lo es (casi) Metric: Se refiere a la forma en la que se almacena el espacio, pueden ser: TRK: Indica el espacio a reservar en pistas (tracks) CYL: Indica el espacio a reservar en cilindros (cylinders) Blklgth: Indica el espacio a reservar en longitud de bloques. Reclgth: Indica el espacio a reservar en longitud de registros.

10

http://www.namocode.com http://devthisblog.wordpress .com/ Primary-qty: Especifica una de las siguientes: Para TRK, el numero de pistas a reservar Para CYL, el numero de cilindros a reservar Para la longitud de un bloque, el numero de datos del bloque en el data set Para la longitud de un registro, el numero de registros nuevos en el data set Second-qty: Especifica un espacio adicional de pistas, cilindros, bloques o registros. Directory: Especifica el numero de de registros de 256 bytes necesarios en el directorio de un data set particionado. Nota: Cuando se crea un data set particionado, se debe reservar el espacio para el directorio RSLE: Solicita el espacio reservado para la salida del data set, pero no se usa, este es liberado cuando el data set se cierra. Este parmetro de liberacin parcial causa el cierre de la funcin que libera el espacio no usado solo si el data set es abierto en modo de escritura y la ultima operacin no hizo lecturas. CONTIG: Indica que el espacio reservado para el data set debe ser contiguo, solo afecta al primero parmetro de reserva de espacio. Veamos un ejemplo de este sub-parmetro.
SPACE=(CYL,(10,,10),,CONTIG)

En este caso, el sistema, reserva 10 cilindros para el data set con 10 registros de 256byte para Un directorio. El ltimo parmetro (Contig) indica que reserve los 10 cilindros de forma contigua (seguidos). A continuacin pongo un ejemplo de un DNS completo as seguimos avanzando
//CCH10081 DD DSN=USUARIO.fichero.file, // UNIT=SYSDA, // DCB=(LRECL=9999,RECFM=FB,BLKSIZE=0,DSORG=PS), // SPACE=(9999,(100,10),RLSE), // DISP=(NEW,CATLG,CATLG)

De este ejemplo destacamos UNIT y DCB que veremos a continuacin el resto espero que se entienda, ya que se vio anteriormente, con esto sabremos crear un data set UNIT Especifica el sistema de almacenamiento. Generalmente se usa SYSDA que indica cualquier disco fsico de almacenamiento.

11

http://www.namocode.com http://devthisblog.wordpress .com/ DCB Data control block. En el DCB especificaremos 3 cosas: Formato del registro (RECFM, RECord ForMat), El tamao del registro lgico (LRECL Logical RECord Length) y el tamao del bloque (BLKSIZE, BLocK SIZE). Usando un ejemplo, si decimos que tenemos un data set con DCB=(RECFM=FB,LRECL=80,BLKSIZE=5600), le estamos diciendo que nuestro data set tiene un tamao de registro Fijo distribuido en Bloques (FB), cuya longitud de registro lgico es de 80 bytes y que el tamao del bloque utilizado es de 5600 bytes. El formato puede ser Fijo (F), Variable (V) y no especificado (U). As pues, si queremos que nuestro nuevo data set tenga ese tipo de disposicin, aadimos al JCL esa lnea. VOL Este parmetro se usa para identificar el nmero de serie del volumen donde residirn los dataset.

12

http://www.namocode.com http://devthisblog.wordpress .com/ Una vez visto los campos de los JCLs, vamos a ver algunos ejemplos de JCLs. Jcl de ejecucin de un programa
//@EJECUTA JOB (999),'@EJECUTA',CLASS=E,MSGCLASS=X,REGION=6M //* //************************************************************ //* EJECUCION DEL PROGRAMA CUALQUIERA * //************************************************************ //* //PASO10 EXEC PGM=IKJEFT01,DYNAMNBR=5,REGION=6M //STEPLIB DD DISP=SHR,DSN=LOADLIB // DD DISP=SHR,DSN=PROGRAM.LOAD //* //ENTRADA DD DSN=USUARIO.ARCHIVO.ENTRADA1, // DISP=SHR //* //SALIDA DD DSN=USUARIO.ARCHIVO.SALIDA, // UNIT=SYSDA, // DCB=(LRECL=9999,RECFM=FB,BLKSIZE=0,DSORG=PS), // SPACE=(9999,(100,10),RLSE), // DISP=(NEW,CATLG,CATLG) //* //SYSTSPRT DD SYSOUT=* //SYSPRINT DD SYSOUT=* //SYSABEND DD SYSOUT=* //SYSOUT DD SYSOUT=* //SYSABOUT DD SYSOUT=* //SYSUDUMP DD SYSOUT=* //SYSTSIN DD * DSN SYSTEM(DSN) RUN PROGRAM(CUALQUIERA) PLAN(PLAN) END /*

Pasamos a comentar este JCL para que podamos entenderlo y veamos que realmente es ms sencillo de lo que parece a simple vista.
Linea 1: //@EJECUTA JOB (999),'@EJECUTA',CLASS=E,MSGCLASS=X,REGION=6M Inicio del JCL pasandole los parametros necesarios como vimos en las paginas 4 y 5 de este manual.

En este ejemplo, podemos ver las siguientes lneas:


//ENTRADA DD DSN=USUARIO.ARCHIVO.ENTRADA1, // DISP=SHR //* //SALIDA DD DSN=USUARIO.ARCHIVO.SALIDA, // UNIT=SYSDA, // DCB=(LRECL=9999,RECFM=FB,BLKSIZE=0,DSORG=PS), // SPACE=(9999,(100,10),RLSE), // DISP=(NEW,CATLG,CATLG) //*

Estas, nos indica que leer un archivo ya catalogado (fichero de entrada) que se le pasar a nuestra aplicacin de Cobol, adems vemos que la disposicin a este fichero es SHR es decir compartida, por lo que otros usuarios podrn acceder al mismo tiempo que nosotros.

13

http://www.namocode.com http://devthisblog.wordpress .com/ Por otro lado el siguiente DSN. USUARIO.ARCHIVO.SALIDA, se puede ver que vamos a crear un nuevo fichero con new adems nos lo catalogar funcione nuestro programa o no, de error o no, siempre estar en el catalogo. Para finalizar, comentar que se almacenar en SYSDA que como se dijo anteriormente es el primer dispositivo libre que haya ademas de usar un control del bloque para el fichero (DCB). En este JCL solo queda comentar esto:
//SYSTSIN DD * DSN SYSTEM(DSN) RUN PROGRAM(CUALQUIERA) PLAN(PLAN) END /*

Que no es ni ms ni menos que se ejecute nuestro programa CUALQUIERA en un plan determinado, en funcin del entorno donde se est ejecutando el mismo.

14

http://www.namocode.com http://devthisblog.wordpress .com/

D. Caractersticas especiales de JCLS.


A continuacin pongo algunas de las caractersticas que tienen los JCLs que me he encontrado por ah, es posible que haya ms, pero, yo hago esta diferenciacin, siempre basndome en mi desconocimiento pero con la ayuda del libro gordo de IBM 1. SYSIN Esto no aparece en ningn JCL de los que hemos visto anteriormente, pero me he encontrado esto en una funcin que he hecho recientemente. No es ni ms ni menos que parmetros de entrada a una aplicacin Cobol. Le podemos pasar tantos como queramos y en nuestra aplicacin debemos leer tantos como queramos. Lo mejor es ver un ejemplo para comprenderlo rpidamente. Debemos tener nuestras variables definidas en Cobol. Para asignar recoger estas variable debemos hacer un ACCEPT por cada variable de Sysin que tengamos ACCEPT WS-VARIABLE1 ACCEPT WS-VARIABLE2 FROM FROM SYSIN SYSIN

Esto asignara nuestras variables del JCL a nuestra aplicacin. En nuestro JCL debemos aadir la siguiente lnea: //SYSIN DD * Parametro1 Parametro2 Los dos parmetros los pasaremos a nuestro programa de cobol que podremos almacenar en variables, tablas internas y las podremos tratas como ms nos guste. 2. DUMMY o DSN = NULLFILE Algunas veces necesitamos testear programas sin data set. Podemos usar DUMMY o DSN = NULLFILE si lo que deseamos es pasarle un valor nulo sin archivos de entrada o salida, o bien para generar algn tipo de error o por cualquier otro motivo. Cuando usamos estos valores, el sistema simula la presencia de un fichero. Cuando se lea el fichero, el sistema enviara un final de fichero. Ya hemos visto parte del funcionamiento en el hola mundo de JCL en las primeras pginas. 3. Concatenacin de data Sets Como dice el titulo, podemos concatenar diferentes ficheros en otro. Todos los data set concatenados deben ser del mismo tipo. Por ejemplo los data set particionados solo se pueden concatenar con otros data set particionados.

15

http://www.namocode.com http://devthisblog.wordpress .com/ Un ejemplo de esta concatenacin puede ser el siguiente:


//UNION //SYSPRINT //ENTRADA // // // // // // // EXEC PGM=IDCAMS DD SYSOUT=* DD DSN=fichero1, DISP=SHR DD DSN= fichero2, DISP=SHR DD DSN= fichero3, DISP=SHR DD DSN= fichero4, DISP=SHR

En el programa de cobol, recibir una entrada que es la concatenacin de los cuatro ficheros con los que podremos operar sin ningn tipo de complicacin 3. Parmetro SysOut Este parmetro se utiliza para generar la salida de nuestra aplicacin. Lo ms normal es que sea un fichero, pero tambin puede tratarse de la pantalla, la impresora o cualquier otro dispositivo. Creo que no requiere una explicacin mas detallada 4. Parmetro SYSUDUMP y SYSABEND Por lo que he visto en el manual de ibm, se usan para contener varios registros, variables, data set y son usados en caso de terminar de forma anormal el sistema produce un Gump (vuelco) de cierta informacin.

16

http://www.namocode.com http://devthisblog.wordpress .com/

E. Diferentes tipos de JCLS.


En este captulo voy a tratar los diferentes tipos de JCls que me he encontrado, no son muchos de momento, pero, poco a poco confo en ir ampliando este captulo. 1. JCL de Ordenacin: Lo mejor es poner un JCL de ordenacin y comentarlo para que se vea cmo funciona Suponemos un fichero de entrada sencillo: con tres campos Nombre Bbbbbb CCCC CCCC FFFFF AAAAA Dni 1111111 2222222 1111111 333333 333222 Apellido Ccccccc AAAAA BBBBB GGGGG BBBBBB

El fragmento del JCL que nos interesa, sera algo como esto:
//*************************************************************** //* ORDENACION DEL FICHERO TEMPORAL * //*************************************************************** //SORT EXEC PGM=SORT //SYSPRINT DD SYSOUT=* //SYSUDUMP DD SYSOUT=* //SYSDBOUT DD SYSOUT=* //SYSABOUT DD SYSOUT=* //SYSOUT DD SYSOUT=* //* //SORTIN DD DSN=Fichero_Entrada, // DISP=SHR //SORTOUT DD DSN=Fichero_Salida, // DISP=(NEW,CATLG,CATLG), // UNIT=SYSDA, // SPACE=(1940,(7000,10000),RLSE), // DCB=(LRECL=1940,RECFM=FB,BLKSIZE=0,DSORG=PS) //* //SORTWK01 DD UNIT=SYSDA, // SPACE=(TRK,(10,20)) //SORTWK02 DD UNIT=SYSDA, // SPACE=(TRK,(10,20)) //SORTWK03 DD UNIT=SYSDA, // SPACE=(TRK,(10,20)) //SYSIN DD * SORT FIELDS=(1,3,CH,A,6,3,CH,A) OUTREC FIELDS=(1,1940)

17

http://www.namocode.com http://devthisblog.wordpress .com/ El fichero resultado sera algo as: Nombre AAAAAA BBBBBB CCCCCC CCCCCC FFFFFF Dni 333222 111111 111111 222222 333333 Apellido BBBBBB CCCCCC BBBBBB AAAAAA GGGGGG

Explicacin: La sintaxis de SORT para ordenar registros depende de las palabras que nosotros le pasamos como parmetros (Podemos usar dos campos principales para realizar la ordenacin) En nuestro ejemplo:
SORT FIELDS=(1,3,CH,A,6,3,CH,A)

Usamos dos campos principales: 1,3,CH,A primer campo principal, comienza en la columna 1 y tiene una longitud de 3 caracteres. 6,3,CH,A Segundo campo que comienza en la lnea 6 con una longitud de 3 caracteres. CH: indica que son caracteres. Podemos usar BI para campos binarios. A: es el orden, en este caso ascendente. Adems, a SORT podemos aadirle otros parmetros al igual que se muestra en el ejemplo. Algunos de estos parmetros, pueden ser: SUM, OUTREC, INREC Para eliminar los campos duplicados se utiliza: SUM FIELDS=NONE Otra posibilidad es:
SUM FIELDS=NONE,XSUM

Esto le indicara eliminar registros duplicados y con la opcion XSUM estos registros se copiaran a otro data set previamente definido en el paso SORTXSUM. Con outrec o inrec aade elimina o reformatea los campos.

18

http://www.namocode.com http://devthisblog.wordpress .com/ 2. JCL de Transferencias: El JCL que a continuacin se explica, sirve para realizar la transferencia de ficheros entre diferentes entornos o diferentes usuarios dentro del mismo entorno.
//FTP JOB (1),'FTP',CLASS=A,MSGLEVEL=(1,1),MSGCLASS=X, // REGION=3000K //******************************************************************** //* ENVIA FICHEROS POR FTP //******************************************************************** //PASOFTP EXEC PGM=FTP,REGION=4096K //SYSPRINT DD SYSOUT=* //OUTPUT DD SYSOUT=* //SYSFTPD DD DISP=SHR,DSN=TCPIP.MDRVSJ.FTPSDATA.TCPIP //SYSTCPD DD DISP=SHR,DSN=TCPIP.MDRVSJ.FTPCDATA.TCPIP //*************************** //INPUT DD * HOSTNAME ( EXIT=8 USUARIO CONTRASEA <COMANDOS> QUIT /*

Este JCL es un ejemplo para realizar FTP. Paso a describir las diferentes opciones que se pueden realizar:

19

http://www.namocode.com http://devthisblog.wordpress .com/

F. ANEXO I: Data set Utilities (libreras) de JCLs.


IDCAMS: Mtodos de acceso a servicios ("Access Method Services). Genera y modifica data set VSAM y No VSAM. La referencia del mtodo de acceso deriva inicialmente del VSAM reemplazando todos los dems mtodos como los del OS/VS.

IEBCOMPR: Esta utilidad se usa para comparar dos registros secuenciales o en data set particionados, durante el proceso IEBCOMPR compara cada registro de cada data set uno a uno. Ejemplo:
//XXXXXXXW JOB XXXXXXX,AAAA.A.A,CLASS=G,MSGCLASS=1,NOTIFY=XXXXX //STEP01 EXEC PGM=IEBCOMPR,ACCT=PJ00000000 // INCLUDE MEMBER=@BATCHS //SYSIN DD DUMMY //SYSUT1 DD DSN=XXXXXXX.OLDFILE,UNIT=DASD,DISP=SHR //SYSUT2 DD DSN=XXXXXXX.NEWFILE,UNIT=DASD,DISP=SHR //SYSUT# DD

IEBCOPY: Copia y fusiona data sets particionados. Puede seleccionar o excluir miembros especificados durante la operacin de copiado adems de reemplazar o renombrar miembros del data set. Ejemplo:
//stepname EXEC PGM=IEBCOPY //SYSPRINT DD SYSOUT=class //MYDD1 DD DSN=xxxx.ppp.psps,DISP=shr //MYDD2 DD DSN=xxxx.ppp.pssp,DISP=shr //SYSIN DD * COPY INDD=MYDD1, OUTDD=MYDD2 SELECT MEMBER=(mem1,mem2,mem3)/ EXCLUDE member=(sf,df,sa) /* //

IEBGENER: Utilizado para copiar, crear o imprimir ficheros secuenciales y / o particionados. Tambin para manipular su contenido. IEBDG: Crea data sets con un patrn de datos. Usado para realizar pruebas

20

http://www.namocode.com http://devthisblog.wordpress .com/

G. Bibliografa.
MVC JCL User Guide de IBM. (RedBooks) Wikipedia. http://en.wikipedia.org/wiki/IBM_mainframe_utility_programs

21

También podría gustarte