0% found this document useful (0 votes)
106 views14 pages

Dfsort Tutorial: Input File

DFSORT TUTORIAL ASSUMPTIONS Before discussing about SORT,let us assume following things input file has following data and structure Simple SORT jcl structue is as follows. If we give SUM FIELDS=NONE it will eliminate duplicates.

Uploaded by

dhirajsingh_avit
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
106 views14 pages

Dfsort Tutorial: Input File

DFSORT TUTORIAL ASSUMPTIONS Before discussing about SORT,let us assume following things input file has following data and structure Simple SORT jcl structue is as follows. If we give SUM FIELDS=NONE it will eliminate duplicates.

Uploaded by

dhirajsingh_avit
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 14

DFSORT TUTORIAL

ASSUMPTIONS

Before discussing about SORT,let us assume following things


Input file has following data and structure

INPUT FILE
MOHANK 23423423434534344 KIRAN
MOHANK 13342345345345345 RAJEEV
ARAMES 34535345325354324 SURESH
SURESH 98347385385933987 PULI
RAMESH 67575789769876785 MADHU
KRISHN 50830948530859340 OIIED
KRISHN 30495849572938495 MADHU
SURESH 98347385385933987 PULI

Simple SORT jcl structue is as follows - Sample sort jcl ----


.
.
//STEP10 EXEC PGM=SORT,REGION=1024K,PARM=parameters
//SYSOUT DD SYSOUT=* Output messages from SORT
//SORTIN DD DSN=...,DISP=SHR Input if SORT request
//SORTOUT DD DSN=... Output for SORT request
//SORTOFxx DD DSN=... OUTFILE output data sets
//SORTXSUM DD DSN=... Output eliminated by the SUM stm
//SORTWKnn DD UNIT=SYSDA, Work files if SORT request
//SYSIN DD * Control statement input data set
sort control statements
/*
.
.

FOLLOWING ARE THE SORTCARDS FOR DIFFERENT TYPES OF SORTS

TASK 1. SORT A GIVEN FILE - SAMPLE JCL

//SYSIN DD *
SORT FIELDS=(1,3,CH,A,9,3,CH,A)
/*
OUTPUT FILE
ARAMES 34535345325354324 SURESH
KRISHN 30495849572938495 MADHU
KRISHN 50830948530859340 OIIED
MOHANK 13342345345345345 RAJEEV
MOHANK 23423423434534344 KIRAN
RAMESH 67575789769876785 MADHU
SURESH 98347385385933987 PULI
SURESH 98347385385933987 PULI
EXPLANATION

Above syntax of SORT sorted the recrods, depends


on keys we have provided
(we have provided two keys in FIELDS parameter)
FIRST KEY
1,3,CH,A - first key started at col 1 , its length is 3

SECOND KEY
9,3,CH,A - second key started at col 9, its length is 3

In the above example,


CH- means character we may use BI for binary
A - Ascending order

TASK 2. ELEMINATE DUPLICATES

//SYSIN DD *
SORT FIELDS=(1,3,CH,A)
SUM FIELDS=NONE
/*
//** copyright www.mainframegurukul.com

OUTFILE
ARAMES 34535345325354324 SURESH
KRISHN 50830948530859340 OIIED
MOHANK 23423423434534344 KIRAN
RAMESH 67575789769876785 MADHU
SURESH 98347385385933987 PULI

EXPLANATION

if we give SUM FIELDS=NONE it will eliminate duplicates

TASK 3. SPLIT FILE INTO TWO OR THREE FILES DEPENDS


ON CONDITIONS

.
.
.
//SORTOF01 DD DSN=dataset1,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,
// SPACE=(CYL,(1,4),RLSE),
// DCB=(RECFM=FB,LRECL=80,BLKSIZE=0)
//SORTOF02 DD DSN=dataset2,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,
// SPACE=(CYL,(1,4),RLSE),
// DCB=(RECFM=FB,LRECL=80,BLKSIZE=0)
//SORTOF03 DD DSN=dataset3,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,
// SPACE=(CYL,(1,4),RLSE),
// DCB=(RECFM=FB,LRECL=80,BLKSIZE=0)
.
.
.
//SYSIN DD *
SORT FIELDS=COPY
OUTFIL FILES=01,INCLUDE=(1,6,CH,EQ,C'MOHANK')
OUTFIL FILES=02,INCLUDE=(1,6,CH,EQ,C'SURESH')
OUTFIL FILES=03,INCLUDE=(1,6,CH,EQ,C'KRISHN')
/*

SORTOF01
MOHANK 23423423434534344 KIRAN
MOHANK 13342345345345345 RAJEEV

SORTOF02
SURESH 98347385385933987 PULI
SURESH 98347385385933987 PULI

SORTOF03
KRISHN 50830948530859340 OIIED
KRISHN 30495849572938495 MADHU

EXPLANATION

1. SORT FIELDS=COPY - indicate , it for copy of records, not for sort

2. OUTFIL FILES=01,INCLUDE=(1,6,CH,EQ,C'MOHANK')
OUTFIL FILES=02,INCLUDE=(1,6,CH,EQ,C'SURESH')
OUTFIL FILES=03,INCLUDE=(1,6,CH,EQ,C'KRISHN')

- SYNCSORT will take data from 1st positioon to 6th position of input
file and it will compare that data with MOHANK or SURESH or KRISHN

- If data equals to MOHANK then that recorrd will copies to dataset defined
in SORTOF01 step. ( because we defined FILES=01 in second condition )

- If data equals to SURESH then that recorrd will pass to dataset defined
in SORTOF02 step. ( because we defined FILES=02 in second condition )

- If data equals to KRISHN then that recorrd will copied to dataset difned
in SORTOF03 step. ( because we defined FILES=03 in third condition )

TASK 4. COPY ELIMINATED DUPLICATES INTO ANOTHER


FILE - SAMPLE JCL
.
.
//SORTXSUM DD DSN=datasetname,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,
// SPACE=(CYL,(1,4),RLSE),
// DCB=(RECFM=FB,LRECL=80,BLKSIZE=800)
.
.
//SYSIN DD *
SORT FIELDS=(1,3,CH,A)
SUM FIELDS=NONE,XSUM
/*
//*copyright www.mainframegurukul.com &
www.geocitie.comhttp://www.mainframetutorials.com

SORTOUT
ARAMES 34535345325354324 SURESH
KRISHN 50830948530859340 OIIED
MOHANK 23423423434534344 KIRAN
RAMESH 67575789769876785 MADHU
SURESH 98347385385933987 PULI

SORTXSUM
KRISHN 30495849572938495 MADHU
MOHANK 13342345345345345 RAJEEV
SURESH 98347385385933987 PULI

EXPLANATION

1. SORT FIELDS=(1,3,CH,A)
Input file will be sorted depending up on the key specified above
1,3,CH,A - key starting position is 1 and length 3, comparing type
character, sorting is don in ascending order

2. SUM FIELDS=NONE,XSUM

SUM FIELDS=NONE means it will eliminate duplicates


XSUM options will copy all records eliminated in sort
process will copy to another data set defined in
SORTXSUM step

TASK 5. COPY RECORDS DEPENDING UPON CONDITION

//SYSIN DD *
SORT FIELDS=COPY
INCLUDE COND=(1,6,CH,EQ,C'SURESH')
/*
//* copyright www.mainframegurukul.com

OUTPUTFILE
SURESH 98347385385933987 PULI
SURESH 98347385385933987 PULI

EXPLANATION

above card is to copy records from input file which


contains SURESH at 1st position

TASK 6. FORMATING A FILE (USING INREC)

//SYSIN DD *
SORT FIELDS=COPY
INREC FIELDS=(7:2,5,20:10,3)
/*
//* copyright www.mainframegurukul.com

OUTPUT FILE
OHANK 342a
OHANK 334
RAMES 453
URESH 834
AMESH 757
RISHN 083
RISHN 049
URESH 834

EXPLANATION

1. SORT FIELDS=COPY

It is for copy records to output file

2. INREC FIELDS=(7:2,5,20:10,3) (for formatting)

Here we have two formattings,

1. 7:2,5 - data at 2nd position of input file with length 5


copied to 7th position of output file

2. 20:10,3 - data at 10th position of input file with length 3


copied to 20th position of output file
In above example, we can use OUTREC instread of INREC,

INREC adds, deletes, or reformats fields before the


records are sorted or merged. so that performance will
be improved

OUTREC adds, deletes, or reformats fields after the


records are sorted or merged.

Other parameters we can pass with sort card

SKIPREC=n
causes sort to skip over 'n' records in the input file before
starting a sorting or copying operation.

STOPAFT=n
causes sort to stop after 'n' records in the input file have
been sorted or copied.
COBOL DB2 COMPILE JCL

    //DB2COMP (XXX,XXX),'COMPILE JCL',


// CLASS=A,MSGCLASS=A,NOTIFY=&SYSUID
//*********************************************************
***********
//* COMPILATION, LINK EDIT AND THE BIND STEP FOR A COBOL
DB2 PROGRAM *
//* WILL BE DONE BY SUBMITTING THIS JOB.
*
//* THE DB2 REGIONS AND CORRESPONDING PARAMETERS NEEDS TO
BE CHANGED *
//* WITH RESPECT TO THE PROGRAM
*
//*********************************************************
***********
//* PRECOMPILE DB2 PROGRAM
*
//*-------------- LOCATION OF DBRM LIBRARY
-------------------------*
//*********************************************************
***********
//PC EXEC PGM=DSNHPC,
// PARM='HOST(COB2),APOST,SOURCE',
// REGION=4096K
//DBRMLIB DD DISP=SHR,
// DSN=DEV.SURESH.DBRM(DB2PROG)
<------------------------ (1)
//STEPLIB DD DISP=SHR,
// DSN=SYSX.DB2.XXX.XXXXX
//*********************************************************
***********
//*SYSIN -----------INPUT COBOL DB2 PROGRAM
LOCATION-----------------*
//*********************************************************
***********
//SYSIN DD DISP=SHR,
// DSN=DEV.SURESH.SRC(DB2PROG)
<---------------------- (2)
//SYSCIN DD DISP=(MOD,PASS),
// DSN=&&TEMP,
// SPACE=(800,(500,500)),
// UNIT=SYSDA
//*********************************************************
***********
//* DCLGEN MEMBER LOCATION
*
//*SYSLIB-----------------INPUT SOURCE LIBRARY FOR
SQL---------------*
//*********************************************************
***********
//SYSLIB DD DISP=SHR,
// DSN=DEV.SURESH.DCL
<---------------------- (3)
// DD DISP=SHR,
// DSN=DEV.SURESH.CPY
//SYSPRINT DD SYSOUT=T
//SYSTERM DD SYSOUT=T
//SYSUDUMP DD SYSOUT=*
//SYSUT1 DD SPACE=(800,(500,500),,,ROUND),
// UNIT=SYSDA
//SYSUT2 DD SPACE=(800,(500,500),,,ROUND),
// UNIT=SYSDA
//*
//*********************************************************
***********
//* COMPILATION
*
//*********************************************************
***********
//*
//COB EXEC PGM=IGYCRCTL,
// COND=(4,LT,PC),
//
PARM=('SIZE(4000K),BUFSIZE(32760),LIST,LIB,MAP,OBJECT',
// 'DATA(31),XREF,RENT'),
// REGION=4M
//STEPLIB DD DISP=SHR,
// DSN=XXXX.XXXXXX
//SYSIN DD DISP=(OLD,DELETE),
// DSN=&&TEMP
//SYSLIN DD DISP=(MOD,PASS),
// DSN=&&LOADTMP,
// SPACE=(800,(500,500)),
// UNIT=SYSDA
//*********************************************************
***********
//*--------------SOURCE LIBRARIES FOR COBOL DB2 CODE (COPY
LIBRARIES)*
//*********************************************************
***********
//SYSLIB DD DISP=SHR,
// DSN=DEV.SURESH.DCL
<----------------- (4)
// DD DSN=DEV.SURESH.CPY,DISP=SHR
//SYSPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSUT1 DD SPACE=(800,(500,500),,,ROUND),
// UNIT=SYSDA
//SYSUT2 DD SPACE=(800,(500,500),,,ROUND),
// UNIT=SYSDA
//SYSUT3 DD SPACE=(800,(500,500),,,ROUND),
// UNIT=SYSDA
//SYSUT4 DD SPACE=(800,(500,500),,,ROUND),
// UNIT=SYSDA
//SYSUT5 DD SPACE=(800,(500,500),,,ROUND),
// UNIT=SYSDA
//SYSUT6 DD SPACE=(800,(500,500),,,ROUND),
// UNIT=SYSDA
//SYSUT7 DD SPACE=(800,(500,500),,,ROUND),
// UNIT=SYSDA
//*
//*
//*********************************************************
***********
//* LINK EDIT
*
//*********************************************************
***********
//*
//LKED EXEC PGM=IEWL,
// COND=((4,LT,COB),(4,LT,PC)),
// PARM='XREF'
//SYSLIB DD DISP=SHR,
// DSN=SXXX.SXXXXXXX
// DD DISP=SHR,
// DSN=XXXX.DB2.XXX.XXXXLOAD
// DD DISP=SHR,
// DSN=SYS1.VSCLLIB
//SYSLIN DD DISP=(OLD,DELETE),
// DSN=&&LOADTMP
//* DD DDNAME=SYSIN
//*********************************************************
***********
//*----------------LOCATION OF LOAD
LIBRARY--------------------------*

//SYSLMOD DD DISP=SHR,
// DSN=DEV.SURESH.LOADLIB(DB2PROG)
<------------ (5)
//SYSPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSUT1 DD SPACE=(1024,(50,50)),
// UNIT=SYSDA
//*
//*********************************************************
***********
//* BIND - BIND THE DB2 PACKAGE
*
//*********************************************************
***********
//BIND EXEC PGM=IKJEFT01,
// COND=(4,LT),
// REGION=4096K
//STEPLIB DD DISP=SHR,
// DSN=XXX4.DB2.XXXX.XXXXLOAD
//DBRMLIB DD DISP=SHR,
// DSN=DEV.SURESH.DBRM(DB2PROG)
<--------------- (6)
//SYSPRINT DD SYSOUT=*
//SYSTSPRT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSTSIN DD *
DSN SYSTEM (DEVDB )
BIND MEMBER (DB2PROG) -
PACKAGE (PACKG11) -
LIBRARY ('DEV.SURESH.DBRM') -
<---------------- (7)
ACTION (REP) -
ISOLATION (CS) -
VALIDATE (BIND)-
RELEASE (COMMIT) -
OWNER (SURESH) -
QUALIFIER (DEVQUALI)
END
/*
**************************** Bottom of Data
****************************

(1) - When we precompiled, precompiler will create the


DBRM, it will
be placed in the pds specified here.

(2) - Location of COBOL-DB2 program

(3) - Needs to speficiy DCLGEN member locations

(4) - Needs to specify DCLGEN and COPYBOOK locations here

(5) - Load module location, load module will be created


here. this
location needs to be given in run jcl.

(5) & (6) - specify the location of DBRM, ( same location


used in step1 ).

Quick Start on IKJEFT01 utility

    Quick Start on IKJEFT01 Utility


1) Unload data using DB2 Utility IKJEFT01
2) DB2 BIND using IKJEFT01 Utility
3) Executing DB2 program using IKJEFT01 Utitlity.

1) IKJEFT01 can be used to extract data from db2 tables.


as shown below.

JCL to extract data from db2 tables using IKJEFT01 Utility.

//STEP002 EXEC PGM=IKJEFT01,


// DYNAMNBR=20,COND=(0,NE)
//STEPLIB DD DISP=SHR,
// DSN=SYS.DB2.XXX.RUNXX.LOAD
// DD DISP=SHR,
// DSN=SYS.DB2.XXX.SDSNEXIT
// DD DISP=SHR,
// DSN=SYS.DB2.XXX.SDSNLOAD
//SYSIN DD *
SELECT *
FROM EMP_TABLE
WITH UR;
//*
//SYSTSIN DD *
DSN SYSTEM(XXX) RETRY(20)
RUN PROGRAM(DSNTIAUL) PLAN(DSNTIAUL) PARMS('SQL') -
LIB ('SYS.DB2.XXX.RUNXX.LOAD')
END
/*
//***UNLOAD FILE
//SYSREC00 DD DISP=(NEW,CATLG,DELETE),
// DSN=DEV.UNLOAD.FILE,
// UNIT=SYSDA,SPACE=(CYL,(50,50),RLSE)
//*
//***TABLE STRUCTURE
//SYSPUNCH DD DUMMY
//*
//SYSTSPRT DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*

2) Using IKJEFT01 utility for DB2 BIND Sample JCL to DB2 BIND

//* DB2 BIND JCL


//*
//BIND EXEC PGM=IKJEFT01,
// COND=(4,LT),
// REGION=4096K
//STEPLIB DD DISP=SHR,
// DSN=XXX4.DB2.XXXX.XXXXLOAD
//DBRMLIB DD DISP=SHR,
// DSN=DEV.SURESH.DBRM(DB2PROG) <---------------
(1)
//SYSPRINT DD SYSOUT=*
//SYSTSPRT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSTSIN DD *
DSN SYSTEM (DEVDB )
BIND MEMBER (DB2PROG) -
PACKAGE (PACKG11) -
LIBRARY ('DEV.SURESH.DBRM') - <----------------
(2)
ACTION (REP) -
ISOLATION (CS) -
VALIDATE (BIND)-
RELEASE (COMMIT) -
OWNER (SURESH) -
QUALIFIER (DEVQUALI)
END
/*

(1) & (2) - specify the location of DBRM.


It is a part of cobol db2 compile jcl.. Refer COBOL DB2 program
compile JCL

3) Using IKJEFT01 utility for executing cobol db2 program.


Sample JCL to execute IKJEFT01 utility to run COBOL DB2
program.
//** COBOL DB2 RUN JCL
//STEP01 EXEC PGM=IKJEFT01,
// DYNAMNBR=20
//*
//STEPLIB DD DISP=SHR,
// DSN=SYSL.DB2.DEV.XXXXLOAD
// DD DISP=SHR,
// DSN=SYSL.DB2.DEV.XXXXYYYY
//*
//SYSTSPRT DD SYSOUT=*
//SYSTSIN DD *
DSN SYSTEM(DEVDB)
RUN PROGRAM(DB2PROG) -
PLAN(PLAN11111) -
LIBRARY('DEV.SURESH.LOADLIB')
END
/*
//SYSOUT DD SYSOUT=*
//SYSIN DD *
//*
//* COBOL DB2 RUN JCL ENDS

DB2
COBOL DB2 PROGRAMMING - 1

Writing a COBOL DB2 Program.

Let us assume we are writing a cobol program to


read EMPLOYEE
table and get the details of employee with the name
XXXXXXX.

Let us go in step wise..

create the following table in db2 or assume it is


there in db2 database.

EMPLYEE
EMPID EMPNAME DEPARTMENT SALARY
DESIGNATION
1000 XXXXXXX XX 10000 SE
1001 YYYYYYY YY 9000 SE
1002 ZZZZZZZ ZZ 20000 MA

STEP 1. We need to declare the table structure in


the
WORKING-STORAGE SECTION or LINKAGE
SECTION.

EXEC SQL
DECLARE DSNXXX.EMPLOYEE
( EMPID CHAR(10)
NOT NULL,
EMPNAME CHAR(30)
NOT NULL,
DEPARTMENT CHAR(2)
NOT NULL,
SALARY
DECIMAL(10,2) NOT NULL,
DESIGNATION CHAR(4)
NOT NULL )
END-EXEC.

we can use DB2 tool called DCLGEN to


generate this declaration
for us and can include that copy book
here.
if you create a copybook using DCLGEN. Use
following sntax to include

EXEC SQL
INCLUDE < copybookname >
END-EXEC.

STEP 2. Declare host variables in WORKING-STORAGE


SECTION.

HOST VARIABLES - A host variable is a


data item declared in cobol to use
it in embedded SQL.

For EMPLOYEE table, host variable


declaration is look like as follows...

01 EMPOYEE-RECORD.
05 HV-EMPID PIC X(10).
05 HV-EMPNAME PIC X(30).
05 HV-DEPARTMENT PIC X(2).
05 HV-SALARY PIC
S9(8)V99 COMP-3.
05 HV-DESIGNATION PIC
CHAR(4).

If you use db2 tool DCLGEN, it will


automatically creates this structure also
along with table declaration specified in
step1.

STEP 3. Include SQLCA as follows in WORKING-


STORAGE SECTION.

EXEC SQL
INCLUDE SQLCA
END-EXEC.

What is SQLCA?

SQLCA - SQL communication area.


When a SQL statement executes,
DB2 places a value in SQLCODE AND
SQLSTATE host variables or any
other fields of SQLCA. based on
the values in these variables we
can know whether sql ran
sucessfully or not.

SQLCA contains a declartion of


fields like SQLCODE,SQLSTATE and
SQLERRD etc....

STEP 4. Add a sql statement in procdure division


to get the details of employee
with the name XXXXXXX.

DISPLAY ' PROGRAM STARTED .... '

.........

EXEC SQL
SELECT SALARY
INTO :HV-SALARY
FROM EMPLOYEE
WHERE EMPNAME = 'XXXXXXX'
END-EXEC.

IF SQLCODE = 0

DISPLAY ' SQL EXECUTED SUCESSFULLY '


DISPLAY ' EMPLOYEE SALARY IS '
HV-SALARY

ELSE

DISPLAY ' SQL FAILED '


DIAPLY ' SQL CODE ' SQLCODE

END-IF.

....
....

DISPLAY ' PROGRAM ENDED'.

Here SQLCODE = 0 means, sql ran sucessfully without


any issues. Hence
we are displaying the HV-SALARY into the spool.

If SQLCODE NOT = 0 , there is issue in executing


the sql statement.

Now we have compeleted coding a cobol-db2 program.


our next step is to
compile the program.

SAMPLE COMPILE JCL

Click here to see the compile JCL. Use this compile


jcl to compile the program.

SAMPLE RUN JCL


Click here to see the sample run jcl. Use this run
jcl to run the program.

You might also like

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy