Вы находитесь на странице: 1из 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.namocode.es/

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

ndice

A.

Introducin............................................................................................................ 3

B.

Primer programa, HOLA MUNDO .................................................................. 4

Explicacin paso a paso ................................................................................................ 5


Primer ejemplo y comentarios....................................................................................... 7
Data Set con MainFrame, DSN......................................................................... 9

C.

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.

Diferentes tipos de JCLS. ................................................................................... 17


1.

JCL de Ordenacin: ........................................................................................ 17

2.

JCL de Transferencias: ................................................................................... 19

F.

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

G.

Bibliografa. ........................................................................................................ 21

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

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.namocode.es

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.namocode.es
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.namocode.es
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.namocode.es
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.namocode.es
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.namocode.es

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.namocode.es
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.namocode.es
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.namocode.es
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.namocode.es
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.namocode.es
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.namocode.es

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.namocode.es
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.namocode.es

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.namocode.es
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.namocode.es
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.namocode.es

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.namocode.es

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

21

Вам также может понравиться

  • Ener Tina
    Ener Tina
    Документ1 страница
    Ener Tina
    Cotrina Mauricio Alan
    Оценок пока нет
  • DP 00032793
    DP 00032793
    Документ10 страниц
    DP 00032793
    Cotrina Mauricio Alan
    Оценок пока нет
  • Los 10 Tipos Principales de Violencia Escolar
    Los 10 Tipos Principales de Violencia Escolar
    Документ4 страницы
    Los 10 Tipos Principales de Violencia Escolar
    Cotrina Mauricio Alan
    Оценок пока нет
  • Sexxx PDF
    Sexxx PDF
    Документ4 страницы
    Sexxx PDF
    Cotrina Mauricio Alan
    Оценок пока нет
  • Plan 2018
    Plan 2018
    Документ3 страницы
    Plan 2018
    Cotrina Mauricio Alan
    Оценок пока нет
  • Estructura de Mi Aula
    Estructura de Mi Aula
    Документ6 страниц
    Estructura de Mi Aula
    AngelicaLorenzo
    Оценок пока нет
  • Constancia Pago de Facturas PDF
    Constancia Pago de Facturas PDF
    Документ1 страница
    Constancia Pago de Facturas PDF
    Cotrina Mauricio Alan
    Оценок пока нет
  • Minería en Informatica
    Minería en Informatica
    Документ26 страниц
    Minería en Informatica
    Cotrina Mauricio Alan
    Оценок пока нет
  • 27005
    27005
    Документ11 страниц
    27005
    davidvel31
    Оценок пока нет
  • Ejemplo Proyecto Completo PMBOK
    Ejemplo Proyecto Completo PMBOK
    Документ233 страницы
    Ejemplo Proyecto Completo PMBOK
    angelpovis
    87% (63)
  • Proyecto de Apsi2
    Proyecto de Apsi2
    Документ54 страницы
    Proyecto de Apsi2
    Cotrina Mauricio Alan
    Оценок пока нет
  • Data Mining en El Sector Público - Análisis Del Sector Salud
    Data Mining en El Sector Público - Análisis Del Sector Salud
    Документ7 страниц
    Data Mining en El Sector Público - Análisis Del Sector Salud
    Alvaro Mejia
    Оценок пока нет
  • Proyecto Final 2
    Proyecto Final 2
    Документ7 страниц
    Proyecto Final 2
    Cotrina Mauricio Alan
    Оценок пока нет
  • Estructura Organizacional
    Estructura Organizacional
    Документ1 страница
    Estructura Organizacional
    Cotrina Mauricio Alan
    Оценок пока нет
  • Las Finanzas
    Las Finanzas
    Документ3 страницы
    Las Finanzas
    Cotrina Mauricio Alan
    Оценок пока нет
  • Rol Del Ing. de Computación y Sistemas
    Rol Del Ing. de Computación y Sistemas
    Документ6 страниц
    Rol Del Ing. de Computación y Sistemas
    Cotrina Mauricio Alan
    Оценок пока нет
  • 2012 20120425180406
    2012 20120425180406
    Документ8 страниц
    2012 20120425180406
    Cotrina Mauricio Alan
    Оценок пока нет
  • Proyecto Final 1
    Proyecto Final 1
    Документ7 страниц
    Proyecto Final 1
    Cotrina Mauricio Alan
    Оценок пока нет
  • Sisope 2
    Sisope 2
    Документ2 страницы
    Sisope 2
    Cotrina Mauricio Alan
    Оценок пока нет