You are on page 1of 15

MANUAL JCL

VSAM.
Borrado de ficheros.
//PASO00
EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=*
//SYSIN
DD *
DELETE (CMPP.PER.MDBR20.CAABF020) CLUSTER PURGE
Creacion de ficheros.

(KSDS)

//PASO00
EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=*
//SYSIN
DD *
DEFINE CLUSTER (NAME(CMPP.PER.MDBR20.CAABF020) RECORDS(2000 200) SHR(2) FSPC(5 10) VOL(PROD11))DATA
(NAME(CMPP.PER.MDBR20.CAABF020.DATA) RECSZ(145 145) KEYS(13 0) CISZ(512)) INDEX (NAME(CMPP.PER.MDBR20.CAABF020.INDEX) CISZ(512) IMBED)
//DELDEFI EXEC PGM=IDCAMS
//SYSOUT
DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SETPRAY DD DSN=TPCOM.MANTIS.SETPRAY,DISP=SHR
//SYSIN
DD *
DELETE MANT540.CSOT.TRANSFER CLUSTER
IF LASTCC = 8 THEN DO
SET LASTCC = 0
SET MAXCC = 0
END
DEFINE CLUSTER(NAME(MANT540.CSOT.TRANSFER)SHAREOPTIONS(2)KEYS(36 0)RECORDSIZE(1400, 4000) FREESPACE(20,20))DATA(NAME(MANT540.CSOT.TRANSFER.DATA)CONTROLINTERVALSIZE(16384)CYLINDERS(10 2))INDEX(NAME(MANT540.CSOT.TRANSFER.INDEX))
REPRO INFILE(SETPRAY) OUTDATASET(MANT540.CSOT.TRANSFER) FROMKEY(' ') TOKEY(' ')
FROMKEY and TOKEY
Copy records beginning with a particular key value and ending with another key value.

1) IEBGENER
===========================================================
== Job: COPDUMP3
==
==
Requerimiento:
==
==
-------------==
==
Utilizara un cartucho NO LABEL de salida
==
==
Etiquetarlo como --> COPIA DUMP03
==
==
Entregarlo a Sistemas
==
===========================================================
/*
//STEP
EXEC PGM=IEBGENER
//SYSPRINT DD
SYSOUT=*
//SYSIN
DD DUMMY

//SYSUT1
//SYSUT2
//
//
//
IEBGENER

DD DSN=SYS1.DUMP03,DISP=SHR
DD UNIT=(CARTM,,DEFER),VOL=SER=SCO01S,DISP=SHR,
LABEL=(1,NL),DCB=(RECFM=FB,LRECL=4160,BLKSIZE=4160),
EXPDT=98000,
DSN=NLB.SCODUMP3.TPROV
GDG.

//PASO02 EXEC PGM=IEBGENER


//SYSPRINT DD SYSOUT=*
//SYSUT2
DD DSN=CMPP.PER.SALVA.CMPACGE(+1),DISP=(,CATLG),
//
UNIT=SYSPRO,SPACE=(CYL,(3,1),RLSE),
//
DCB=CMPP.PER.SALVA.CMPACGE.GDG
//SYSUT1
DD DSN=CMPP.PER.MDBR20.CMPACGE.UMI,DISP=SHR
//SYSIN
DD DUMMY
//*

SORT
The SORT program is used to sort data into a certain sequence or to merge from 2 to 100
previously sorted input data sets into 1 output data set.
//STEP10 EXEC PGM=SORT
//SYSOUT DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SORTIN DD DISP=SHR,DSN=<<>>
//SORTOUT DD DISP=(MOD,CATLG,DELETE),SPACE=(CYL,(5,5),RLSE),
// UNIT=SYSDA,DCB=*.SORTIN,
// DSN=<<>>
//SYSIN DD *
//************** INCLUDE SORT STEPS HERE
<!--[if !supportLists]-->1) <!--[endif]-->TO SORT ON POSITIONS say for eg. 1 to 7
SORT FIELDS=(1,7,CH,A)
Where
Sort fields = (position ,length ,format ,sequence) or
Sort fields = (position ,length , sequence..),format = CH/BI/PD/ZD.d
PD=packed Decimal(COMP-3), ZD=zone decimal.
NOTE :Instead of using JCL to perform SORT operation , there's one simple alternative,
For eg:- Open a Flat file in edit mode. On the command line type (say) SORT 1,7 and press
ENTER, the file will be sorted on positions 1 to 7 bytes.
2) TO COPY ALL THE RECORDS FROM INPUT FILE TO OUTPUT FILE
SORT FIELDS=COPY
3) TO COPY THOSE RECORDS WHICH SATISFY A PARTICULAR CONDITION.
INCLUDE COND=(38,10,CH,EQ,C'57071509',OR,36,10,CH,EQ,C' 57105779')
4) TO OMIT THOSE RECORDS WHICH SATISFY A PARTICULAR CONDITION.
OMIT COND=(19,1,CH,EQ,C'S',OR,19,1,CH,EQ,C'S')
5) TO SKIP CERTAIN NO OF RECORDS
SORT FIELDS=COPY,SKIPREC=1000
6) TO STOP AFTER COPYING CERTAIN NO OF RECORDS
SORT FIELDS=COPY,STOPAFT=5000

7) SKIPREC AND STOPREC CAN BE USED IN COMBINATION


SORT FIELDS=COPY,SKIPREC=1000,STOPAFT=5000
<!--[if !supportLists]-->8) <!--[endif]-->TO REMOVE DUPLICATES FROM THE FILE USING SORT
SORT FIELDS=(1,7,A),FORMAT=CH
SUM FIELDS=NONE

SORT ICEMAN

//*******************************************************************\\
//ORDEN4
EXEC PGM=ICEMAN
//SYSPRINT DD SYSOUT=*
//SYSOUT
DD SYSOUT=*
//SORTWK01 DD SPACE=(CYL,(50,50),RLSE)
//SORTWK02 DD SPACE=(CYL,(50,50),RLSE)
//SORTWK03 DD SPACE=(CYL,(50,50),RLSE)
//SORTWK04 DD SPACE=(CYL,(50,50),RLSE)
//SORTIN
DD DSN=CECFZ.UAFD.BAT1SB60.S1DQMI20.D%%ODATE,
//
DISP=SHR
//SORTOUT DD DSN=CECFZ.UAFD.BAT1TEMP.S2DQMI20.D%%ODATE,
//
DISP=(NEW,CATLG,DELETE),AVGREC=K,
//
SPACE=(1200,(100,50),RLSE),
//
RECFM=FB,LRECL=1200
//SYSIN
DD *
SORT FIELDS=(87,5,CH,A,66,8,CH,A,92,10,CH,A)
//*******************************************************************\\
//*******************************************************************/
//PASO01
EXEC PGM=ICEMAN,COND=(4,LT)
//SYSPRINT DD SYSOUT=X
//SYSOUT
DD SYSOUT=*
//SORTIN
DD DSN=P4K.KEVIH36.BPEVIH36.SALIDA,DISP=SHR
//SORTOUT DD DSN=P4K.KEVIH36.BPEVIH36.SALIDA.ISL,
//
DISP=(NEW,CATLG,DELETE),UNIT=TEST,
//
SPACE=(7000,(200,50),RLSE),
//
DCB=(RECFM=FB,LRECL=700,BLKSIZE=27300)
//SYSIN
DD *
SORT FIELDS=COPY
//*
//*******************************************************************/
//PASO05
EXEC PGM=ICEMAN,COND=(4,LT)
//SYSPRINT DD SYSOUT=X
//SYSOUT
DD SYSOUT=*
//SORTIN
DD DSN=P4K.KEVIH36.BPEVIH36.SALIDA.ISL,DISP=SHR
//
DD DSN=P4K.KEVIH35.BPEVIH35.SALIDA.ISL,DISP=SHR
//
DD DSN=P4K.KEVIH37.BPEVIH37.SALIDA.ISL,DISP=SHR
//
DD DSN=P4K.KEVIH39.BPEVIH39.SALIDA.ISL,DISP=SHR
//SORTOUT DD DSN=P4K.KEVIH36.BPEVIH36.SALIDA.SOR,
//
DISP=(NEW,CATLG,DELETE),UNIT=TEST,
//
SPACE=(7000,(200,50),RLSE),
//
DCB=(RECFM=FB,LRECL=700,BLKSIZE=27300)
//SYSIN
DD *
SORT FIELDS=(1,700,CH,A)
//*

