Top Banner
COBOL (COMMON BUSINESS ORIENTED LANGUAGE) Overview
113
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Cobol Day 5and 6

COBOL (COMMON BUSINESS ORIENTED

LANGUAGE)

Overview

Page 2: Cobol Day 5and 6

COBOL Fundamentals

DAY5

Page 3: Cobol Day 5and 6

EMP-NO ENAME EAGESALARY DEPTNO

1-------1011-----------------25-28------35--38

1000000345RAJESH KRISHNAMOORTHY03308900.50030

1000000346RANDY DEDOSAUZ 04407900.50030

1000000347MAHESH RAMARAJAN 05509900.50030

FILES

FIXED RECORD LENGTH FILE

SALESIDSNAME QTY1 LOC1 PRICE1 QTY2 LOC2 PRICE2 QTY3 LOC3 PRICE3 QTY4 LOC4 PRICE4

S101RAJESH 0030 IL 5000 0040 MI 4000 0050 NY 5000 60 CA 6000

S102RAMESH 0040 PA 4000 0060 WI 6000

S103RAGAVAN 0080 MI 8000

VARIABLE RECORD LENGTH FILE

Page 4: Cobol Day 5and 6

Field Field type and Field size.

Record Record-Size, Fixed length records and

Variable length records.

File Master files, Transaction files.

ACCOUNT File – Master File

Payment History- Transaction File

Introduction to File processing – Basic terms

Page 5: Cobol Day 5and 6

Files, Records, Fields.

We use the term FIELD to describe an item of information we are recording about an object

(e.g. StudentName, DateOfBirth, CourseCode).

We use the term RECORD to describe the collection of fields which record information about an object

(e.g. a StudentRecord is a collection of fields recording information about a student).

We use the term FILE to describe a collection of one or more occurrences (instances) of a record type (template).

DATA DIVISION.

FILE SECTION.FD STUDENT-FILE.

01 STUDENT-REC.

05 STUD-NAME PIC X(25). 05 DOB PIC X(10). 05 COURSE-CODE PIC X(15). 05 COURSE-NM PIC X(25). 05 COURSE-TYPE PIC X(5).

Page 6: Cobol Day 5and 6

Files, Records, Fields.

StudId StudName DateOfBirthStudId StudName DateOfBirth9723456 COUGHLAN 100919619724567 RYAN 311219769534118 COFFEY 230619649423458 O'BRIEN 031119799312876 SMITH 12121976

StudId StudName DateOfBirthStudId StudName DateOfBirth9723456 COUGHLAN 100919619724567 RYAN 311219769534118 COFFEY 230619649423458 O'BRIEN 031119799312876 SMITH 12121976

STUDENTSSTUDENTS

DATA DIVISION.FILE SECTION.FD StudentFile.01 StudentDetails. 02 StudId PIC 9(7). 02 StudName PIC X(8). 02 DateOfBirth PIC X(8).

DATA DIVISION.FILE SECTION.FD StudentFile.01 StudentDetails. 02 StudId PIC 9(7). 02 StudName PIC X(8). 02 DateOfBirth PIC X(8).

occurrencesoccurrences

Record Type Record Type (Template)(Template)(Structure)(Structure)

Page 7: Cobol Day 5and 6

How files are processed.

Rec1Rec2Rec3Rec4

OPEN

FILE

Read

Record

(One at

A Time )

Process

Record

Store inOutput File

Read a record

Based on Structure

Page 8: Cobol Day 5and 6

Record Buffers

IDENTIFICATION DIVISION.etc.ENVIRONMENT DIVISION.etc.DATA DIVISION.FILE SECTION.

ProgramProgram

RecordBufferRecordBuffer DeclarationDeclaration

STUDENTS

DISK Record Instance

Page 9: Cobol Day 5and 6

Creating a Student Record

01 StudentDetails.

Student Id. 02 StudentId PIC 9(7).

Student Name. 02 StudentName.

Surname 03 Surname PIC X(8).

Initials 03 Initials PIC XX.

Date of Birth 02 DateOfBirth.

Year of Birth 03 YOBirth PIC 99.

Month of Birth 03 MOBirth PIC 99.

Day of Birth 03 DOBirth PIC 99.

Course Code 02 CourseCode PIC X(4).

Value of grant 02 Grant PIC 9(4).

Gender 02 Gender PIC X.

01 StudentDetails.

Student Id. 02 StudentId PIC 9(7).

Student Name. 02 StudentName.

Surname 03 Surname PIC X(8).

Initials 03 Initials PIC XX.

Date of Birth 02 DateOfBirth.

Year of Birth 03 YOBirth PIC 99.

Month of Birth 03 MOBirth PIC 99.

Day of Birth 03 DOBirth PIC 99.

Course Code 02 CourseCode PIC X(4).

Value of grant 02 Grant PIC 9(4).

Gender 02 Gender PIC X.

Student Details.Student Details.

Page 10: Cobol Day 5and 6

Describing the record buffer in COBOL

The record type/template/buffer of every file used in a program must be described in the FILE SECTION by means of an FD (file description) entry.

The FD entry consists of the letters FD and an internal file name.

DATA DIVISION.FILE SECTION.FD StudentFile.01 StudentDetails. 02 StudentId PIC 9(7). 02 StudentName. 03 Surname PIC X(8). 03 Initials PIC XX. 02 DateOfBirth. 03 YOBirth PIC 9(2). 03 MOBirth PIC 9(2). 03 DOBirth PIC 9(2). 02 CourseCode PIC X(4). 02 Grant PIC 9(4). 02 Gender PIC X.

DATA DIVISION.FILE SECTION.FD StudentFile.01 StudentDetails. 02 StudentId PIC 9(7). 02 StudentName. 03 Surname PIC X(8). 03 Initials PIC XX. 02 DateOfBirth. 03 YOBirth PIC 9(2). 03 MOBirth PIC 9(2). 03 DOBirth PIC 9(2). 02 CourseCode PIC X(4). 02 Grant PIC 9(4). 02 Gender PIC X.

Page 11: Cobol Day 5and 6

STUDENTS

The Select and Assign Clause.

The internal file name used in the FD entry is connected to an external file (on disk or tape) by means of the Select and Assign clause.

ENVIRONMENT DIVISION.INPUT-OUTPUT SECTION.FILE-CONTROL. SELECT StudentFile ASSIGN TO DDNAME.

DATA DIVISION.FILE SECTION.FD StudentFile.01 StudentDetails. 02 StudentId PIC 9(7). 02 StudentName. 03 Surname PIC X(8). 03 Initials PIC XX. 02 DateOfBirth. 03 YOBirth PIC 9(2). 03 MOBirth PIC 9(2). 03 DOBirth PIC 9(2). 02 CourseCode PIC X(4). 02 Grant PIC 9(4). 02 Gender PIC X.

ENVIRONMENT DIVISION.INPUT-OUTPUT SECTION.FILE-CONTROL. SELECT StudentFile ASSIGN TO DDNAME.

DATA DIVISION.FILE SECTION.FD StudentFile.01 StudentDetails. 02 StudentId PIC 9(7). 02 StudentName. 03 Surname PIC X(8). 03 Initials PIC XX. 02 DateOfBirth. 03 YOBirth PIC 9(2). 03 MOBirth PIC 9(2). 03 DOBirth PIC 9(2). 02 CourseCode PIC X(4). 02 Grant PIC 9(4). 02 Gender PIC X.

Physical File

Page 12: Cobol Day 5and 6

Select and Assign Syntax.

LINE SEQUENTIAL means each record is followed by the carriage return and line feed characters.

RECORD SEQUENTIAL means that the file consists of a stream of bytes. Only the fact that we know the size of each record allows us to retrieve them.

SELECT FileName ASSIGN TO ExternalFileReference

[ORGANIZATION IS LINE

RECORD SEQUENTIAL].

Page 13: Cobol Day 5and 6

COBOL file handling Verbs

OPENBefore your program can access the data in an input file or place data in an output file you must make the file available to the program by OPENing it.

READThe READ copies a record occurrence/instance from the file and places it in the record buffer.

WRITE The WRITE copies the record it finds in the record buffer to the file.

CLOSEYou must ensure that (before terminating) your program closes all the files it has opened. Failure to do so may result in data not being written to the file or users being prevented from accessing the file.

Page 14: Cobol Day 5and 6

OPEN and CLOSE verb syntax

When you open a file you have to indicate to the system what how you want to use it (e.g. INPUT, OUTPUT, EXTEND) so that the system can manage the file correctly.

Opening a file does not transfer any data to the record buffer, it simply provides access.

OPEN InternalFileName ...

INPUT

OUTPUT

EXTEND

INPUT Moden

output Mode

Extend Mode

Only used for

READing Records

In A File

Only used for WRITing

Records In A File

Only used for APPENDing

Records at end of File

Page 15: Cobol Day 5and 6

READ verb syntax

READ FILE-NAME { INTO IDENTIFIER }

AT END { Impreative Statement }

The InternalFilename specified must be a file that has been OPENed for INPUT.

Using INTO Identifier clause causes the data to be read into the record buffer and then copied from there to the specified Identifier in one operation.

When this option is used there will be two copies of the data. It is the equivalent of a READ followed by a MOVE.

AT END clause it find out whether Read Operation has reached END OF File .

Page 16: Cobol Day 5and 6

WRITE Syntax.

WRITE record-name FROM IDENTIFIER .

To WRITE data to a file move the data to the record buffer (declared in the FD entry) and then WRITE the contents of record buffer to the file.

Page 17: Cobol Day 5and 6

FF rr aa nn kk CC uu rr tt aa ii nn99 33 33 44 55 66 77 LL MM 00 55 11

StudentID StudentName Course.

StudentRecord

FF rr aa nn kk CC uu rr tt aa ii nn99 33 33 44 55 66 77 LL MM 00 55 11

EOF

How the WRITE works

OPEN OUTPUT StudentFile. MOVE "9334567Frank Curtain LM051" TO StudentDetails. WRITE StudentDetails. MOVE "9383715Thomas Healy LM068" TO StudentDetails. WRITE StudentDetails. CLOSE StudentFile. STOP RUN.

OPEN OUTPUT StudentFile. MOVE "9334567Frank Curtain LM051" TO StudentDetails. WRITE StudentDetails. MOVE "9383715Thomas Healy LM068" TO StudentDetails. WRITE StudentDetails. CLOSE StudentFile. STOP RUN.

Students.Dat

Page 18: Cobol Day 5and 6

TT hh oo mm aa ss HH ee aa ll yy 99 33 88 33 77 11 55 LL MM 00 66 88

StudentID StudentName Course.

StudentRecord

F r a n k C u r t a i n9 3 3 4 5 6 7 L M 0 5 1TT hh oo mm aa ss HH ee aa ll yy99 33 88 33 77 11 55 LL MM 00 66 88

EOF

How the WRITE works

OPEN OUTPUT StudentFile. MOVE "9334567Frank Curtain LM051" TO StudentDetails. WRITE StudentDetails. MOVE "9383715Thomas Healy LM068" TO StudentDetails. WRITE StudentDetails. CLOSE StudentFile. STOP RUN.

OPEN OUTPUT StudentFile. MOVE "9334567Frank Curtain LM051" TO StudentDetails. WRITE StudentDetails. MOVE "9383715Thomas Healy LM068" TO StudentDetails. WRITE StudentDetails. CLOSE StudentFile. STOP RUN.

Students.Dat

Page 19: Cobol Day 5and 6

IDENTIFICATION DIVISION.PROGRAM-ID. SeqWrite.ENVIRONMENT DIVISION.INPUT-OUTPUT SECTION.FILE-CONTROL. SELECT StudentFile ASSIGN TO DDNAME

ORGANIZATION IS LINE SEQUENTIAL.

DATA DIVISION.FILE SECTION.FD StudentFile.01 StudentDetails. 02 StudentId PIC 9(7). 02 StudentName. 03 Surname PIC X(8). 03 Initials PIC XX. 02 CourseCode PIC X(4). 02 Gender PIC X.WORKING-STORAGE SECTION.01 CHOICE PIC X(1) VALUE ‘Y’.PROCEDURE DIVISION.001-MAIN-PARA. OPEN OUTPUT StudentFile. DISPLAY "Enter student details Enter the choice for Continue ". PERFORM GetStudentDetails. PERFORM UNTIL CHOICE = ‘N’ WRITE StudentDetails PERFORM GetStudentDetails END-PERFORM. CLOSE StudentFile. STOP RUN.

GetStudentDetails. DISPLAY ‘ENTER STUDENT-ID’. ACCEPT STUDENTID. DISPLAY ‘ENTER STUDENT NAME with Intial:’. ACCEPT STUDENTNAME. DISPLAY ‘ENTER COURSECODE’. ACCEPT COURSECODE. DISPLAY ‘ENTER GENDER:’. ACCEPT GENDER. DISPLAY ‘ENTER THE CHOICE OF CONTINUATION (Y/N):’. ACCEPT CHOICE.

IDENTIFICATION DIVISION.PROGRAM-ID. SeqWrite.ENVIRONMENT DIVISION.INPUT-OUTPUT SECTION.FILE-CONTROL. SELECT StudentFile ASSIGN TO DDNAME

ORGANIZATION IS LINE SEQUENTIAL.

DATA DIVISION.FILE SECTION.FD StudentFile.01 StudentDetails. 02 StudentId PIC 9(7). 02 StudentName. 03 Surname PIC X(8). 03 Initials PIC XX. 02 CourseCode PIC X(4). 02 Gender PIC X.WORKING-STORAGE SECTION.01 CHOICE PIC X(1) VALUE ‘Y’.PROCEDURE DIVISION.001-MAIN-PARA. OPEN OUTPUT StudentFile. DISPLAY "Enter student details Enter the choice for Continue ". PERFORM GetStudentDetails. PERFORM UNTIL CHOICE = ‘N’ WRITE StudentDetails PERFORM GetStudentDetails END-PERFORM. CLOSE StudentFile. STOP RUN.

GetStudentDetails. DISPLAY ‘ENTER STUDENT-ID’. ACCEPT STUDENTID. DISPLAY ‘ENTER STUDENT NAME with Intial:’. ACCEPT STUDENTNAME. DISPLAY ‘ENTER COURSECODE’. ACCEPT COURSECODE. DISPLAY ‘ENTER GENDER:’. ACCEPT GENDER. DISPLAY ‘ENTER THE CHOICE OF CONTINUATION (Y/N):’. ACCEPT CHOICE.

Assign File To DDNAME

(Physical Sequential File)

Declaring File Structure

Opened the File For Writing Recs

Getting values for

Records to be written

In File

Write a Record in a File

Page 20: Cobol Day 5and 6

Sequential write

Page 21: Cobol Day 5and 6

Write cont..

Page 22: Cobol Day 5and 6

IDENTIFICATION DIVISION.PROGRAM-ID. SeqRead.AUTHOR. Michael Coughlan.

ENVIRONMENT DIVISION.INPUT-OUTPUT SECTION.FILE-CONTROL. SELECT StudentFile ASSIGN TO dd-name

ORGANIZATION IS LINE SEQUENTIAL.

DATA DIVISION.FILE SECTION.FD StudentFile.01 StudentDetails. 02 StudentId PIC 9(7). 02 StudentName. 03 Surname PIC X(8). 03 Initials PIC XX. 02 CourseCode PIC X(4). 02 Gender PIC X.

PROCEDURE DIVISION.Begin. OPEN INPUT StudentFile READ StudentFile AT END MOVE HIGH-VALUES TO StudentDetails END-READ PERFORM UNTIL StudentDetails = HIGH-VALUES DISPLAY StudentId SPACE StudentName SPACE CourseCode READ StudentFile AT END MOVE HIGH-VALUES TO StudentDetails END-READ END-PERFORM CLOSE StudentFile STOP RUN.

IDENTIFICATION DIVISION.PROGRAM-ID. SeqRead.AUTHOR. Michael Coughlan.

ENVIRONMENT DIVISION.INPUT-OUTPUT SECTION.FILE-CONTROL. SELECT StudentFile ASSIGN TO dd-name

ORGANIZATION IS LINE SEQUENTIAL.

DATA DIVISION.FILE SECTION.FD StudentFile.01 StudentDetails. 02 StudentId PIC 9(7). 02 StudentName. 03 Surname PIC X(8). 03 Initials PIC XX. 02 CourseCode PIC X(4). 02 Gender PIC X.

PROCEDURE DIVISION.Begin. OPEN INPUT StudentFile READ StudentFile AT END MOVE HIGH-VALUES TO StudentDetails END-READ PERFORM UNTIL StudentDetails = HIGH-VALUES DISPLAY StudentId SPACE StudentName SPACE CourseCode READ StudentFile AT END MOVE HIGH-VALUES TO StudentDetails END-READ END-PERFORM CLOSE StudentFile STOP RUN.

Assign File To DDNAME

(Physical Sequential File)

Declaring File Structure

Opened the File For Reading Recs

Display values at SPOOL

Read a Record in a File till

END OF File is reached

Close a File which Is Opened

Page 23: Cobol Day 5and 6

PERFORM UNTIL StudentRecord = HIGH-VALUES READ StudentRecords AT END MOVE HIGH-VALUES TO StudentRecord END-READEND-PERFORM.

FF rr aa nn kk CC uu rr tt aa ii nn99 33 33 44 55 66 77 LL MM 00 55 11

StudentID StudentName Course.

StudentRecord