SORT

CON OUTREC FICHERO VARIABLE.

//*******************************************************************\\
//* SORT PER ENTIOFI-MAT,CUENTA-MAT,DIGITO1,DIGITO2 - AVALAES
//**********************************************************************
//S0060
EXEC PGM=ICEMAN
//SYSPRINT DD SYSOUT=*
//SYSOUT
DD SYSOUT=*
//SORTIN
DD DSN=DESP.UGFD.STDRSTDR.UGDTGRP,

//
DISP=SHR
//SORTOUT DD DSN=DESP.UGFD.STDRSTDR.UGDTGRP.V2,
//
DISP=(NEW,CATLG,DELETE),AVGREC=K,
//
SPACE=(397,(250,50),RLSE),
//
RECFM=VB,LRECL=397
//SYSOUT
DD SYSOUT=*
//SYSIN
DD *
RECORD TYPE=V,LENGTH=397
OPTION DYNALLOC=(,15)
OUTREC FIELDS=(1,4,5:C'20133010',13:C'9600000026',19,170,D,209)
SORT FIELDS=(5,8,CH,A,13,10,CH,A)
//*

SORT

SORT

//*******************************************************************\\
//SORT02
EXEC PGM=SORT,
//
PARM='FLAG(I)'
//SYSOUT
DD SYSOUT=*
//SORTIN
DD DSN=CECFZ.UAFD.BAT1TEMP.S2DQMI20.D%%ODATE,
//
DISP=SHR
//SORTOUT DD DSN=CECFZ.UAFD.BAT1SB60.S2DQMI20.D%%ODATE,
//
DISP=(NEW,CATLG,DELETE),AVGREC=K,
//
SPACE=(1200,(50,10),RLSE),
//
RECFM=FB,LRECL=1200
//SORTWK01 DD AVGREC=K,
//
SPACE=(CYL,(50,10),RLSE)
//SORTWK02 DD AVGREC=K,
//
SPACE=(CYL,(50,10),RLSE)
//SORTWK03 DD AVGREC=K,
//
SPACE=(CYL,(50,10),RLSE)
//SYSIN
DD *
SORT FIELDS=(102,3,CH,A,424,98,CH,A)
/*
//PASO0 EXEC PGM=SORT,COND=(4,LT)
//*
//SORTIN
DD DSN=P4K.EISMA.G16120.VIDA.MANU,DISP=SHR
//SORTOUT DD DSN=P4K.MEVIPH33.BPEVIH36.SORT,
//
DISP=(NEW,CATLG,DELETE),UNIT=TEST,
//
SPACE=(6000,(200,50),RLSE),
//
DCB=(RECFM=FB,LRECL=700,BLKSIZE=27600)
//SYSOUT
DD SYSOUT=X
//SYSIN
DD *
SORT FIELDS=COPY
OMIT COND=(2,2,CH,EQ,C'3V',|,2,2,CH,EQ,C'4V')
//PASO0 EXEC PGM=SORT,COND=(4,LT)
//*
//SORTIN
DD DSN=P4K.EISMA.G16120.VIDA.MANU,DISP=SHR
//SORTOUT DD DSN=P4K.MEVIPH33.BPEVIH36.SORT,
//
DISP=(NEW,CATLG,DELETE),UNIT=TEST,
//
SPACE=(6000,(200,50),RLSE),
//
DCB=(RECFM=FB,LRECL=700,BLKSIZE=27600)
//SYSOUT
DD SYSOUT=X
//SYSIN
DD *
SORT FIELDS=COPY
OMIT COND=(2,2,CH,EQ,C'3V')
//PASO0 EXEC
//*
//SORTIN
DD
//SORTOUT DD
//
//
//
//SYSOUT
DD
//SYSIN
DD

PGM=SORT,COND=(4,LT)
DSN=P4K.EISMA.G16120.VIDA.MANU,DISP=SHR
DSN=P4K.MEVIPH33.BPEVIH36.SORT,
DISP=(NEW,CATLG,DELETE),UNIT=TEST,
SPACE=(6000,(200,50),RLSE),
DCB=(RECFM=FB,LRECL=700,BLKSIZE=27600)
SYSOUT=X
*

SUM FIELDS=NONE
SORT FIELDS=(1,600,CH,A)
//*
//PASO0 EXEC PGM=SORT,COND=(4,LT)
//*
//SORTIN
DD DSN=P4K.EISMA.G16120.VIDA.MANU,DISP=SHR
//SORTOUT DD DSN=P4K.MEVIPH33.BPEVIH36.SORT,
//
DISP=(NEW,CATLG,DELETE),UNIT=TEST,
//
SPACE=(6000,(200,50),RLSE),
//
DCB=(RECFM=FB,LRECL=700,BLKSIZE=27600)
//SYSOUT
DD SYSOUT=X
//SYSIN
DD *
SUM FIELDS=NONE
SORT FIELDS=(1,600,CH,A)
OMIT COND=(2,2,CH,EQ,C'4V')
//*
//PASO0 EXEC PGM=SORT,COND=(4,LT)
//*
//SORTIN
DD DSN=P4K.EISMA.G16120.VIDA.MANU,DISP=SHR
//SORTOUT DD DSN=P4K.MEVIPH33.BPEVIH36.SORT,
//
DISP=(NEW,CATLG,DELETE),UNIT=TEST,
//
SPACE=(6000,(200,50),RLSE),
//
DCB=(RECFM=FB,LRECL=600,BLKSIZE=27300)
//SYSOUT
DD SYSOUT=X
//SYSIN
DD *
SORT FIELDS=COPY,
STOPAFT=15
//*

SORT PARA EXTRACCION POCOS REGISTROS - STOPAFT

//*******************************************************************\\
//* SORT PER GUARDAR FITXER SENCER A TRACTAR.
//**********************************************************************
//S0020
EXEC PGM=ICEMAN
//SYSPRINT DD SYSOUT=*
//SYSOUT
DD SYSOUT=*
//SORTIN
DD DSN=PCTINT.N61367PA.D110310.T195200.ORI,
//
DISP=SHR
//SORTOUT DD DSN=DESP.UGFD.STDRSTDR.E1DQX180,
//
DISP=(NEW,CATLG,DELETE),AVGREC=K,
//
SPACE=(368,(250,50),RLSE),
//
RECFM=FB,LRECL=368
//SYSIN
DD *
OPTION STOPAFT=10
SORT FIELDS=COPY
//*

SORT CON NOMBRES (SYMNAMES)

//S0130
//SYSPRINT
//SYSOUT
//SORTIN
//
//SORTOUT
//
//

EXEC PGM=ICEMAN
DD SYSOUT=*
DD SYSOUT=*
DD DSN=CECFZ.UGFD.BAT1SB30.%%TAULA01..%%ORDATE,
DISP=SHR
DD DSN=CECFZ.UGFD.BAT1SB30.SORT2001.%%ORDATE,
DISP=(NEW,CATLG,DELETE),AVGREC=K,
SPACE=(159,(50,10),RLSE),

//
RECFM=FB,LRECL=159
//SYSOUT
DD SYSOUT=*
//SYMNAMES DD *
ENTIOFI-MAT,43,8
CUENTA-MAT,56,10
UGIPPCOM,2082,16
UGIPACOM,2099,16
UGFEINPE,2116,10
//SYSIN
DD *
OPTION DYNALLOC=(,15)
SORT FIELDS=(ENTIOFI-MAT,CH,A,
CUENTA-MAT,CH,A)
OUTREC FIELDS=(1,103,UGIPPCOM,C';',UGIPACOM,C';',UGFEINPE,C';',
11C'0001-01-01;')
//*
REPRO
//JS0SAV
EXEC PGM=IDCAMS,COND=(4,LT)
//SYSPRINT DD SYSOUT=X
//FITXER1 DD DSN=V3K.EVIMA.F0533.COPIA,DISP=SHR
//FITXER2 DD DSN=P4K.EVIMA.F0533.COPIA,
//
DISP=(NEW,CATLG,DELETE),UNIT=TEST,
//
SPACE=(4506,(200,50),RLSE),
//
DCB=(RECFM=VB,LRECL=4506,BLKSIZE=27036)
//SYSIN
DD *
REPRO INFILE(FITXER1) OUTFILE(FITXER2)
/*
//*

LOAD REPLACE
//*******************************************************************\\
//S0030
EXEC PGM=DSNUTILB,
//
REGION=32M,
//
PARM='DB0Z,UGPT0001'
//STEPLIB DD DSN=DB2Z.CECZ.DSNLOAD,
//
DISP=SHR
//SYSPRINT DD SYSOUT=*
//UTPRINT DD SYSOUT=*
//CEEDUMP DD SYSOUT=Z
//SYSDBOUT DD SYSOUT=Z
//SYSUDUMP DD SYSOUT=Z
//SORTWK01 DD UNIT=SYSDA,
//
SPACE=(CYL,(100,100),RLSE)
//SORTWK02 DD UNIT=SYSDA,
//
SPACE=(CYL,(100,100),RLSE)
//SORTWK03 DD UNIT=SYSDA,
//
SPACE=(CYL,(100,100),RLSE)
//SORTWK04 DD UNIT=SYSDA,
//
SPACE=(CYL,(100,100),RLSE)
//SORTWK05 DD UNIT=SYSDA,
//
SPACE=(CYL,(100,100),RLSE)
//SORTWK06 DD UNIT=SYSDA,
//
SPACE=(CYL,(100,100),RLSE)
//SORTWK07 DD UNIT=SYSDA,
//
SPACE=(CYL,(100,100),RLSE)
//SORTWK08 DD UNIT=SYSDA,
//
SPACE=(CYL,(100,100),RLSE)
//SORTWK09 DD UNIT=SYSDA,
//
SPACE=(CYL,(100,100),RLSE)
//SORTWK10 DD UNIT=SYSDA,
//
SPACE=(CYL,(100,100),RLSE)
//SORTWK11 DD UNIT=SYSDA,
//
SPACE=(CYL,(100,100),RLSE)
//SORTWK12 DD UNIT=SYSDA,
//
SPACE=(CYL,(100,100),RLSE)
//*SYSREC
DD DUMMY
//SYSREC
DD DSN=CECFZ.UGFD.BAT1SB30.UGDTERRL.%%ORDATE2,

//
DISP=OLD,FREE=CLOSE
//*YSUT1
DD DSN=DCCINT.UGFD.BAT1NBAS.SYSUT1R0,
//SYSUT1
DD DSN=CECFZ.UGFD.BAT1NBAS.SYSUT1R0,
//
DISP=(MOD,DELETE,CATLG),AVGREC=K,
//
UNIT=SYSDA,
//
SPACE=(CYL,(4200,300),RLSE)
//SORTOUT DD DSN=CECFZ.UGFD.BAT1NBAS.SORTOUR0,
//
DISP=(MOD,DELETE,CATLG),AVGREC=U,
//
UNIT=SYSDA,
//
SPACE=(CYL,(250,250),,,ROUND)
//SYSERR
DD DSN=CECFZ.UGFD.BAT1NBAS.SYSERRR0,
//
DISP=(MOD,DELETE,CATLG),AVGREC=U,
//
UNIT=SYSDA,
//
SPACE=(16384,(20,20),,,ROUND)
//SYSMAP
DD DSN=CECFZ.UGFD.BAT1NBAS.SYSMAPR0,
//
DISP=(MOD,DELETE,CATLG),AVGREC=U,
//
UNIT=SYSDA,
//
SPACE=(16384,(20,20),,,ROUND)
//SYSIN
DD *
LOAD DATA LOG NO REPLACE INDDN SYSREC
INTO TABLE
DB2GZADM.UGDTERR
(UGINTERF POSITION(1:8) CHAR (8)
,UGENTORI POSITION(9:10) CHAR (2)
,UGNUMREG POSITION(11:25) CHAR (15)
,UGOPERA1 POSITION(26:45) CHAR (20)
,UGOPERA2 POSITION(46:65) CHAR (20)
,UGNUMCAM POSITION(66:67) DECIMAL
,UGCODCAM POSITION(68:75) CHAR (8)
,UGCCAMPO POSITION(76:95) CHAR (20)
,UGEDESTI POSITION(96:97) CHAR (2)
,UGINDCOD POSITION(98:98) CHAR (1)
,UGERROR POSITION(99:105) CHAR (7)
,UGFEALTA POSITION(106:115) DATE EXTERNAL(10)
,UGOBSERV POSITION(116:315) CHAR (200)
,UGCOFULM POSITION(316:319) CHAR (4)
,UGCUSULM POSITION(320:327) CHAR (8)
,UGNTRULM POSITION(328:335) CHAR (8)
,UGFTIULM POSITION(336:361) TIMESTAMP EXTERNAL(26)
)
/*
//*******************************************************************\\
//S0040
EXEC KDPZ0600,DATABAS=UGDBPREZ,DATE=D%%ODATE,DSSN=0001,
//
PREFCEC=CECZ,SUBSYS=DB0Z,SYSTEM=DB2Z,TABLESP=UGDSERR,
//
UID=RV2%%ORDERID,VCAT=CECZDB
//SYSIN
DD *
COPY TABLESPACE UGDBPREZ.UGDSERR
/*

DELETE FICHEROS

//*********************************************************************
//DELINI
EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=*
//SYSOUT
DD SYSOUT=*
//SYSIN
DD *
DELETE CECFZ.UGFD.BAT1SB30.UG02VCA0.%%ORDATE
DELETE CECFZ.UGFD.BAT1SB30.UG020001.%%ORDATE
DELETE CECFZ.UGFD.BAT1SB30.JZFWUG02.%%ORDATE
IF MAXCC=8 THEN SET MAXCC=0
//*

Parametrizacio dels programes.

Hay varias maneraz de que los programas reciban la informacion desde el job. Vamos a
explicar alguna de ellas

En el job en la ficha SYSTSIN Se incluye el termino parms


//SYSTSIN
DD *
DSN SYSTEM(DBD1)
RUN PROGRAM(AB80002) PLAN(SIBISBAT) PARMS('&TFECANT')
END
/*
es necesario para que el programa entienda se coloquen dos bits por delante que
corresponderian entre comillas a la longitud
LINKAGE SECTION.
01 DATOS-INPUT.
05 FILLER
05 FECHA-INPUT

PIC X(2).
PIC X(6).

En el job se escriben puntos despues de la variable recibida para poder escribir la coma
entre las variables.
//AD00030 EXEC PGM=AH87777,COND=(4,LT),
// PARM=('&ENTORNO.,&OYMD1.,')
el programa las recibe del siguiente modo..
LINKAGE SECTION.
01

PARAMETROS.
02 HW
02 IPARAM

PIC 9(4) COMP-5.


PIC X(100).

Generaci en buit de un fitxer con ICEMAN


//KX860030 EXEC PGM=ICEMAN
//SORTIN
DD DUMMY,DCB=(LRECL=95,RECFM=FB,BLKSIZE=9500)
//SORTOUT
DD DSN=TRASPASO.JKX2005D.KX8570F.V01,
//
DISP=(NEW,CATLG,DELETE),
//
DCB=(RECFM=FB,LRECL=95,BLKSIZE=0),
//
SPACE=(TRK,(1,1),RLSE),UNIT=SYSDA
//SYSIN
DD *
SORT FIELDS=COPY
/*
//SYSTSPRT DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SYSOUT
DD SYSOUT=*
//SYSABOUT DD SYSOUT=*
//SYSDBOUT DD SYSOUT=*
//*

Generacion fitxer con la utlidad IEBGENER

//PASO0020 EXEC PGM=IEBGENER,REGION=4096K,COND=(0,NE)


//********************************************************************
//* PASO0030 - CREACIO FITXER SALIDA 00990000
//********************************************************************
//SYSUT1 DD DUMMY,DCB=(LRECL=250,BLKSIZE=27998,RECFM=VB,DSORG=PS)
//SYSUT2 DD DSN=TRASPASO.PUENTE1.FRC200C,DISP=(,CATLG,CATLG),
// UNIT=SYSDA,SPACE=(TRK,(1,1)),
// DCB=(LRECL=1289,RECFM=VB,DSORG=PS)
//SYSIN DD DUMMY
//SYSPRINT DD SYSOUT=*

Generacion con IDCAMS - REPRO

//*******************************************************
//* REPRO
//*******************************************************

//PASO0010 EXEC PGM=IDCAMS


//SYSPRINT DD SYSOUT=*
//IN DD DUMMY
//OUT DD DSN=TRASPASO.PUENTE1.FRC200S,DISP=(NEW,CATLG),
// UNIT=SYSDA,SPACE=(TRK,(50,10),RLSE),
// DCB=(RECFM=VB,LRECL=1289,BLKSIZE=27998,DSORG=PS)
//SYSIN DD *
REPRO INFILE (IN) OUTFILE (OUT)

Creacion de un fichero en cartucho previa ordenacion del fichero de entrada

//S0020
EXEC PGM=ICEMAN
//SYSPRINT DD SYSOUT=*
//SORTIN
DD DSN=CECFZ.UGFD.BAT1SB30.%%TAULA1..%%ORDATE,
//
DISP=SHR
//SORTOUT DD DSN=CECFZ.UGFD.BAT1NBAS.E1DQW570.%%ORDATE
//
DISP=(NEW,CATLG,DELETE),
//
UNIT=(VTS,,DEFER),
//
LABEL=(1,SL),RETPD=30,
//
VOL=(,,,99),
//
RECFM=FB,LRECL=499
//SYSOUT
DD SYSOUT=*
//SYSIN
DD *
OPTION DYNALLOC=(,15)
SORT FIELDS=(80,8,CH,A,
89,1,CH,A,
91,1,CH,A,
93,10,CH,A,
106,10,CH,A)
//*
//**********************************************************************
//S0030
EXEC PGM=ICEMAN
//SYSPRINT DD SYSOUT=*
//SORTIN
DD DSN=CECFZ.UGFD.BAT1SB30.%%TAULA2..%%ORDATE,
//
DISP=SHR
//SORTOUT DD DSN=CECFZ.UGFD.BAT1NBAS.E2DQW570.%%ORDATE,
//
DISP=(NEW,CATLG,DELETE),AVGREC=K,
//
SPACE=(650,(50,10),RLSE),
//
RECFM=FB,LRECL=650
//SYSOUT
DD SYSOUT=*
//SYSIN
DD *
OPTION DYNALLOC=(,15)
SORT FIELDS=(80,8,CH,A,
89,1,CH,A,
91,1,CH,A,
93,10,CH,A,
120,10,CH,A)
//*

INSERT, UPDATE TABLE

//UGJEAGSS JOB (EEVL,1),'UG',CLASS=W,MSGCLASS=E,COND=(4,LT),


//
GROUP=CECGE,REGION=32M,SCHENV=BATCH
//*******************************************************************\\
//S0010
EXEC PGM=IKJEFT1A,DYNAMNBR=20
//SYSTSPRT DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=Z
//SYSPUNCH DD SYSOUT=*
//SYSIN
DD *
UPDATE DB2GEADM.UGDTAVA
SET CODIGAR = '121'
WHERE ((ENTIOFI = '20136133' AND CUENTA
(ENTIOFI = '20136140' AND CUENTA
(ENTIOFI = '20136163' AND CUENTA
COMMIT;

= '9800000554') OR
= '9806882338') OR
= '9801202449'));

UPDATE DB2GEADM.UGDTAVA
SET CODIGAR = '121'
WHERE ((ENTIOFI = '20136133' AND CUENTA
(ENTIOFI = '20136140' AND CUENTA
(ENTIOFI = '20136163' AND CUENTA
COMMIT;
UPDATE DB2GEADM.UGDTAVA
SET CODIGAR = '311'
WHERE ((ENTIOFI = '20136076' AND CUENTA
(ENTIOFI = '20136165' AND CUENTA
(ENTIOFI = '20136090' AND CUENTA
COMMIT;

= '9800000554') OR
= '9806882338') OR
= '9801202449'));

= '9800000174') OR
= '9800000810') OR
= '9800007476'));

INSERT INTO DB2GEADM.UGDTGRP


(ENTIOFI,
CUENTA,
CODIGAR,
SECUENCIA,
CLIENTE,
TIPODOGA,
ENTIDAD_UMO,
USERID_UMO,
NETNAME_UMO,
TIMESTAMP,
UGCDIVIS)
VALUES ('20136076',
'9800000174',
'311',
+1,
'11804654',
'N',
'2013',
'UG4CW820',
'BATCH',
CURRENT TIMESTAMP,
'EUR');
COMMIT;
//SYSTSIN DD *
DSN SYSTEM(DB0E)
RUN PROGRAM(DSNTIAD) PLAN(DSNTIAD) LIB('DB2E.RUNLIB.LOAD')
END
/*

INFORMACION LOAD UNLOAD

COPYPEND

LOAD
La utilidad "LOAD" se utiliza para realizar "cargas" de datos a una tabla DB2.
La carga se realizar desde un fichero que puede venir con el formato de la tabla o no.
La estructura general de un paso de LOAD sera algo as:
//*================================================
//* CARGA DE LA TABLA TBPRU00
//* Donde los ficheros SORTWKXX son temporales para
//* ordenar la entrada
//* el SYSREC es el fichero con los datos para la carga
//* y el SORTOUT es temporal para ordenar la salida
//*======================================================
//LOADTBL EXEC DSNUPROC,SYSTEM=DSNP,UID=LOADIND
//DSNUPROC.SORTWK01 DD DSN=&&SORTWK01,
// DISP=(NEW,DELETE,DELETE),
// SPACE=(4000,(1000,700),,,ROUND),

// UNIT=SYSDA
//DSNUPROC.SORTWK02 DD DSN=&&SORTWK02,
// DISP=(NEW,DELETE,DELETE),
// SPACE=(4000,(1000,700),,,ROUND),
// UNIT=SYSDA
//DSNUPROC.SORTWK03 DD DSN=&&SORTWK03,
// DISP=(NEW,DELETE,DELETE),
// SPACE=(4000,(1000,700),,,ROUND),
// UNIT=SYSDA
//DSNUPROC.SORTWK04 DD DSN=&&SORTWK04,
// DISP=(NEW,DELETE,DELETE),
// SPACE=(4000,(1000,700),,,ROUND),
// UNIT=SYSDA
//DSNUPROC.SYSUT1 DD DSN=&&SYSUT1,
// DISP=(NEW,DELETE,DELETE),
// SPACE=(4000,(5000,2000),,,ROUND),
// UNIT=SYSDA
//DSNUPROC.SYSREC DD DSN=XXXX.LOAD.TABLA,DISP=SHR
//DSNUPROC.SORTOUT DD DSN=&&SORT1,UNIT=SYSDA,
// SPACE=(4000,(5000,2000),,,ROUND)
//SYSIN DD *
1. Vamos a ver en primer lugar el caso ms sencillo, con un fichero de carga que tenga el
mismo formato que la tabla:
//SYSIN DD *
LOAD
A continuacin tendramos varias opciones:
//*Si vamos a aadir registros
RESUME YES
INTO TABLE TBPRU00
LOG NO NOCOPYPEND
/*
//*Si vamos a reemplazar registros (se borrarn todos los que haya)
RESUME NO REPLACE
INTO TABLE TBPRU00
LOG NO NOCOPYPEND
/*
Utilizamos la opcin RESUME para indicar si vamos a cargar datos en una tabla vaca o no:
RESUME YES: La tabla no est vaca, aadimos los registros de nuestro fichero.
RESUME NO: La tabla est vaca. Por si no lo estuviese, indicamos con REPLACE que
reemplace los registros existentes por los de nuestro fichero.
La opcin NOCOPYPEND se utiliza para quitar el estado COPY de la tabla y que quede
accesible despus de la LOAD.
2. Para el caso en que el fichero no tenga el mismo formato que la tabla tendramos un
paso de JCL similar, pero despus de indicar el nombre de la tabla, indicaramos para cada
campo de la tabla, las posiciones que tiene el mismo campo en el fichero, y le daramos el
formato adecuado.
Vamos a suponer que nuestra tabla tiene el siguiente formato:
CAMPO1 S9(9) COMP-3.
CAMPO2 X(30).
CAMPO3 X(60).
CAMPO4 DATE
CAMPO5 S9(9) COMP-3.
Y que nuestro fichero tiene este otro:
Descripcin campo
CAMPO1 PIC S9(9) COMP-3.
CAMPO2 PIC X(2).
CAMPO3 PIC X(1).
CAMPO4 PIC X(10).
CAMPO5 PIC 9(8).

Posicin
1
6
8
9
19

En nuestra LOAD quedara:


//SYSIN DD *
LOAD
RESUME NO REPLACE
INTO TABLE TBPRU00
(CAMPO1 POSITION(1:5) DECIMAL
,CAMPO2 POSITION(6:7) CHAR (2)
,CAMPO3 POSITION(8) CHAR (1)
,CAMPO4 POSITION(9:18) DATE EXTERNAL(10)
,CAMPO5 POSITION(19:26) DECIMAL EXTERNAL
)
LOG NO NOCOPYPEND
Un JCL completo podra ser:
//*===============================================
//* CARGA DE LA TABLA TBPRU00 *
//*===============================================
//LOADTBL EXEC DSNUPROC,SYSTEM=DSN1,UID=LOADIND
//DSNUPROC.SORTWK01 DD DSN=&&SORTWK01,
// DISP=(NEW,DELETE,DELETE),
// SPACE=(4000,(1000,700),,,ROUND),
// UNIT=SYSDA
//DSNUPROC.SORTWK02 DD DSN=&&SORTWK02,
// DISP=(NEW,DELETE,DELETE),
// SPACE=(4000,(1000,700),,,ROUND),
// UNIT=SYSDA
//DSNUPROC.SORTWK03 DD DSN=&&SORTWK03,
// DISP=(NEW,DELETE,DELETE),
// SPACE=(4000,(1000,700),,,ROUND),
// UNIT=SYSDA
//DSNUPROC.SORTWK04 DD DSN=&&SORTWK04,
// DISP=(NEW,DELETE,DELETE),
// SPACE=(4000,(1000,700),,,ROUND),
// UNIT=SYSDA
//DSNUPROC.SYSUT1 DD DSN=&&SYSUT1,
// DISP=(NEW,DELETE,DELETE),
// SPACE=(4000,(5000,2000),,,ROUND),
// UNIT=SYSDA
//DSNUPROC.SYSREC DD DSN=XXXX.LOAD.TABLA,DISP=SHR
//DSNUPROC.SORTOUT DD DSN=&&SORT1,UNIT=SYSDA,
// SPACE=(4000,(5000,2000),,,ROUND)
//SYSIN DD *
LOAD
RESUME YES
INTO TABLE TBPRU00
LOG NO NOCOPYPEND
/*
Otros pasos tiles/opcionales cuando hacemos una LOAD:
Quitar estado COPY-pending
//*===================================================*
//* ANULAR COPY Y RECOVERY PENDIENTES *
//*==================================================*
//REPMES EXEC DSNUPROC,UID=TSPRU00
//SYSIN DD *
REPAIR SET TABLESPACE DBPRU.TSPRU00 NORCVRPEND
REPAIR SET TABLESPACE DBPRU.TSPRU00 NOCOPYPEND
/*
O tambin
//****************************************************
//* ABRE PARA R/W
//****************************************************
//ARRANGEN EXEC PGM=IKJEFT01,DYNAMNBR=20
//SYSTSPRT DD SYSOUT=*

//SYSPRINT DD SYSOUT=*
//SYSOUT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=4,DEST=JESTC3
//SYSTSIN DD *
DSN SYSTEM(DSN1)
-START DB(DBPRU) SPACE(TSPRU00) ACCESS(FORCE) <--tablespace -START DB(DBPRU)
SPACE(INPRU001) ACCESS(FORCE) <--ndice /*
Poner tablespace/ndices a UT (slo permite acceder a la tabla a las utilitys)
//************************************************
//* STO: STOP STA: START
//******************************************************
//DSNTIAD1 EXEC PGM=IKJEFT01,DYNAMNBR=20
//SYSTSPRT DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SYSOUT DD SYSOUT=*
//SYSTSIN DD *
DSN SYSTEM (DSN1)
-STO DATABASE(EXAMP001) SPACENAM(EXAMPTLF)
-STA DATABASE(EXAMP001) SPACENAM(EXAMPTLF) ACCESS(UT)
-STO DATABASE(EXAMP001) SPACENAM(IXAMPTLF)
-STA DATABASE(EXAMP001) SPACENAM(IXAMPTLF) ACCESS(UT)
END
/*
Poner tablespaces/ndices a RW
//*************************************************
//* REALIZA UN START DE LECTURA/ESCRITURA SOBRE LA TABLA
//*******************************************************
//ARRANGEN EXEC PGM=IKJEFT01,DYNAMNBR=20
//SYSTSPRT DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SYSOUT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=4,DEST=JESTC3
//SYSTSIN DD *
DSN SYSTEM (DSN1)
-STA DATABASE(EXAMP001) SPACENAM(EXAMPTLF) ACCESS(RW)
-STA DATABASE(EXAMP001) SPACENAM(IXAMPTLF) ACCESS(RW)
END
/*
Es recomendable hacer siempre una descarga previa, por lo que pueda pasar :P
UNLOAD
La utilidad "UNLOAD" sirve para realizar "descargas" de informacin de tablas.
La estructura general de un paso de UNLOAD sera algo as:
//*=================================================*
//* DESCARGA DE LA TABLA TBPRU00 *
//* Donde SYSPRINT contendr mensajes de error
//* SYSPUNCH las sentencias de LOAD para una posterior
//* recarga de datos
//* y SYSRECnn es el fichero donde guardaremos la informacin
//*=======================================================*
//UNLOAD EXEC PGM=IKJEFT01,DYNAMNBR=20
//SYSTSPRT DD SYSOUT=*
//SYSTSIN DD *
DSN SYSTEM(DSN1)
RUN PROGRAM(DSNTIAUL) PLAN(DSNTIAUL) LIB('LIBRERIA.DE.TU.INSTALACION')
//SYSPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSPUNCH DD SYSOUT=*
//SYSREC00 DD DSN=XXXX.UNLOAD.TBPRU00,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,

// SPACE=(CYL,(100,50),RLSE)
//SYSIN DD *
En la SYSIN escribiremos la query para seleccionar los datos que queremos descargar. Por
ejemplo:
SELECT *
FROM DSN1.TBPRU00 <-- El prefijo cambia segn la instalacin WHERE CAMPO1 = 112 ORDER BY
CAMPO2 ;
Esta SELECT se puede complicar tanto como queramos (SUBSELECTs, JOINs, etc).
Por supuesto, lo mejor en estos casos es buscar un JCL de carga o descarga que ya exista
en tu entorno de explotacin, y adaptarlo a tus necesidades ^^

//VREAISLV JOB (4M614049,E2700000,VREAISL),


//
'VIDA-UNIT LINK',NOTIFY=VREAISL,
//
CLASS=5,
//
MSGCLASS=X,
//
MSGLEVEL=(1,1)
//VSIJCL JCLLIB ORDER=(SYS3.VEXG.PROCLIB,SYS3.VEXG.INCLIB)
//JOBLIB DD DSN=SYS4.VEXG.LOADLIB,DISP=SHR
//
DD DSN=SYS6.VEXG.LOADLIB,DISP=SHR
//
DD DSN=SYS3.VEXG.LOADLIB,DISP=SHR
//*
//*********************************************************************
//DELINI
EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=*
//SYSOUT
DD SYSOUT=*
//SYSIN
DD *
DELETE P4K.KEVIH36.BPEVIH36.SALIDA.ISL
DELETE P4K.KEVIH35.BPEVIH35.SALIDA.ISL
DELETE P4K.KEVIH37.BPEVIH37.SALIDA.ISL
DELETE P4K.KEVIH39.BPEVIH39.SALIDA.ISL
DELETE P4K.KEVIH40.BPEVIH40.SALIDA.ISL
DELETE P4K.KEVIH36.BPEVIH36.SALIDA.SOR
IF MAXCC=8 THEN SET MAXCC=0
//*
//*******************************************************************/
//* PASO
COPIAR FICHEROS PARA VALIDARLOS
//*******************************************************************/
//PASO01
EXEC PGM=ICEMAN,COND=(4,LT)
//SYSPRINT DD SYSOUT=X
//SORTIN
DD DSN=P4K.KEVIH36.BPEVIH36.SALIDA,DISP=SHR
//SORTOUT DD DSN=P4K.KEVIH36.BPEVIH36.SALIDA.ISL,
//
DISP=(NEW,CATLG,DELETE),UNIT=TEST,
//
SPACE=(7000,(200,50),RLSE),
//
DCB=(RECFM=FB,LRECL=700,BLKSIZE=27300)
//SYSIN
DD *
SORT FIELDS=COPY
//*
//*******************************************************************/
//PASO05
EXEC PGM=ICEMAN,COND=(4,LT)
//SYSPRINT DD SYSOUT=X
//SORTIN
DD DSN=P4K.KEVIH36.BPEVIH36.SALIDA.ISL,DISP=SHR
//
DD DSN=P4K.KEVIH35.BPEVIH35.SALIDA.ISL,DISP=SHR
//
DD DSN=P4K.KEVIH37.BPEVIH37.SALIDA.ISL,DISP=SHR
//
DD DSN=P4K.KEVIH39.BPEVIH39.SALIDA.ISL,DISP=SHR
//
DD DSN=P4K.KEVIH40.BPEVIH40.SALIDA.ISL,DISP=SHR
//SORTOUT DD DSN=P4K.KEVIH36.BPEVIH36.SALIDA.SOR,
//
DISP=(NEW,CATLG,DELETE),UNIT=TEST,
//
SPACE=(7000,(200,50),RLSE),
//
DCB=(RECFM=FB,LRECL=700,BLKSIZE=27300)
//SYSIN
DD *
SORT FIELDS=(1,700,CH,A)
//*
**************************** Bottom of Data ****************************

You might also like