FF rr aa nn kk CC uu rr tt aa ii nn99 33 33 44 55 66 77 LL MM 00 55 11T h o m a s H e a l y9 3 8 3 7 1 5 L M 0 6 8T o n y O ‘ B r i a n9 3 4 7 2 9 2 L M 0 5 1B i l l y D o w n e s9 3 7 8 8 1 1 L M 0 2 1

EOF

How the READ works

Page 24: Cobol Day 5and 6

TT hh oo mm aa ss HH ee aa ll yy 99 33 88 33 77 11 55 LL MM 00 66 88

StudentID StudentName Course.

StudentRecord

F r a n k C u r t a i n9 3 3 4 5 6 7 L M 0 5 1TT hh oo mm aa ss HH ee aa ll yy99 33 88 33 77 11 55 LL MM 00 66 88T o n y O ‘ B r i a n9 3 4 7 2 9 2 L M 0 5 1B i l l y D o w n e s9 3 7 8 8 1 1 L M 0 2 1

EOF

PERFORM UNTIL StudentRecord = HIGH-VALUES READ StudentRecords AT END MOVE HIGH-VALUES TO StudentRecord END-READEND-PERFORM.

How the READ works

Page 25: Cobol Day 5and 6

TT oo nn yy OO ‘‘ BB rr ii aa nn 99 33 44 77 22 99 22 LL MM 00 55 11

StudentID StudentName Course.

StudentRecord

F r a n k C u r t a i n9 3 3 4 5 6 7 L M 0 5 1T h o m a s H e a l y9 3 8 3 7 1 5 L M 0 6 8TT oo nn yy OO ‘‘ BB rr ii aa nn99 33 44 77 22 99 22 LL MM 00 55 11B i l l y D o w n e s9 3 7 8 8 1 1 L M 0 2 1

EOF

PERFORM UNTIL StudentRecord = HIGH-VALUES READ StudentRecords AT END MOVE HIGH-VALUES TO StudentRecord END-READEND-PERFORM.

How the READ works

Page 26: Cobol Day 5and 6

BB ii ll ll yy DD oo ww nn ee ss 99 33 77 88 88 11 11 LL MM 00 22 11

StudentID StudentName Course.

StudentRecord

F r a n k C u r t a i n9 3 3 4 5 6 7 L M 0 5 1T h o m a s H e a l y9 3 8 3 7 1 5 L M 0 6 8T o n y O ‘ B r i a n9 3 4 7 2 9 2 L M 0 5 1BB ii ll ll yy DD oo ww nn ee ss99 33 77 88 88 11 11 LL MM 00 22 11

EOF

PERFORM UNTIL StudentRecord = HIGH-VALUES READ StudentRecords AT END MOVE HIGH-VALUES TO StudentRecord END-READEND-PERFORM.

How the READ works

Page 27: Cobol Day 5and 6

StudentID StudentName Course.

StudentRecord

F r a n k C u r t a i n9 3 3 4 5 6 7 L M 0 5 1T h o m a s H e a l y9 3 8 3 7 1 5 L M 0 6 8T o n y O ‘ B r i a n9 3 4 7 2 9 2 L M 0 5 1B i l l y D o w n e s9 3 7 8 8 1 1 L M 0 2 1

EOF

HIGH-VALUES

PERFORM UNTIL StudentRecord = HIGH-VALUES READ StudentRecords AT END MOVE HIGH-VALUES TO StudentRecord END-READEND-PERFORM.

How the READ works

Page 28: Cobol Day 5and 6

Sequential read.

Page 29: Cobol Day 5and 6

SEQUENTIAL READ Program cont..

Page 30: Cobol Day 5and 6

REWRITE is used to update an existing record in the file which has been read in the program

Syntax

REWRITE record-name [FROM data-name]

[END-REWRITE]

Note: The REWRITE statement can only be used if the file is opened in the I-O mode and its execution must be preceded by the successful READ statement on the file.

The REWRITE statement replaces last read record

REWRITE verb

Page 31: Cobol Day 5and 6

REWRITE

If a file is opened in the I-O mode and a record has been read successfully into the record buffer, then we

can use the REWRITE statement to update an existing record. Similar to the WRITE statement, the REWRITE

statement can be used with FROM option for writing data directly from a WORKING-STORAGE variable to the

required file.

Page 32: Cobol Day 5and 6

PROCEDURE DIVISION.Begin. OPEN INPUT-OUTPUT StudentFile READ StudentFile AT END MOVE HIGH-VALUES TO StudentDetails END-READ IF STUDENTID = S10012 MOVE ‘C108’ TO Coursecode REWRITE STUDENTDETAILS END-IF. PERFORM UNTIL StudentDetails = HIGH-VALUES DISPLAY StudentId SPACE StudentName SPACE CourseCode READ StudentFile AT END MOVE HIGH-VALUES TO StudentDetails END-READ IF STUDENTID = S10012 MOVE ‘C108’ TO Coursecode REWRITE STUDENTDETAILS END-IF END-PERFORM CLOSE StudentFile STOP RUN.

PROCEDURE DIVISION.Begin. OPEN INPUT-OUTPUT StudentFile READ StudentFile AT END MOVE HIGH-VALUES TO StudentDetails END-READ IF STUDENTID = S10012 MOVE ‘C108’ TO Coursecode REWRITE STUDENTDETAILS END-IF. PERFORM UNTIL StudentDetails = HIGH-VALUES DISPLAY StudentId SPACE StudentName SPACE CourseCode READ StudentFile AT END MOVE HIGH-VALUES TO StudentDetails END-READ IF STUDENTID = S10012 MOVE ‘C108’ TO Coursecode REWRITE STUDENTDETAILS END-IF END-PERFORM CLOSE StudentFile STOP RUN.

IDENTIFICATION DIVISION.PROGRAM-ID. SeqWR.ENVIRONMENT DIVISION.INPUT-OUTPUT SECTION.FILE-CONTROL. SELECT StudentFile ASSIGN TO DDNAME

ORGANIZATION IS LINE SEQUENTIAL.DATA DIVISION.FILE SECTION.FD StudentFile.01 StudentDetails. 02 StudentId PIC 9(7). 02 StudentName. 03 Surname PIC X(8). 03 Initials PIC XX. 02 CourseCode PIC X(4). 02 Gender PIC X.

IDENTIFICATION DIVISION.PROGRAM-ID. SeqWR.ENVIRONMENT DIVISION.INPUT-OUTPUT SECTION.FILE-CONTROL. SELECT StudentFile ASSIGN TO DDNAME

ORGANIZATION IS LINE SEQUENTIAL.DATA DIVISION.FILE SECTION.FD StudentFile.01 StudentDetails. 02 StudentId PIC 9(7). 02 StudentName. 03 Surname PIC X(8). 03 Initials PIC XX. 02 CourseCode PIC X(4). 02 Gender PIC X.

Page 33: Cobol Day 5and 6

Sequential Re-write

Page 34: Cobol Day 5and 6

SEQUENTIAL REWRITE Cont….

Page 35: Cobol Day 5and 6

The CALL Verb

Page 36: Cobol Day 5and 6

Objectives

Define CALL statement

CALL BY CONTENT/REFERENCE

Define LINKAGE SECTION

Cover LINKAGE SECTION & JCL Parameters

Page 37: Cobol Day 5and 6

CALL Syntax

CALL statement transfers control from one object program to another within run unit

Page 38: Cobol Day 5and 6

CALL Example

CALL “PROGA” USING….

ON EXCEPTION SET GOOD-CALL TO TRUE

NOT ON EXCEPTION SET BAD-CALL TO TRUE

END-CALL

Page 39: Cobol Day 5and 6

CALL BY CONTENT/REFERENCE

CALL BY REFERENCE technique allows the sub-program to access and process the data-items in the caller’s storage

CALL BY CONTENT technique allows the sub-program to access and process a copy of the data-items from the caller’s storage. The sub-program can not change the original data values in the caller’s storage

Page 40: Cobol Day 5and 6

LINKAGE SECTION

The LINKAGE SECTION of DATA DIVISION describes data made available from another program

Storage is not RESERVED

Value clause can not be specified for items other than level-88 items

EXTERNAL clause can not be specified in LINKAGE SECTION

Page 41: Cobol Day 5and 6

CALL with LINKAGE Example

DATA DIVISION.

WORKING-STORAGE SECTION.

01 PARM-LIST.

05 PART-NO PIC X(4).

05 USA-SALES PIC 9(5).

PROCEDURE DIVISION.

CALL “PROGA”

USING PARM-LIST.

PROGA

LINKAGE SECTION.

01 USING-LIST.

10 PART-ID PIC X(4).

10 SALES PIC 9(5).

PROCEDURE DIVISION

USING USING-LIST.

….

GOBACK.

Page 42: Cobol Day 5and 6

LINKAGE SECTION & JCL Parameters

User-parameters can be passed to the COBOL program being executed via the PARM parameter of the EXEC statement:

//STEPNAM EXEC PGM=XXXX,…,

// PARM=‘USER-PARAMETER’

Access to the user-parameter string requires LINKAGE SECTION definitions:

Page 43: Cobol Day 5and 6

CALL Parameters

CALL "ProgramName" USING P1, P2, P3, P4.CALL "ProgramName" USING P1, P2, P3, P4.

PROCEDURE DIVISION USING P2, P4, P1, P3.PROCEDURE DIVISION USING P2, P4, P1, P3.

Page 44: Cobol Day 5and 6

CALL Parameters

CALL "ProgramName" USING P1, P2, P3, P4.CALL "ProgramName" USING P1, P2, P3, P4.

PROCEDURE DIVISION USING P2, P4, P1, P3.PROCEDURE DIVISION USING P2, P4, P1, P3.

Positions Correspond - Not NamesPositions Correspond - Not Names

Page 45: Cobol Day 5and 6

Parameter Passing Mechanisms

CALL .. BYCALL .. BYREFERENCEREFERENCE

CALLedCALLedProgramProgram

Page 46: Cobol Day 5and 6

Parameter Passing Mechanisms

CALL .. BYCALL .. BYREFERENCEREFERENCE

CALLedCALLedProgramProgram

Address of Address of

Data ItemData Item

DirectionDirectionof Data Flowof Data Flow

Page 47: Cobol Day 5and 6

Parameter Passing Mechanisms

CALL .. BYCALL .. BYREFERENCEREFERENCE

CALLedCALLedProgramProgram

Address of Address of

Data ItemData Item

CALLCALL .. BY.. BYCONTENTCONTENT

CALLedCALLedProgramProgram

Copy ofCopy ofData ItemData Item

DirectionDirectionof Data Flowof Data Flow

Page 48: Cobol Day 5and 6

Parameter Passing Mechanisms

CALL .. BYCALL .. BYREFERENCEREFERENCE

CALLedCALLedProgramProgram

Address of Address of

Data ItemData Item

CALL .. BYCALL .. BYCONTENTCONTENT

CALLedCALLedProgramProgram

Copy ofCopy ofData ItemData Item

Address of Address of CopyCopy

Data Data ItemItem

DirectionDirectionof Data Flowof Data Flow

DirectionDirectionof Data Flowof Data Flow

Page 49: Cobol Day 5and 6

COBOL provides two ways of passing parameters to the called program

using the CALL statement. They are -

1) By REFERENCE

CALL SUBPGM1 USING WS-NUM1.

2) BY VALUE

CALL SUBPGM1 USINGBY CONTENT WS-NUM1

BY REFERENCE WS-NUM2

BY REFERENCE WS-NUM3.

Passing by reference and value

Page 50: Cobol Day 5and 6

CALL

Example

Page 51: Cobol Day 5and 6

SAMPLE CALL PROGRAM

Overview

Page 52: Cobol Day 5and 6

CALL TYPES (DYNAMIC call )

A dynamic call occurs when you use the CALL statement in a program compiled with the DYNAM compiler option.

In this case the CALLing and CALLed programs are each processed separately by the link-editor. A dynamically called program is loaded only when it is called at run time.

We generally use a dynamic call statement when you are concerned about ease of maintenance. Applications do not have to be re-link-edited when Dynamically called subprograms are changed.

Page 53: Cobol Day 5and 6

STATIC CALL EXAMPLE

Overview

Page 54: Cobol Day 5and 6

Static Call – Simple Program

Page 55: Cobol Day 5and 6

STATIC CALL: Main Program

Page 56: Cobol Day 5and 6

STATIC CALL: Compile JCL

Page 57: Cobol Day 5and 6

STATIC CALL: RUN JCL

Page 58: Cobol Day 5and 6

Dynamic call :Sub Program

Page 59: Cobol Day 5and 6

Dynamic Call : Main Program

Page 60: Cobol Day 5and 6

Dynamic Call Main Pgm Compile JCL

Page 61: Cobol Day 5and 6

DYNAMIC CALL MAIN PROGRAM RUN JCL

Page 62: Cobol Day 5and 6

Rules for coding CALLed programs

The called program needs to have a LINKAGE SECTION. This must appear after the WORKING-STORAGE SECTION in the DATA DIVISION. The variables in the linkage section have to independent items.

The PROCEDURE DIVISION needs to have a USING clause. This identifies the variables passed to the program and their ordering.

Entries in the LINKAGE SECTION can be in any order, but the entries in the USING clause must be in the order of their usage in the CALL statement of the CALLing program.

Instead of a STOP RUN statement, the called program must contain an EXIT PROGRAM statement to transfer control back to the calling program.

Page 63: Cobol Day 5and 6

SORTING AND MERGING DATA FILES

Overview

Page 64: Cobol Day 5and 6

COBOL –Sorting

Records in files must be sorted into specific sequences for Updating, Querying or Generating Reports.

Sorting is a common procedure used for arranging records into a specific order so that sequential processing can be performed.

Sorting is done on the basis of a key field

Page 65: Cobol Day 5and 6

COBOL – Sort syntax

SORT File-name-1

{ ON DESCENDING KEY Data-name-1. . . }

ASCENDING

USING File-name-2

GIVING File-name-3.

Multiple keys can be used for sorting.

Records may be sorted using either numeric or non-numeric key fields.

Page 66: Cobol Day 5and 6

COBOL – Sort e.g.

SORT SORT-FILE

ON ASCENDING KEY EMP-NO

ON ASCENDING KEY E-NAME

ON ASCENDING KEY E-LEVEL

USING INPUT-FILE

GIVING OUTPUT-FILE.

INPUT FILE : File of unsorted records.

SORT FILE : File for temporary storage during sorting.

OUTPUT FILE : File of sorted output records.

Page 67: Cobol Day 5and 6

COBOL –Sort – SD

Sort file is defined with an SD entry and has no label records clause.

E.g.:

SD SORT-FILE.

01 SORT-REC.

05 S-DEPTNO PIC 99.

05 S-DEPTNAME PIC X(10).

Page 68: Cobol Day 5and 6

COBOL – Sort – Input Procedure

Sort statement can also be used to perform some processing of incoming records just before they are sorted.

The input procedure processes data from the incoming file prior to sorting.

Page 69: Cobol Day 5and 6

The StudentFile is a sequential file sequenced upon ascending StudentId.

Write a program to display the number of students taking each course. How?

DATA DIVISION.DATA DIVISION.FILE SECTION.FILE SECTION.FD StudentFile.FD StudentFile.01 StudentDetails.01 StudentDetails. 02 StudentId PIC 9(7). 02 StudentId PIC 9(7). 02 StudentName. 02 StudentName. 03 Surname PIC X(8). 03 Surname PIC X(8). 03 Initials PIC XX. 03 Initials PIC XX. 02 DateOfBirth. 02 DateOfBirth. 03 YOBirth PIC 9(2). 03 YOBirth PIC 9(2). 03 MOBirth PIC 9(2). 03 MOBirth PIC 9(2). 03 DOBirth PIC 9(2). 03 DOBirth PIC 9(2). 02 CourseCode PIC X(4). 02 CourseCode PIC X(4). 02 Grant PIC 9(4). 02 Grant PIC 9(4). 02 Gender PIC X. 02 Gender PIC X.

Page 70: Cobol Day 5and 6

Simplified Sort Syntax.

The WorkFileName identifies a temporary work file that the SORT process uses for the sort. It is defined in the FILE SECTION using an SD entry.

Each SortKeyIdentifier identifies a field in the record of the work file upon which the file will be sequenced.

When more than one SortKeyIdentifier is specified, the keys decrease in significance from left to right (leftmost key is most significant, rightmost is least significant).

InFileName and OutFileName, are the names of the input and output files. These files are automatically opened by the SORT. When the SORT executes they must not be already open.

Page 71: Cobol Day 5and 6

FD SalesFile.01 SalesRec. 02 FILLER PIC X(10).

SD WorkFile.01 WorkRec. 02 WSalesmanNum PIC 9(5). 02 FILLER PIC X(5).

FD SortedSalesFile.01 SortedSalesRec. 02 SalesmanNum PIC 9(5). 02 ItemType PIC X. 02 QtySold PIC 9(4).

PROCEDURE DIVISION.Begin. SORT WorkFile ON ASCENDING KEY WSalesmanNum USING SalesFile GIVING SortedSalesFile.

OPEN INPUT SortedSalesFile.

Sort Example.

Page 72: Cobol Day 5and 6

ENVIRONMENT DIVISION.INPUT-OUTPUT SECTION.FILE-CONTROL. SELECT WorkFile ASSIGN TO DDNAME

SD WorkFile.01 WorkRecord. 02 ProvinceCode PIC 9. 02 SalesmanCode PIC 9(5). 02 FILLER PIC X(19).

PROCEDURE DIVISION.Begin. SORT WorkFile ON ASCENDING KEY ProvinceCode DESCENDING KEY SalesmanCode USING UnsortedSales GIVING SortedSales.

OPEN INPUT SortedSales.

ENVIRONMENT DIVISION.INPUT-OUTPUT SECTION.FILE-CONTROL. SELECT WorkFile ASSIGN TO DDNAME

SD WorkFile.01 WorkRecord. 02 ProvinceCode PIC 9. 02 SalesmanCode PIC 9(5). 02 FILLER PIC X(19).

PROCEDURE DIVISION.Begin. SORT WorkFile ON ASCENDING KEY ProvinceCode DESCENDING KEY SalesmanCode USING UnsortedSales GIVING SortedSales.

OPEN INPUT SortedSales.

Page 73: Cobol Day 5and 6

SORTSORTProcessProcess

WorkFileWorkFile

How the SORT works.

SORT WorkFile ON ASCENDING KEY WSalesmanNum USING SalesFile GIVING SortedSalesFile.

SalesFileSalesFile SortedSalesFileSortedSalesFile

UnsortedRecords

SortedRecords

Page 74: Cobol Day 5and 6

INPUT FILE

Page 75: Cobol Day 5and 6

OUTPUT File

Page 76: Cobol Day 5and 6

SIMPLE SORT PROGRAM

Page 77: Cobol Day 5and 6

SIMPLE SORT PROGRAM

Page 78: Cobol Day 5and 6

RUN JCL

Page 79: Cobol Day 5and 6

SIMPLE SORT OUTPUT

Page 80: Cobol Day 5and 6

COMPLEX SORT

Overview

Page 81: Cobol Day 5and 6

COBOL – SORTInput Procedure – Syntax

SORT file-name-1

{ ON ASCENDING KEY data-name-1. . . }. . .DESCENDING

{ INPUT PROCEDURE IS procedure-name-1

[ {THRU / THROUGH} ] procedure-name-2 ] }

{ USING file-name-2 . . . }

GIVING file-name-3.

Page 82: Cobol Day 5and 6

SORTSORTProcessProcess

How the INPUT PROCEDURE works.

SORT WorkFile ON ASCENDING KEY WSalesmanNum INPUT PROCEDURE IS SelectHatSales GIVING SortedSalesFile.

WorkFileWorkFile

SalesFileSalesFile SortedSalesFileSortedSalesFile

SortedRecords

SelectHatSalesSelectHatSales

UnsortedHat

Records

UnsortedRecords

Page 83: Cobol Day 5and 6

OPEN INPUT InFileNameREAD InFileName RECORD

PERFORM UNTIL Condition RELEASE SDWorkRec READ InFileName RECORDEND-PERFORM

CLOSE InFile

OPEN INPUT InFileNameREAD InFileName RECORD

PERFORM UNTIL Condition RELEASE SDWorkRec READ InFileName RECORDEND-PERFORM

CLOSE InFile

INPUT PROCEDURE Template

Page 84: Cobol Day 5and 6

FD SalesFile.01 SalesRec. 88 EndOfSales VALUE HIGH-VALUES. 02 FILLER PIC 9(5). 02 FILLER PIC X. 88 HatRecord VALUE "H". 02 FILLER PIC X(4).

SD WorkFile.01 WorkRec. 02 WSalesmanNum PIC 9(5). 02 FILLER PIC X(5).

FD SortedSalesFile.01 SortedSalesRec. 02 SalesmanNum PIC 9(5). 02 ItemType PIC X. 02 QtySold PIC 9(4).

PROCEDURE DIVISION.Begin. SORT WorkFile ON ASCENDING KEY WSalesmanNum INPUT PROCEDURE IS SelectHatSales GIVING SortedSalesFile.

FD SalesFile.01 SalesRec. 88 EndOfSales VALUE HIGH-VALUES. 02 FILLER PIC 9(5). 02 FILLER PIC X. 88 HatRecord VALUE "H". 02 FILLER PIC X(4).

SD WorkFile.01 WorkRec. 02 WSalesmanNum PIC 9(5). 02 FILLER PIC X(5).

FD SortedSalesFile.01 SortedSalesRec. 02 SalesmanNum PIC 9(5). 02 ItemType PIC X. 02 QtySold PIC 9(4).

PROCEDURE DIVISION.Begin. SORT WorkFile ON ASCENDING KEY WSalesmanNum INPUT PROCEDURE IS SelectHatSales GIVING SortedSalesFile.

INPUT PROCEDURE - ExampleINPUT PROCEDURE - Example

Page 85: Cobol Day 5and 6

COBOL – SORTInput Procedure – e.g.

SORT WorkFile ON ASCENDING KEY WSalesmanNum INPUT PROCEDURE IS SelectHatSales GIVING SortedSalesFile.

In the paragraph check-valid-para : Open input file. Check for validity Release the record Close the file

After that control is passed to SORT.

Page 86: Cobol Day 5and 6

COBOL – SORT Release

The input procedure opens the input file, processes input records and releases them into the sort file. It is similar to writing a record to the sort file.

The format of RELEASE is :

RELEASE Sort-record-name-1

[ FROM Identifier-1 ]

Page 87: Cobol Day 5and 6

COBOL – SORT Release (cont’d)

For releasing the processed record for Sorting :

Move input record to the sort record.

Release each sort record, which makes it available for sorting.

E.g.

RELEASE-PARA.

MOVE IN-REC TO SORT-REC.

RELEASE SORT-REC.

Page 88: Cobol Day 5and 6

COBOL – SORT Typical Program

MAIN-PARA.

SORT SORT-FILE ON ASCENDING KEY ORDER-NO

INPUT PROCEDURE TEST-PARA GIVING OUT-FILE.

STOP RUN.

TEST-PARA.

OPEN INPUT IN-FILE.

PERFORM PROCESS-PARA UNTIL NO-MORE-RECORDS = ‘NO’

CLOSE IN-FILE.

PROCESS-PARA.

READ IN-FILE AT END MOVE ‘NO’ TO NO-MORE-RECORDS.

IF QTY = ZEROS

CONTINUE

ELSE

MOVE IN-REC TO SORT-REC

RELEASE SORT-REC

END-IF.

Page 89: Cobol Day 5and 6

Complex Sort :INPUT FILE

Page 90: Cobol Day 5and 6

COMPLEX SORT:INPUT PROCEDURE

Page 91: Cobol Day 5and 6

COMPLEX SORT:INPUT PROCEDURE

Page 92: Cobol Day 5and 6

COMPLEX SORT: INPUT PROCEDURE

Page 93: Cobol Day 5and 6

COMPLEX SORT:RUN JCL

Page 94: Cobol Day 5and 6

COMPLEX SORT : OUTPUT FILE

Page 95: Cobol Day 5and 6

COMPLEX SORT : Input File

Page 96: Cobol Day 5and 6

COBOL SORT: OUTPUT PROCEDURE

Page 97: Cobol Day 5and 6

COBOL – SORT Output Procedure

In case of sort if the giving option is used, then the sorted records are automatically written onto the out-file after they are used.

Instead of giving option an output procedure can be used.

In an input procedure we RELEASE records to a sort file rather than WRITING them. In an output procedure we RETURN records from the sort file rather than READING them.

Page 98: Cobol Day 5and 6

COBOL – SORTOutput Procedure – Syntax

SORT file-1 { ON DESCENDING KEY data-name-1..} ASCENDING

{OUTPUT PROCEDURE IS proc-3 }

{GIVING file-2 . . . }

Page 99: Cobol Day 5and 6

COBOL – SORTReturn

Records are returned from the sort file using RETURN statement.

RETURN SORT-FILE-NAME-1

AT END <Imperative statement-1>

[ NOT AT END <imperative statement-2> ]

[END-RETURN].

Page 100: Cobol Day 5and 6

COBOL – SORTOutput Procedure – e.g.

MAIN-PARA.

SORT WORK-FILE

USING IN-FILE

OUTPUT PROCEDURE CHECK-PARA.

STOP RUN.

In the paragraph CHECK-PARA:

Open output file.

Return records from sort file.

Process records before writing to Out-file.

Close the file.

Page 101: Cobol Day 5and 6

COBOL – SORTOutput Procedure – e.g.

After the records have been sorted but before they are written into the output file:

Move sort record to the output area.

Write each sort record to the output file.

E.g.:

WRITE-PARA.

WRITE SORT-REC FROM WORK-REC.

Page 102: Cobol Day 5and 6

COBOL – SORTTypical Program

MAIN-PARA.

SORT SORT-FILE ON ASCENDING KEY TRANS-NO

USING INPUT-FILE

OUTPUT PROCEDURE CALC-PARA.

STOP RUN.

CALC-PARA.

OPEN OUTPUT OUTPUT-FILE.

PERFORM PROCESS-PARA UNTIL NO-MORE-RECORDS = ‘NO’

CLOSE OUTPUT-FILE.

PROCESS-PARA.

RETURN SORT-FILE AT END MOVE ‘NO’ TO NO-MORE-RECORDS.

IF AMT-OF-PURCHASE > 6000

MOVE 0.02 TO DISCOUNT

ELSE

MOVE 0.00 TO DISCOUNT

END-IF.WRITE OUT-REC FROM SORT-REC.

Page 103: Cobol Day 5and 6

COMPLEX SORT: Output Procedure

Page 104: Cobol Day 5and 6

Complex Sort : Output Procedure

Page 105: Cobol Day 5and 6

COMPLEX SORT : OUTPUT PROCEDURE

Page 106: Cobol Day 5and 6

COMPLEX SORT : RUN JCL

Page 107: Cobol Day 5and 6

COMPLEX SORT: OUTPUT DATA

Page 108: Cobol Day 5and 6

COBOL – Merge

COBOL has a MERGE statement that will combine two or more files into a single file.

The MERGE statement automatically handles the opening, closing, and any I-O (read/write functions) associated with the files.

The files to be merged must be in sequence by the key-field (ascending or descending).

Page 109: Cobol Day 5and 6

COBOL – Merge Merge syntax

MERGE file-1 { ON ASCENDING KEY data -1}

DESCENDING

USING file-2 { file-3 } . . .

OUTPUT PROCEDURE IS proc-1

GIVING {file-4}.

Page 110: Cobol Day 5and 6

COBOL – Merge Typical Program

FILE CONTROL.

SELECT IN-FILE1 ASSIGN TO E-FILE1.

SELECT IN-FILE2 ASSIGN TO E-FILE2.

SELECT M-FILE ASSIGN TO WORK.

SELECT OUT-FILE ASSIGN TO E-FILE.

DATA DIVISION.

FD IN-FILE1.

01 IN-REC1 PIC X(100).

FD IN-FILE2.

01 IN-REC2 PIC X(100).

SD M-FILE.

01 M-REC.

05 KEY-FIELD PIC X(5).

05 REST-OF REC PIC X(100).

FD OUT-FILE.

01 OUT-REC PIC X(100).

PROCEDURE DIVISION.

MAIN-PARA.

MERGE M-FILE ON ASCENDING KEY KEY-FIELD

USING IN-FILE1, IN-FILE2

GIVING OUT-FILE

STOP RUN

Page 111: Cobol Day 5and 6

MERGE EXAMPLE

Overview

Page 112: Cobol Day 5and 6

COBOL – Sort & Merge Summary

SORT is used for sorting records in either ascending or descending order

Processing of records can be carried out before or after sorting by using Input or Output procedures or using both

Merge is used to merge two or more files

Page 113: Cobol Day 5and 6

END OF SORT & MERGE