Documente Academic
Documente Profesional
Documente Cultură
Version: COBOL/HANDOUT/0605/2.0
Date: 14-06-05
TABLE OF CONTENTS
Introduction .................................................................................................................................. 8
About this Module ........................................................................................................................ 8
Target Audience........................................................................................................................... 8
Module Objectives ....................................................................................................................... 8
Pre-requisites ............................................................................................................................... 8
Chapter 1: Introduction to COBOL............................................................................................... 9
Learning Objectives ..................................................................................................................... 9
History of COBOL ........................................................................................................................ 9
About COBOL .............................................................................................................................. 9
Chapter 2: COBOL Program Layout .......................................................................................... 10
Learning Objectives ................................................................................................................... 10
Program composition ................................................................................................................. 10
The COBOL divisions ................................................................................................................ 11
Program structure ...................................................................................................................... 12
Clauses and Statements............................................................................................................ 13
Rules Of User-Defines Words.................................................................................................... 13
Examples of Reserved Words ................................................................................................... 13
Literals........................................................................................................................................ 13
Rules for Numeric Literals.......................................................................................................... 14
Rules for Non-Numeric Literals.................................................................................................. 14
Rules for Floating Point Literals ................................................................................................. 14
Sample COBOL Program Layout .............................................................................................. 15
Test your Understanding............................................................................................................ 15
Chapter 3: File Basics ................................................................................................................. 16
Learning Objectives ................................................................................................................... 16
File Basics.................................................................................................................................. 16
File Types................................................................................................................................... 16
Records...................................................................................................................................... 16
Sequential Files ......................................................................................................................... 16
VSAM Indexed Files .................................................................................................................. 16
VSAM Relative Files .................................................................................................................. 17
Chapter 4: Identification and Environment divisions .............................................................. 18
Learning Objectives ................................................................................................................... 18
Identification division.................................................................................................................. 18
Cancel ........................................................................................................................................ 99
Entry........................................................................................................................................... 99
Entry - Watch out ....................................................................................................................... 99
Exit ............................................................................................................................................. 99
Stop.......................................................................................................................................... 100
GOBACK.................................................................................................................................. 100
END PROGRAM ...................................................................................................................... 100
Chapter 9: Compiler Directive - COPY..................................................................................... 101
Learning Objectives ................................................................................................................. 101
COPY statement ...................................................................................................................... 101
Compiler Directive COPY - Rules ............................................................................................ 102
Chapter 10: Compiler Options .................................................................................................. 103
Learning Objectives ................................................................................................................. 103
Compiler options ...................................................................................................................... 103
Chapter 11: File Operations ...................................................................................................... 113
Learning Objectives ................................................................................................................. 113
File operations ......................................................................................................................... 113
OPEN ....................................................................................................................................... 113
CLOSE ..................................................................................................................................... 113
READ ....................................................................................................................................... 114
Multiple Record Processing ..................................................................................................... 115
START ..................................................................................................................................... 117
WRITE...................................................................................................................................... 119
REWRITE................................................................................................................................. 121
SORT ....................................................................................................................................... 123
RELEASE................................................................................................................................. 126
RETURN .................................................................................................................................. 126
MERGE .................................................................................................................................... 127
INPUT/OUTPUT ERROR HANDLING TECHNIQUES ............................................................ 128
Test your Understanding.......................................................................................................... 130
Appendix 1.................................................................................................................................. 131
FILE STATUS CODES AND MEANING .................................................................................. 131
REFERENCES ............................................................................................................................ 133
WEBSITES............................................................................................................................... 133
BOOKS .................................................................................................................................... 133
STUDENT NOTES: ..................................................................................................................... 134
Introduction
Target Audience
The module is specifically targeted at Entry Level Trainee Programmers
Module Objectives
The main objectives of the module are:
Teach the basics of Cobol language
To explore the structure of COBOL programming
To generate knowledge needed to develop mainframe applications using COBOL
Pre-requisites
To learn the module well, the student needs to have a prior knowledge of the following:
TSO/ISPF
MVS
JCL
Learning Objectives
The main objectives of the chapter are:
To learn about the History of COBOL
To know the basic features of COBOL
History of COBOL
The following points highlight some salient facts about COBOL:
Conceived in 1959
Preliminary Version introduced in December 1959
First Standard COBOL introduced in 1961
ANSI Approved Versions introduced in 1968 and 1974
Latest COBOL Version introduced in 1985
Current version being used is COBOL II / COBOL 85
About COBOL
There was a growing need in the early days to have a high level language that will be best
suited for Business Applications. Hence In 1959, a new language COBOL – Common
Business Oriented Language emerged.
Cobol is a High Level Structured Language. This is an English like language, which is used to
develop major business applications. Why most of business applications are developed using
Mainframe COBOL?
Learning Objectives
The main objectives of the chapter are:
To understand the COBOL Program layout.
To understand the structure of COBOL program.
Program composition
P R O G R A M
C o n ta in s F o u r
D IV IS IO N
C o n t a in s M a n y
S E C T IO N
C o n t a in s M a n y
P A R A G R A P H
C o n t a in s M a n y
S e n te n c e
S ta te m e n t
W O R D
Is Is
U s e r D e fin e d O R R e s e rv e d
Program structure
Lets try to develop an application using COBOL program. For e.g. Consider Employee
Management System in an Organization. An Application contains series of programs, Data
files, interfaces and Reports.
REFERENCE FORMAT
COBOL programs must be written in the COBOL reference format. Figure 4 shows the
reference format for a COBOL source line.
1 6 7 8 11 12 72 73 80
The following areas are described below in terms of a 72-character line:
Sequence Number Area
Columns 1 through 6: - The sequence number area may be used to label a source statement
line. The content of this area may consist of any character in the character set of the
computer.
Indicator Area
Column 7: -
Any sentence, entry, clause, or phrase that requires more than one line can be
continued in Area B of the next line which is not a
o Comment line
o Blank line
Area A of a continuation line must be blank
If no hyphen (-) in indicator Area
Last character of the preceding line is assumed to be followed by a space
If hyphen is in Indicator Area
o First non-blank character of this continuation line immediately follows the last
non-blank char of continues line
Literals
Following are the main features of Literals:
Literals are Constants
Literals can be Numeric or Non-Numeric
Examples of Literals:
Numeric Non-Numeric
123.345 “COBOL PRG”
9999 “MY NAME”
-100.95
0.54E-78
IDENTIFICATION DIVISION.
PROGRAM-ID. SAMPLE1.
AUTHOR. XYZ.
DATE-WRITTEN. 1-JUN-2000.
DATE-COMPILED.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER. IBM-PC.
OBJECT-COMPUTER. IBM-PC.
DATA DIVISION.
PROCEDURE DIVISION.
0000-MAIN.
STOP RUN.
Answer:
1). B 2). D
File Basics
Following are some fundamental facts about files:
File is a collection of records
Types of Files
o Disk, Tape and Printer Files
File Characteristics
o Record Size and Block Size
Organization
o Sequential, Indexed and Relative
File Types
Disk Files can have all the Organizations - Sequenced, Indexed and Relative.
They can be implemented using either QSAM or VSAM.
Printer Files can have only Sequential Organization and can be opened only in
Output Mode. Special controls like skipping lines, pages are available.
Records
An instance of record maintenance is given below:
Associate Record in Associate File:
Assoc. Number Field1
Assoc. Name Field2
Assoc. Address Field3
Assoc. Tele. No Field4
Sequential Files
The main characteristics of Sequential files are:
Records can be accessed in the order in which they appear in the file
Records can be updated
Records can be appended but not inserted
Records cannot be deleted
Access Mode: Sequential Only
Learning Objectives
The main objective of the chapter is:
To understand various sections and paragraphs in Identification and Environment
divisions.
Identification division
IDENTIFICATION DIVISION is the first division in the COBOL program. There may be several
paragraphs in this division of which PROGRAM-ID is essential paragraph.
Each program has a Program id – Name of the program. Author – Person who is writing the
program and other information like date written, date compiled. Since the information
identifies a particular program, these are defined in IDENTIFICATION DIVISION, which is the
First line of the COBOL program. Except PROGRAM-ID all the other paragraphs are optional
and are mainly for documentation purposes.
Given below is the syntax for Identification Division:
Apart from these statements, there can be comment statements describing the functionality of
the program, and a change log block giving the details about programmers who changed the
program as a part of enhancement to the program.
AUTHOR. author-name.
Used to specify the programmer’s name.
DATE-WRITTEN. Date.
Specify the date the program was coded.
DATE-COMPILED. Date.
Can be coded with an actual date. But if it is coded without a date entry, the
compiler itself will automatically fill in the actual date of compilation
IDENTIFICATION DIVISION.
PROGRAM-ID. EMPMAINT1.
AUTHOR. CTS.
DATE-WRITTEN. 01/01/01.
DATE-COMPILED.
******************************************************************
*********** BRIEF PROGRAM DESCRIPTION ************
* PROGRAM OBJECTIVE: This Program Maintains the Employee file by updating the master
file.
Environment division
The identification division gives introduction about the program. Now we need to define the
Machine dependent details for our program. These details are given in ENVIRONMENT
DIVISION. The ENVIRONMENT DIVISION must follow the IDENTIFICATION DIVISION in
the COBOL program. Among all the divisions this one is the most machine dependent
division. The computer and all the peripheral devices required by the program are described
in this division.
The Environment Division consists of 2 sections:
The Configuration Section
The Input-Output Section
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
[SOURCE-COMPUTER. source m/c.]
[OBJECT-COMPUTER. target m/c
[PROGRAM COLLATING SEQUENCE IS alphabet-name].]
[SPECIAL NAMES.
[, CURRENCY SIGN IS literal-1]
[, DECIMAL-POINT IS COMMA]
[, alphabet-name IS {STANDARD-1
STANDARD-2
EBCIDIC
NATIVE
lit-1 [ {THRU lit-2
(ALSO lit-3)...}]...]...
[, {SYSIN SYSIPT CONSOLE
SYSPUNCH SYSPCH
SYSOUT SYSLIST SYSLST
C01 to C12 CSP S01 to S05}
IS mnemonic-name-1]...
[, CLASS class-name-1 IS (lit-5 [THRU lit-6])...]...
[, SYMBOLIC CHARACTERS
(symb-char-1 ... {IS ARE} int-1...) ...
[IN alphabet-name-1] ] ...
.]
In the configuration section at least the source computer and object computer
paragraph needs to be coded.
Example 1:
CONFIGURATION SECTION.
SOURCE-COMPUTER. IBM 3090.
OBJECT-COMPUTER. VAX-6410
PROGRAM COLLATING SEQUENCE IS ASCII-order.
SPECIAL-NAMES.
ALPHABET ASCII-order IS STANDARD-1.
Example 2:
CONFIGURATION SECTION.
SOURCE-COMPUTER. IBM 3090.
OBJECT -COMPUTER. VAX-6410
PROGRAM COLLATING SEQUENCE IS ASCII-order.
SPECIAL-NAMES.
ALPHABET ASCII-order IS STANDARD-1
DECIMAL IS COMMA
CURRENCY IS ‘#’
SYMBOLIC CHARACTERS backspc IS 23
INPUT-OUTPUT SECTION
Each application program gets data from some data files and processes data. After data
processing, the program writes processed data either into a separate file or updates data in
the existing file. This section contains the information regarding the files to be used by the
program and the peripheral device from the file can be accessed.
As a application development programmer, we should know what are all the data files needed
for processing by our program. These files are defined in FILE-CONTROL paragraph of the
INPUT-OUTPUT section.
This section has 2 paragraphs:
FILE-CONTROL
I-O CONTROL.
FILE-CONTROL Paragraph.
An associate each file in the COBOL program with an external medium, and
allows specification of file organization, access mode and other information.
Below given are the formats for File Control
Format 1 – Sequential File Entries
FILE-CONTROL.
SELECT [OPTIONAL] filnam1
ASSIGN TO assignmtname1
[ORGANIZATION IS SEQUENTIAL]
[ACCESS MODE IS SEQUENTIAL]
[FILE STATUS IS dataname-1
[dataname-2]].
FILE-CONTROL Rules
Given below are the rules for File control:
Each file described in an FD or SD entry in Data Division must be described in
one and only one entry in File-Control Paragraph.
The keyword FILE-CONTROL may appear only once, at the beginning of the
FILE-CONTROL Paragraph.
The word FILE-CONTROL must begin in Area A, and be followed by a period.
Each FILE-CONTROL entry must start in Area B with the SELECT Clause.
Each data-name must appear in a Data Division entry.
FILE-CONTROL Clauses
SELECT Clause
Each file-name specified in a SELECT clause must have an FD or SD entry in
Data Division
The file-name must confirm to the rules of COBOL user-defined name.
ASSIGN Clause
The ASSIGN Clause associates the file with external medium.
ORGANIZATION Clause
Specifies the logical structure of the file.
Format 1 Consideration
ORGANIZATION is SEQUENTIAL
A predecessor-successor relationship of records in the file is established by the order in which
the records are placed in the file when it is created or extended.
Format 2 Consideration
ORGANIZATION is INDEXED
The position of each logical record in the file is determined by the indexes created with the file
and maintained by the system.
Format 3 Considerations
ORGANIZATION is RELATIVE
Its relative record number determines the position of each logical record in the file.
ACCESS MODE Clause
Specifies the manner in which the records of the file are made available for
processing.
Format 1 Consideration
For files with sequential organization, records in the file are accessed in the sequence
established when the file is created or extended.
Format 2 Considerations
ACCESS MODE is SEQUENTIAL
Records in the file are accessed in the sequence of ascending record key values within the
currently used key reference.
ACCESS MODE is RANDOM
The value placed in a record key data item specifies the record to be accessed.
ACCESS MODE is DYNAMIC
The records in the file can be accessed sequentially or randomly, depending on the form of
specific input/output request.
Format 3 Considerations
ACCESS MODE is SEQUENTIAL
Records in the file are accessed in the ascending sequence of relative record numbers of
existing records in the file.
ACCESS MODE is RANDOM
The value placed in a relative key data item specifies the record to be accessed.
ACCESS MODE is DYNAMIC
The records in the file can be accessed sequentially or randomly, depending on the form of
specific input/output request.
FILE_STATUS Clause
The main features of File_status clause are:
Allows the user to monitor the execution of each input/output request for the file.
Data-name-2 is the status key data item.
Data-name-2 must be defined in the Data Division as a two-character
alphanumeric item.
Data-name-2 must not be defined in the File-Section or Communication Section.
When the FILE-STATUS clause is specified, the system moves a value into the
status key data item after each input/output request. (See appendix for file status)
RECORD KEY Clause (Format 2)
The main features of File_status clause are:
Specifies the data item within the record that is the prime record key for an
indexed file.
The values contained in the prime record key data item must be unique among
records in the file.
Data-name-3 is the prime RECORD KEY data item. It must be defined as a fixed
length alphanumeric item within a record description entry associated with the
file.
ALTERNATE RECORD KEY Clause (Format 2)
The main features of File_status clause are:
Specifies the data item within the record that provides an alternative path to the
data in an indexed file.
Data-name-4 is the ALTERNATE RECORD KEY data item. It must be defined as
a fixed length alphanumeric item.
The leftmost character position of data-name-4 must not be same as the leftmost
character position of the RECORD KEY or any other ALTERNATE RECORD
KEY.
If DUPLICATES option is not specified, the values contained in the ALTERNATE
RECORD KEY data item must be unique among records in the file.
If the DUPLICATES option is specified, the values contained in the ALTERNATE
RECORD KEY data item may be duplicated within any records in the file.
RELATIVE RECORD KEY Clause (Format 3)
The main features of File_status clause are:
Specifies the RELATIVE RECORD NUMBER for a specific logical record within a
relative file.
Data-name-6 or Data-name-7 is the RELATIVE KEY data item. It must be defined
as an unsigned integer data item and must NOT be defined in a record
description entry associated with this file.
FILE-CONTROL – Example
JCL required at run time for Files
Example: 1
//SELECT emp-file ASSIGN TO empmstr.
//EMPMSTR DD DSN=USERID.TEST.EMP,
// DISP=SHR
Example: 2
SELECT emp-file ASSIGN TO empmstr
ORGANIZATION IS INDEXED
ACCESS MODE IS DYNAMIC
RECORD KEY IS emp-nbr
ALTERNATE KEY IS emp-name
WITH DUPLICATES.
//EMPMSTR DD DSN=USERID.TEST.EMP
// DISP=SHR
//EMPMSTR1 DD DSN=USERID.TEST.EMP.AIX,
// DISP=SHR
BLOCKED
Variable
o Specify RECORDING MODE V
o Max length of 01 level entry is less than BLOCK contains clause size AND
either
Record contains clause has range
01 level entry is different or has depending on option
BDW RDW Data Record
BDW / RDW = 2 byte length + 2 byte System info
Spanned Records
o Specify RECORDING MODE S
o Max length of 01 level entry + 4 is greater than BLOCK contains clause size
o Can be Fixed or variable
o Can be Blocked or Unblocked
The above JCL is a sample RUNJCL for an application program. All the files, which are
defined in the select clause in FILE SECTION, should be given in the DD statement.
The SYSUDUMP DD statement is where the dump of the data appears when an Abend
occurs while executing the program. The content of the current input record, when the abend
took place also appears in the SYSUDUMP.
I-O CONTROL
I-O CONTROL is not used these days. This feature is invalid in COBOL 370.
Each data file used by the program should be defined in the FILE-CONTROL paragraph.
This paragraph also gives the medium through which the file can be accessed. By medium, in
Mainframe environment, we mean the DDNAMES in run JCL.
In this paragraph, we also describe what type of file it is, what organization is it, which access
mode is used to access the files etc.
Learning Objectives
The main objectives of the chapter are:
External Data
External data is contained in Files or Messages (Only files are discussed here)
A File is a collection of records stored in some input/output device.
The records can be thought of as physical records or logical records.
A Physical Record is a unit of data that is treated as an entity when moved into or
out of the storage device.
o The particular input/output device determines the size of physical record.
o The size does not have relationship with the logical information contained in
the file.
o The FD (File Description) entry specifies the physical aspects of data.
A Logical record is a unit of data whose subdivisions have a logical relationship.
A logical record may itself be a physical record; several logical records may be
contained within a physical record ; or one logical record may extend across
physical records.
Record Description entries, which follow the FD entry for a specific file, describe
the logical records in the file.
Internal Data
The logic of the program may develop additional data within storage. Such data is called
internal data.
Example:
01 ASSOC-REC.
05 ASSOC-NO
05 ASSOC-NAME.
10 FIRST-NAME
10 LAST-NAME
05 ASSOC-ADDRESS.
10 ADDR-LINE-1
10 ADDR-LINE-2
10 ADDR-LINE-3
10 TELEPHONE-NO
Example:
01 ASSOC-REC.
77 W04-TEMP-I PIC X (01).
Example:
01 W03-G-FLAG-VAR.
03 W03-G-FLAG-VAR.
05 W03-X-REPTYPE-FLAG PIC X (02) VALUE 'NR'.
88 C03W-NORMAL-REQ-FLAG VALUE 'NR'.
88 C03W-SHOP-BOUND-FLAG VALUE 'SB'.
88 C03W-SHOP-VAR-FLAG VALUE 'SV'.
05 W03-X-REQ-PROCESSED PIC X (01) VALUE 'N'.
88 C03W-REQUEST-PROCESSED-Y VALUE 'Y'.
88 C03W-REQUEST-PROCESSED-N VALUE 'N'.
DATA TYPES:
Elementary Data Items
Alphanumeric
Alphabetic
Numeric (Zoned, Packed, Binary)
Numeric Edited
Alphanumeric Edited
Group Data Items are Alphanumeric
Syntax for Data Description Entry
Level {data-name-1
FILLER}
[REDEF clause]
[BLANK-WHEN-ZERO clause]
[EXTERNAL clause] [GLOBAL clause]
[OCCURS clause] [JUST clause] [PIC clause]
[SIGN clause] [USAGE clause] [VALUE clause].
PICTURE CLAUSE
{PICTURE IS pic-string1 PIC}
Specified for every Elementary Item
pic-string1 can contain a maximum of 30 Code Characters
Code Character repetitions can be indicated by an integer within ()
Code Meaning Sample
Char Picture
9 Numeric Data Item 9999
X Any allowable character from the character set XXXX
A a Letter or Space AAAA
V Assumed Decimal Point 99V99
P Position of Assumed Decimal Point when it lies 99PPV
outside PPP99
Alphabetic item
Only A allowed
Numeric Items
9 P SV
Numeric-edited items
B P V Z 9 0 / , . + - CR DB * $
At-least one edit char or BLANK WHEN ZERO clause
Alphanumeric items
The symbol X or
Combinations of the symbols A, X, and 9.
Alphanumeric-edited items
A X 9 B 0 /
Must contain at least one A or X, and at least one B or 0 or /.
REDEFINES
level {data-name-1
FILLER}
REDEFINES data-name-2
Allows the same area of memory to be referenced by more than one data-name with different
format and sizes
Multiple 01 levels of same FD are Implicitly Redefined
Restrictions on REDEFINES
OCCURS and REDEFINES cannot be combined
Qualification of data-name-2 not required
Value Clauses only in Condition Names
Redefinition Ceases Whenever a Level No is <= that of data-name-1 or data-
name-2 is encountered
The Size of Data-name-1 must be Less than or equal to Data-name-2
Data item lengths and types can also be respecified within an area.
REDEFINES Examples:
05 NAME-2.
10 SALARY PICTURE XXX.
10 SO-SEC-NO PICTURE X(9).
10 MONTH PICTURE XX.
05 NAME-1 REDEFINES NAME-2.
10 WAGE PICTURE 999V999.
10 EMP-NO PICTURE X(6).
10 YEAR PICTURE XX.
When an area is redefined, all descriptions of the area are always in effect.
That is, redefinition does not cause any data to be erased and never supersedes
a previous description.
Thus, if B REDEFINES C has been specified, either of the two procedural
statements, MOVE X TO B and MOVE Y TO C, could be executed at any point in
the program.
ZEROS
ZEROES}
The BLANK WHEN ZERO clause specifies that an item contains nothing but
spaces when its value is zero.
The BLANK WHEN ZERO clause can be specified only for elementary numeric or
numeric-edited items. These items must be described, either implicitly or
explicitly, as USAGE IS DISPLAY
Useful for printing
Not allowed on 66 and 88 levels & on POINTER and INDEX data items
EXTERNAL Clause
This clause indicates that the data item is external to the program and is common
to the entire run unit
Subordinates to an EXTERNAL group item attains EXTERNAL attribute
All programs referring to the EXTERNAL data item must define same number of
standard data format characters (Total length)
Name used for the data item cannot be used on another EXTERNAL item within
the same program
VALUE clause not allowed
Allowed only at the 01 Level
Not allowed in Linkage and File Section
Indexes in an EXTERNAL data record do not possess the external attribute.
GLOBAL Clause
This clause indicates that the data item is available to all the nested programs
unless it is defined in the contained program
Valid only for 01 Level
Valid only in Working Storage and File Section, not valid in Linkage Section
All data-names subordinate to or condition-names or indexes associated with a
global name are global names.
The search begins within the program that contains the reference and continues
"outward" to containing programs until a match for the GLOBAL name is found.
JUSTIFIED Clause
{JUSTIFIED RIGHT
JUST}
The JUSTIFIED clause overrides standard positioning rules for a receiving item of
the alphabetic or alphanumeric categories
Can’t be specified for other categories
Does not affect initial values, as determined by the VALUE clause
Does not affect the setting of conditional variable when the associated condition
name is set
Items described as USAGE IS POINTER
JUSTIFIED - Examples
05 align-rt pic x(5) JUST RIGHT.
88 c-rt value ‘RT’.
PICTURE Clause
[PICTURE IS string
PIC]
Specifies the characteristics and editing requirements
Must be specified for every elementary item except an index data item or the
subject of the RENAMES clause. In these cases, use of this clause is prohibited.
The PICTURE clause can be specified only at the elementary level
The PICTURE character-string can contain a maximum of 30 characters
SIGN Clause
[SIGN IS {LEADING
TRAILING}]
[SEPARATE CHARACTER]
Specifies the position and mode of representation of the operational sign for a
numeric entry.
The Sign Clause can be specified for a signed numeric data description entry
(that is, one whose PICTURE STRING contains an S)
If a SIGN clause is specified in either an elementary or group entry subordinate to
a group item for which a SIGN clause is specified, the SIGN clause for the
subordinate entry takes precedence for the subordinate entry.
The SEPARATE phrase indicates that sign is stores as separately and not in the
zoned part.
The TRAILING phrase indicates that sign is to be stored in the trailing position
The LEADING phrase indicates that sign is to be stored in the leading position
l-V1 K 5 0
l-V2 - 2 5 0
l-V2 2 5 0
VALUE CLAUSE
The VALUE clause is used to set an initial value to the working storage variable.
This can be specified only in the working storage variable.
The VALUE Clause cannot be a part of RECORD DESCRIPTION entry in the
FILE SECTION.
01 W04-G-VAR.
03 W04-X-RUN-TIME PIC X(20) VALUE SPACES.
03 W04-X-PGM-NAME PIC X(08) VALUE 'PXXBB290'.
01 W04-TEMP-J PIC 9(02) VALUE ZEROES.
In the above example the variable W04-X-PGM-NAME is set to an initial value of PXXBB290
The alphanumeric items can be initialized to Spaces and numeric items can be initialized to
Zeros
EDITING
Sometimes the data when written to report needs some editing to be done. There are 2
Editing done in COBOL:
Numeric Editing
Alphanumeric Editing
Floating Insertion
$ + -
Mutually exclusive
PICTURE Value of Data Edited Result
$$$$.99 .123 bbb$.12
$$$9.99 .12 bb$0.12
$,$$$,999.99 -1234.56 bbbb$1,234.56
+,+++,999.99 -123456.789 b-123,456.78
$$,$$$,$$$.99CR -1234567 $1,234,567.00CR
++,+++,+++.+++ 0000.00 Bbbbbbb
LINKAGE SECTION
The LINKAGE SECTION is used to define any data passed across programs.
i.e. the layout of the data passed is defined in the linkage section.
Example:
LINKAGE SECTION.
01 SALARY-REC.
05 PTR-NEXT-REC POINTER.
05 NAME PIC X(20).
05 DEPT PIC 9(4).
05 SALARY PIC 9(6).
Thus in DATA DIVISION, we have defined data used by our program, in the FILE SECTION –
Data file layouts, in WORKING-STORAGE SECTION - temporary variables if any, and in the
LINKAGE SECTION - the layout of the data passed across programs.
USAGE CLAUSE
The data can be stored in more than one internal form in the computer. In COBOL, a
programmer is allowed to specify the internal form of the data item so as to facilitate the use
of the data item more efficiently. The USAGE clause specifies the format of a data item in
computer storage. These are forms of internal representation
Computational
Display
Pointer
Packed – decimal
The syntax of the USAGE clause is
USAGE IS {BINARY
COMP COMPUTATIONAL
COMP-1 COMPUTATIONAL-1
COMP-2 COMPUTATIONAL-2
COMP-3 COMPUTATIONAL-3
COMP-4 COMPUTATIONAL-4
DISPLAY
INDEX
PACKED-DECIMAL
POINTER}
COMPUTATIONAL
The Computational or COMP phrase has the following 6 formats:
A computational item is a value used in arithmetic operations. It must be
numeric. If the USAGE of a group item is described with any of these items, the
elementary items within the group have this usage.
The maximum length of a computational item is 18 decimal digits.
The PICTURE of a computational item can contain only:
o 9: - One or more numeric character positions
o S :- One operational sign
o V :- One implied decimal point
o P :- One or more decimal scaling positions
COMPUTATIONAL or COMP
This is the equivalent of BINARY. The COMPUTATIONAL phrase is synonymous with
BINARY.
COMPUTATIONAL-1 or COMP-1 (Floating-Point)
Specified for internal floating-point items (single precision). COMP-1 items are 4 bytes long.
The number is actually represented in Hexadecimal form. Such representation is suitable for
Arithmetic operations. The PIC clause cannot be specified for this item
COMPUTATIONAL-2 or COMP-2 (Long Floating-Point)
Specified for internal floating-point items (double precision). COMP-2 items are 8 bytes long.
The advantage is that this increases the precision of the data, which means more significant
digits can be available for the item. The PIC clause cannot be specified
COMPUTATIONAL-3 or COMP-3 (Internal Decimal)
This is the equivalent of PACKED-DECIMAL. In this form of internal representation the
numeric data is represented in the decimal form, but one digit takes half-a-byte.
The sign is stored separately as rightmost half-a-byte regardless of whether S is specified in
the PIC clause or not. The hexadecimal number C or F denotes positive sign and D denotes
negative sign.
The number of bytes = n+1/2 Where n is the number of places specified in PIC clause
For e.g.
77 ITEM-1 PIC S9(7) COMP-3
Will occupy 4 bytes.
COMPUTATIONAL-4 or COMP-4 (Binary)
This is the equivalent of BINARY.
DISPLAY
The data item is stored in character form, 1 character for each 8-bit byte. This corresponds to
the format used for printed output.
DISPLAY can be explicit or implicit.
USAGE IS DISPLAY is valid for the following types of items:
Alphabetic
Alphanumeric
Alphanumeric-edited
where a pointer data item is allowed. The USAGE clause of an elementary item cannot
contradict the USAGE clause of a group to which the item belongs.
Pointer data items can be part of a group that is referred to in a MOVE statement or an
input/output statement. However, if a pointer data item is part of a group, there is no
conversion of values when the statement is executed.
A pointer data item can be the subject or object of a REDEFINES clause.
SYNCHRONIZED can be used with USAGE IS POINTER to obtain efficient use of the
pointer data item.
A VALUE clause for a pointer data item can contain only NULL or NULLS.
A pointer data item cannot be a conditional variable.
A pointer data item does not belong to any class or category.
The DATE FORMAT, JUSTIFIED, PICTURE, and BLANK WHEN ZERO clauses cannot
be used to describe group or elementary items defined with the USAGE IS POINTER
clause.
Pointer data items are ignored in CORRESPONDING operations.
A pointer data item can be written to a data set, but, upon subsequent reading of the
record containing the pointer, the address contained can no longer represent a valid
pointer.
USAGE IS POINTER is implicitly specified for the ADDRESS OF special register.
SYNCHRONIZED Clause
[ {SYNCHRONIZED { LEFT
SYNC } RIGHT } ]
Specifies the alignment of an elementary item on a natural boundary in storage.
It is never required, but may improve performance on some systems for binary
items used in arithmetic.
FILE SECTION
The layouts of the files are described in this section. The files, which are defined in the
SELECT clause, should have an FD entry in the FILE SECTION. The record layout for the
files is defined in the FD section, which is FILE DESCRITPTION entry for the files defined in
the SELECT clause.
The File description entry is followed by the record description entry,
A Record Description entry is a 01 level group item along with its sub divisions.
If there is more than one 01 level, this means that the file defined is a Variable file, which has
different record layouts.
The syntax of the FD entry is
FD file-name-1
[BLOCK CONTAINS [int1 TO]
Int2 {CHARACTERS
RECORDS} ]
[RECORDING MODE IS { F V S U } ]
[RECORD {CONTAINS int3 [TO int4] CHARACTERS} ]
[DATA {RECORD IS
RECORDS ARE}
(Data-name-2)...]
BLOCK CONTAINS
The BLOCK CONTAINS CHARACTERS clause specifies the size of the physical
records.
The int1 and int2 specifies the minimum and maximum character sizes of the
physical record.
The BLOCK CONTAINS RECORDS clause specifies the number of logical
records present in each physical record (the actual data records in the main
memory).
RECORD CONTAINS
The RECORD contains clause gives the physical record. This has to match with record length
in the DD statement parameter.
Example:
. FD INT91.
RECORDING MODE IS F
BLOCK CONTAINS 2 RECORDS.
01 NT91-HDR PIC X(80).
WORKING-STORAGE SECTION
This section is used to define the temporary variables in the COBOL program. It
is used like a scratch pad inside the program.
The data in the working storage may be group item or elementary item.
Level 77 is used to define elementary data item in the working storage section.
Level 88 is used for Conditional variables.
Succeeds File Section
Used for Intermediate Storage
Common Practice to Group related items together
Example
01 I-ADDRESS.
05 I-ADD-LINE-1 PIC X(30).
05 I-ADD-LINE-2 PIC X(30).
05 I-ADD-LINE-3 PIC X(30).
Example
9999-READ-FILE.
READ INT91.
9999-READ-FILE-EXIT.
EXIT.
Arithmetic Expressions
Arithmetic Expressions may consist of any of the following:
An identifier described as a numeric elementary item.
A numeric literal
Identifiers and literals separated by arithmetic operators
Two arithmetic expressions separated by an arithmetic operator.
An arithmetic expression enclosed in parentheses
Arithmetic Operators
BINARY: + - * / **
UNARY: + -
Precedence
Unary
Exponentiation
Multiplication and Division
Addition and Subtraction
Arithmetic Statements
Arithmetic Statements are of 5 kinds:
ADD
SUBTRACT
MULTIPLY
DIVIDE
COMPUTE
ADD
Two or more numeric operands are summed up and stored
Rules
o Elementary Numeric Items
o Literals should be Numeric
o Decimal Point Alignment
o Internal Format Transformation in case of mixed usage clause
Format 1
ADD { id-1
lit-1 } ...
TO ( id-m [ ROUNDED ] ) ...
[ ON SIZE ERROR imper-stmt1 ]
[ NOT ON SIZE ERROR
imper-stmt2 ]
[ END-ADD ]
Format 2
ADD { id-1 TO { id-3
lit-1 } ... lit-3 }
GIVING ( id-m [ ROUNDED ] ) ...
[ ON SIZE ERROR imper-stmt1 ]
[ NOT ON SIZE ERROR
imper-stmt2 ]
[ END-ADD ]
Format 3
ADD { CORRESPONDING
CORR }
id-1 TO id-2 [ ROUNDED ]
[ ON SIZE ERROR imper-stmt1 ]
[ NOT ON SIZE ERROR
imper-stmt2 ]
[ END-ADD ]
CORRESPONDING
Quite often it is required to move some of the data item of one group to some other data item
of other group. If the names of the corresponding data items are distinct then separate MOVE
statements have to be used. But if the corresponding data items have identical names, then
instead of separate MOVE statements, MOVE CORRESPONDING can be used.
Example:
PAY-REC.
02 ID-NUMBER PIC 9(5).
02 NAME PIC X(25).
02 DEPARTMENT PIC X(20).
02 BASIC-PAY PIC 9999V99.
02 FILLER PIC X(24).
PRINT-REC.
02 FILLER PIC X(5).
02 ID-NUMBER PIC Z(5).
02 FILLER PIC X(5).
02 NAME PIC X(25).
02 FILLER PIC X(5).
02 DEPARTMENT PIC X(20).
02 FILLER PIC X(5).
02 BASIC-PAY PIC ZZZZ.99
02 FILLER PIC X(5).
02 DEDUCTIONS PIC ZZZZ.99.
ADD Corresponding
For example, if two data hierarchies are defined as follows:
05 ITEM-1 OCCURS 6.
10 ITEM-A PIC S9(3).
10 ITEM-B PIC +99.9.
10 ITEM-C PIC X(4).
10 ITEM-D REDEFINES ITEM-C PIC 9(4).
10 ITEM-E USAGE COMP-1.
10 ITEM-F USAGE INDEX.
05 ITEM-2.
10 ITEM-A PIC 99.
10 ITEM-B PIC +9V9.
10 ITEM-C PIC A(4).
10 ITEM-D PIC 9(4).
10 ITEM-E PIC 9(9) USAGE COMP.
10 ITEM-F USAGE INDEX.
Then, if ADD CORR ITEM-2 TO ITEM-1(X) is specified, ITEM-A and ITEM-A(X), ITEM-B and
ITEM-B(X), and ITEM-E and ITEM-E(X) are considered to be corresponding and are added
together. ITEM-C and ITEM-C(X) are not included because they are not numeric. ITEM-D
and ITEM-D(X) are not included because ITEM-D(X) includes a REDEFINES clause in its
data description. ITEM-F and ITEM-F(X) are not included because they are defined as
USAGE IS INDEX. Note that ITEM-1 is valid as either identifier-1 or identifier-2.
If any of the individual operations in the ADD CORRESPONDING statement produces a size
error condition, imperative-statement-1 in the ON SIZE ERROR phrase is not executed until
all of the individual additions are completed.
ROUNDED Phrase
After decimal point alignment, the number of places in the fraction of the result of
an arithmetic operation is compared with the number of places provided for the
fraction of the resultant identifier.
When the size of the fractional result exceeds the number of places provided for
its storage, truncation occurs unless ROUNDED is specified. When ROUNDED is
specified, the least significant digit of the resultant identifier is increased by 1
whenever the most significant digit of the excess is greater than or equal to 5.
ADD – Examples:
ADD A TO B
ADD 1 TO B
ADD A TO B ROUNDED
ADD A TO B, C
ADD A TO B ROUNDED
C ROUNDED
ADD A TO B ROUNDED, C
ON SIZE ERROR
MOVE 1 TO ERR-FLAG
ADD A, B, C, D TO X, Y, Z
ADD A , B, C, D TO E GIVING X, Y
SUBTRACT
To subtract one or the sum of two or more numeric items from one or more items
and set the values of one or more items to the result
Valid only for Numeric Items
Automatic Decimal Alignment
SUBTRACT { id-1
lit-1 } ...
FROM ( id-m [ ROUNDED ] ) ...
SUBTRACT { id-1
lit-1 } ...
FROM { id-2
lit-2 }
GIVING ( id-m [ ROUNDED ] ) ...
[ ON SIZE ERROR imper-stmt1 ]
[ NOT ON SIZE ERROR imper-stmt2 ]
[ END-SUBTRACT ]
SUBTRACT { CORRESPONDING
CORR }
id-1 FROM id-2 [ ROUNDED ]
[ END-SUBTRACT ]
SUBTRACT – Examples:
SUBTRACT 1 FROM A
SUBTRACT A FROM B
SUBTRACT A B FROM C D
SUBTRACT A B FROM C GIVING D
SUBTRACT A FROM B
GIVING CROUNDED
SUBTRACT A FROM B
ON SIZE ERROR
MOVE 1 TO ERROR-FLAG
MULTIPLY
MULTIPLY { id-1
lit-1 }
BY ( id-2 [ ROUNDED ] ) ...
MULTIPLY – Examples:
MULTIPLY 5 BY A
MULTIPLY 5 BY A ROUNDED
MULTIPLY A BY B
MULTIPLY A BY B GIVING C D
MULTIPLY A BY B ON SIZE ERROR
MOVE 1 TO ERROR-FLAG
MULTIPLY A BY B GIVING C
ON SIZE ERROR
MOVE 1 TO ERROR-FLAG
DIVIDE:
DIVIDE – Examples:
BEFORE AFTER
A B C A B C
DIVIDE A INTO B 2 10 - 2 5 -
DIVIDE A INTO B 2 9 - 2 5 -
ROUNDED
DIVIDE A INTO B C 2 10 14 2 5 7
DIVIDE A INTO B 2 10 - 2 10 5
GIVING C
DIVIDE 2 INTO A 2 - - 2 1 1
GIVING B C
DIVIDE A BY B GIVING 6 2 - 6 2 3
C
DIVIDE A BY 5 GIVING 8 - - 8 1 3
B REMAINDER C
COMPUTE
COMPUTE
More than one operation in a single statement
Shortens Programs
Avoids Intermediate data names
EXPRESSIONS
Made up of Operators, Data Names & Literals
Operators evaluated based on parenthesis and/or precedence
Conditional Expressions
Types of Conditional Expressions
o Relation
o Class
o Sign
o Condition name
Cause the processing to select between alternate paths depending on the truth
value of the expression
RELATION OPERATORS
Causes a comparison of two operands. Operands can be an Identifier, Literal or
Arithmetic Expression
Syntax
Operand-1 relop operand-2
Operand-1, operand-2 can be an identifier, literal, arithmetic expression, index-
name or a pointer.
Relational Operators
IS [NOT] GREATER THAN [NOT] >
IS [NOT] LESS THAN [NOT] <
IS [NOT] EQUAL TO [NOT] =
IS GREATER THAN OR EQUAL TO >=
IS LESS THAN OR EQUAL TO <=
For Numeric operands the comparison is algebraic
Example:
012
12.00
12
+12 are all-equal
Comparison permitted regardless of Usage
Example
l-A “JOES”
l-B “JOE” taken as “JOE “
l-A > l-B is TRUE
CLASS CONDITION
Numeric or Alphabetic or user defined class-name check of the operand
Numeric test cannot be done for an item declared as alphabetic (PIC A)
Alphabetic test cannot be done for item declared as Numeric (PIC 9)
Packed-decimal allowed for Numeric test
Syntax
IF id-1 IS [NOT]
{NUMERIC
ALPHABETIC
ALPHABETIC-LOWER
ALPHABETIC-UPPER
class-name}
SIGN CONDITION
Operand-1 IS [ NOT ]
{POSITIVE
NEGATIVE
ZERO}
Determines whether algebraic value is less than greater than or equal to zero
Operand-1 must be a numeric identifier, or arithmetic containing at least one
reference to a variable
Condition Name
It is a subset of relational condition
It tests a conditional variable to determine whether its value is equal to any
value(s) associated with the condition-name.
Syntax: condition-name-1
Conditional expression
Examples
IF ASSOC-AGE > 80
SET SENIOR-ASSOC TO TRUE
END-IF
IF ASSOC-SAL IS POSITIVE
SET DEBIT-AMOUNT TO TRUE
END-IF
COMPLEX CONDITIONS
Formed by
o Combining simple conditions
o Nested IFs
o Logical Connectives
Logical Operators
o Used to combine simple conditions
o Abbreviating conditions
o For negation
LOGICAL OPERATORS
NOT
o Logical Negation
OR
o Logical Inclusive
AND
o Logical Conjunction
EVALUATION RULES
Precedence
o Arithmetic Expression
o All Relational Operators
o NOT
o AND
o OR
o If a condition is put in parenthesis, it is evaluated and its truth value depends
on the truth value of its constituents
Examples
A > B OR NOT C OR D
= (A>B) OR NOT (A>C) OR (A>D)
ACCEPT
ACCEPT identifier1 [FROM
{ mnemonic-name
environment-name
DATE
DAY
DAY-OF-WEEK
TIME } ]
Using SPECIAL-NAMES paragraph
A mnemonic name can be assigned to each of the environment names.
For instance, OPERATOR IS CONSOLE can be specified in SPECIAL-NAMES
paragraph. Then the ACCEPT statement can be coded as ACCEPT identifier1
FROM OPERATOR.
Mnemonic-Name is as specified in SPECIAL-NAMES
Environment-Name can be SYSIN, SYSIPT, CONSOLE
DATE - YYMMDD - 9(6)
DAY-OF-WEEK - 9(1)
- 1 TO 7 (Monday to Sunday)
DAY - YYDDD (Julian) - 9(5)
TIME - HHMMSShs - 9(8)
ACCEPT – Example
COBOL statement
ACCEPT in-parm
ACCEPT in-parm FROM card
JCL statement:
//SYSIN DD applicable parameters
LRECL of DCB parameter can be up to a max of 256.
RECFM can be Fixed or Variable
Records are read until identifier is filled or EOF
reached
DISPLAY
DISPLAY { identifier1
literal1 } ...
[ UPON { mnemonic-name1
environment-name1}]
[ WITH NO ADVANCING ]
When the UPON is omitted, SYSOUT is the default device
Mnemonic-name is as specified in SPECIAL-NAMES
Environment-name can be SYSOUT, SYSLIST, SYSLST, SYSPCH,
SYSPUNCH, CONSOLE
DISPLAY – Example
COBOL statement
DISPLAY ‘Return code:’ i-ret-code
DISPLAY ‘Return code:’ i-ret-code
UPON SYSLIST
JCL statement
//SYOUT DD applicable parameters
//SYLIST DD applicable parameters
Default LRECL for SYSOUT is 121 and RECFM is FBA
Records will be folded if length > LRECL - 1.
DISPLAY - Rules
Identifier-1 is converted automatically to external format, if required
Negative signed values cause a low-order sign over punch
Pointers are converted to an external PIC 9(10)
INDEX names can’t be specified
Conditional Statements
IF
IF condition-1 THEN
{ statement-1 ...
NEXT SENTENCE }
[ ELSE [ statement-2 ...
NEXT SENTENCE ] ]
[ END-IF ]
NEXT SENTENCE means execution should move to stmt after the next separator
period
Never use NEXT SENTENCE and Period as IF terminator. It is not a good
programming practice
statement-1, statement-2
Can be any one of the following:
An imperative statement
A conditional statement
An imperative statement followed by a conditional statement.
Example
IF (WS-NT91-CLT NOT EQUAL ‘99999’)
AND WS-NT91-SEQ NOT NUMERIC
Statements 1
ELSE
Statement 2
END-IF
Using conditional-names
IF C08W-ERR-OPEN-FLAG
GO TO 999-ERR-OPEN-PARA
END-IF
CONTINUE
Allows you to specify a no operation statement. It indicates that no executable
instruction is present.
Syntax:
CONTINUE
EVALUATE
Provides a shorthand notation for a series of nested IF statements.
It can evaluate multiple conditions. That is, the IF statements can be made up of
compound conditions.
Provides better readability.
When a satisfiable WHEN is met, processing breaks off from the rest of the
evaluate block
EVALUATE subject-1 [ALSO subject-2]
{{WHEN object-1 [ALSO object-2]
imperative-statement-1 ]
[WHEN OTHER imperative-statement-2]
[ END-EVALUATE
Where a subject is
{
Int-1
Literal –1
Expression
TRUE
FALSE}
And an Object is
{ ANY
condition-1
TRUE
FALSE
[NOT] { identifier-3 [ { THROUGH
literal-3 THRU } { identifier-4
arith-exp-1} literal-4
arith-expr-2} ] }
The execution of the EVALUATE statement operates as if each selection subject and
selection object were evaluated and assigned a numeric or nonnumeric value, a range of
numeric or nonnumeric values, or a truth value
The execution of the EVALUATE statement then proceeds as if the values assigned to
the selection subjects and selection objects were compared to determine whether any
WHEN phrase satisfies the set of selection subjects. This comparison proceeds as
follows:
Each selection object within the set of selection objects for the first WHEN phrase
is compared to the selection subject having the same ordinal position within the
set of selection subjects. One of the following conditions must be satisfied if the
comparison is to be satisfied:
o If the items being compared are assigned numeric or nonnumeric values, or a
range of numeric or nonnumeric values, the comparison is satisfied if the
value, or one value in the range of values, assigned to the selection object is
equal to the value assigned to the selection subject, according to the rules for
comparison.
o If the items being compared are assigned truth-values, the comparison is
satisfied if the items are assigned identical truth-values.
o If the selection object being compared is specified by the word ANY, the
comparison is always satisfied, regardless of the value of the selection
subject.
If the above comparison is satisfied for every selection object within the set of
selection objects being compared, the WHEN phrase containing that set of
selection objects is selected as the one satisfying the set of selection subjects.
If the above comparison is not satisfied for every selection object within the set of
selection objects being compared, that set of selection objects does not satisfy
the set of selection subjects.
This procedure is repeated for subsequent sets of selection objects in the order of
their appearance in the source program, until either a WHEN phrase satisfying
the set of selection subjects is selected or until all sets of selection objects are
exhausted.
Example 1
EVALUATE proc-type ALSO
cust-type
WHEN 1 ALSO 1
MOVE 1 TO RESULT
WHEN 3 ALSO 1 THRU 2
MOVE 2 TO RESULT
WHEN 2 ALSO 1
MOVE 3 TO RESULT
WHEN OTHER
MOVE 0 TO RESULT
END-EVALUATE
In this example subject of Evaluation is an Expression. Depending on these values the control
passes to the corresponding WHEN.
Example 2
EVALUATE TRUE
WHEN l-VALUE < 100
MOVE 1 TO RESULT
WHEN l-VALUE < 1000
MOVE 2 TO RESULT
WHEN l-VALUE < 10000
WHEN OTHER
MOVE 0 TO RESULT
END-EVALUATE
In this example, the subject is TRUTH value. Depending on the values the WHEN phrase
satisfying the TRUTH value is executed.
If a WHEN does not have a associated imperative statement it is a do-nothing condition
(same as coding CONTINUE)
GO TO
The GO TO statement transfers control from one part of the Procedure Division to another.
The GO TO statement has four formats:
Unconditional GO TO: -
The unconditional GO TO statement transfers control to the first statement in the paragraph
or section named in procedure-name
The Syntax of the GO TO statement is
GO TO procedure-name-1
Procedure-name-1
Example
IF NOT NUMERIC
GO TO 999-ERR-PARA
Conditional GO TO: -
GO TO proc-name-1 DEPENDING ON int-1
The conditional GO TO statement transfers control to one of a series of
procedures, depending on the value of the identifier.
Procedure-name-1
Must be a procedure or a section in the same Procedure Division as the GO TO
statement. The number of procedure-names must not exceed 255.
Identifier-1
Must be a numeric elementary data item, which is an integer.
If equal to 1, control is transferred to the first statement in the procedure named
by the first occurrence of procedure-name-1
If equal to 2, control is transferred to the first statement in the procedure named
by the second occurrence of procedure-name-1, and so forth.
If the value of identifier is anything other than a value within the range of 1
through n (where n is the number of procedure-names specified in this GO TO
statement), no control transfer occurs. Instead, control passes to the next
statement in the normal sequence of execution.
Example: -
GO TO 100-HDR-PARA 120-REC-PARA 130-TRILER-PARA DEPENDING ON WS-INT-1
When WS-INT-1 = 1, 100-HDR-PARA
WS-INT-1 = 2, 120-REC-PARA
WS-INT-1 = 3, 130-TRILER-PARA
PERFORM
The PERFORM statement transfers control explicitly to one or more procedures
and implicitly returns control to the next executable statement after execution of
the specified procedure(s) is completed.
An out-of-line PERFORM statement (Procedure-name-1 is specified).
An in-line PERFORM statement (Procedure-name-1 is omitted). An in-line
PERFORM statement must be delimited by the END-PERFORM phrase.
The in-line and out-of-line PERFORM statements cannot be combined. For
example, if procedure-name-1 is specified, imperative-statement-1 and the END-
PERFORM phrase must not be specified.
Executes group of consecutive statements written inline (called INLINE
PERFORM) or elsewhere (called OUT-OF-LINE PERFORM) in a program
Has four formats
Departs from normal sequence of execution and implicit return to next statement
after completion
PERFORM (Basic)
PERFORM
{ proc-name1[{ THRU proc-name2
THROUGH } ]
imp-statement-1 END-PERFORM
}
Example 1 (Out-of-line)
PERFORM PARA-1 THRU PARA-2
In this example the execution of PERFORM statement will start with execution of first
statement in PARA-1 and ends with execution of last statement in PARA-2. All the
paragraphs in between these 2 paragraphs will be executed. And then control returns to the
statement next to the perform statement. This transfer of control occurs implicitly
Example 2 (Inline)
PERFORM
MOVE 1 TO FLAG-1
MOVE 2 TO FLAG-2
END-PERFORM
In the above example the control is not transferred anywhere. This will execute the
statements within the perform statement. This perform is called inline perform statements
which does not contain any section name or paragraph name. This perform statement should
end with an END-PERFORM statement
PERFORM (TIMES)
Example
PERFORM B1-PROCESS
THRU B1-PROCESS-EXIT
10 TIMES
In this example the number of times the perform statement is to be executed is not
predetermined. It depends on value of the variable I-CNT.
If I-CNT is 0 or negative, this perform statement is not all executed
In the UNTIL phrase format, the procedure(s) referred to are performed until the
condition specified by the UNTIL phrase is true. Control is then passed to the
next executable statement following the PERFORM statement.
Here the condition is tested before only at the beginning of each execution by
default
But this default is overridden by TEST AFTER phrase. If the TEST AFTER
phrase is specified, the statements to be performed are executed at least once
before the condition is tested (corresponds to DO UNTIL).
In either case, if the condition is true, control is transferred to the next executable
statement following the end of the PERFORM statement. If neither the TEST
BEFORE nor the TEST AFTER phrase is specified, the TEST BEFORE phrase is
assumed.
Enter
True
Condition
EXIT
False
Executable statements in
the perform paragraph
PERFORM (UNTIL)
Example
MOVE 10 TO I-CNT
PERFORM UNTIL I-CNT = ZERO
WRITE OUT-REC FROM I-ERR-REC (I-CNT)
SUBTRACT 1 FROM I-CNT
END-PERFORM
In the above example, the WRITE and SUBTRACT statements will be executed until the I-
CNT becomes zero. Here perform will be executed 10 times.
PERFORM (VARYING)
PERFORM
{ proc-name1[THRU proc-name2]
varying-phrase after-phrase
varying-phrase imp-stmt-1 END-PERFORM
}
varying-phrase
[ WITH TEST {BEFORE
AFTER } ]
VARYING { id-1 FROM { id-2 lit-1
Inx-nm1 } inx-nm-2}
BY { id-3 UNTIL cond-1
lit-2 }
after-phrase
( AFTER { id-4 FROM { id-5 lit-1
inx-nm1 } inx-nm-2}
BY { id-6 UNTIL cond-2
lit-2 } ) ...
EXAMPLE
PERFORM PROC1 THRU PROC2
VARYING I FROM 1 BY 1 UNTIL I > 50
AFTER J FROM 1 BY 1 UNTIL J > 10
In the above example the PROC-1 to PROC-2 will be executed 500 times.
First with I as 1 and J varying from 1 to 10 in step of 1, then I as 2 and again J
varying from 1 to 10 and so on. Every time I changes value, J must vary from 1 to
10.
Each time the loop varying J is completed, J is initialized before changing the
value of I.
Thus after this perform statement is executed, value of I will 51 and that of J will 1
and not 11.
Enter
Set Identifier-1 to
initial value
True
Cond- Exi
1 t
False
Execute the
imperative
statement in the
perform paragraph
Add increment to
indentifier-1
Enter
True
Cond- Exit
1
False
Cond- True
2
Execute the
imperative
statement in the
perform paragraph
EXIT – Example
PROCEDURE DIVISION.
....
PERFORM B1-PROCESS
UNTIL A > 5.
.....
B1-PROCESS.
….
ADD 1 TO A.
IF NOT-VALID-ACTION
PERFORM B1-PROCESS-EXIT
...
B1-PROCESS-EXIT
EXIT.
STOP
Format
STOP {RUN}.
{lit-1}.
Halts execution of the program:
Permanently (RUN option)
o Control is returned to the system
Temporarily (Lit-1 option)
Literal communicated to operator and execution suspended.
Program execution is resumed only after operator intervention.
STOP RUN statement closes all files defined in any of the programs comprising the run unit.
Data manipulation
Alphanumeric or Alphanumeric-Edited
An elementary move is one in which the receiving item is an elementary item, and
the sending item is an elementary item or a literal. Any necessary conversion of
data from one form of internal representation to another takes place during the
move, along with any specified editing in, or de-editing implied by, the receiving
item.
If the size of the sending item is greater than the size of the receiving item,
excess characters on the right are truncated after the receiving item is filled.
If the sending item has an operational sign, the unsigned value is used. If the
operational sign occupies a separate character, that character is not moved, and
the size of the sending item is considered to be 1 less character than the actual
size.
Numeric or Numeric-edited
If the receiving item is signed, the sign of the sending item is placed in the
receiving item, with any necessary sign conversion. If the sending item is
unsigned, a positive operational sign is generated for the receiving item.
If the receiving item is unsigned, the absolute value of the sending item is moved,
and no operational sign is generated for the receiving item.
When the sending item is alphanumeric, the data is moved as if the sending item
were described as an unsigned integer.
When the sending item is floating-point, the data is first converted to either a
binary or internal decimal representation and is then moved.
De-editing allows moving a numeric-edited data item into a numeric or numeric-
edited receiver. The compiler accomplishes this by first establishing the unedited
value of the numeric-edited item (this value can be signed), then moving the
unedited numeric value to the receiving numeric or numeric-edited data item.
Leftmost-character-position:
Must be an arithmetic expression. The evaluation of leftmost-character-position must result in
a positive nonzero integer that is less than or equal to the number of characters in the data
item referenced by data-name-1.
Length
Must be an arithmetic expression.
The sum of leftmost-character-position and length minus the value one must be
less than or equal to the number of characters in data-name-1. If length is
omitted, than the length used will be equal to the number of characters in data-
name-1 plus one minus leftmost-character-position. The evaluation of length
must result in a positive nonzero integer.
Example
77 name pic x(25).
77 first-name pic x(10).
77 last-name pic x(15).
MOVE name(1:10) TO first-name
MOVE name(11:) TO last-name
Move - Rules
Pointer and Index variables not allowed
o In MOVE CORR - ignored
Length, Sub-string, Reference modification evaluation
o For source variable only once - before the move to the 1st target variable
o For each target variable before the move
Example
01 A.
02 A1 PIC 9(5).
02 A2 PIC X(4).
02 A3 PIC 9(3).
02 A4 PIC Z(3)9.99.
INITIALIZE A REPLACING NUMERIC DATA BY 50
In the above example on A1 and A3 will be initialized to 50.
INITIALIZE A.
In the above statement A1 and A3 will be initialized to zeroes and A2 and A4 will be
initialized to spaces.
Example
01 A.
02 A1 PIC 9(5).
02 A2 PIC X(10).
02 B REDEFINES A2.
03 B1 PIC 9(4).
03 B2 PIC 9(4)V99.
INITIALIZE A
INITIALIZE B
INITIALIZE - Rules
Category of Id-2 should be compatible that of CORR REPLACING
Whether identifier-1 references an elementary or group item, all operations are
performed as if a series of MOVE statements had been written, each of which
had an elementary item as a receiving field.
Same Category can’t be repeated
If the REPLACING phrase is specified:
o If identifier-1 references a group item, any elementary item within the data
item referenced by identifier-1 is initialized only if it belongs to the category
specified in the REPLACING phrase.
o If identifier-1 references an elementary item, that item is initialized only if it
belongs to the category specified in the REPLACING phrase.
All such elementary receiving fields, including all occurrences of table items
within the group, are affected, with the following exceptions:
o Index data items
o Data items defined with USAGE IS POINTER
o Elementary FILLER data items
o Items that are subordinate to identifier-1 and contain a REDEFINES clause,
or any items subordinate to such an item. (However, identifier-1 can contain
a REDEFINES clause or be subordinate to a redefining item.)
The areas referenced by identifier-1 are initialized in the order (left to right) of the
appearance of identifier-1 in the statement. Within a group receiving field,
affected elementary items are initialized in the order of their definition within the
group.
SPACE is implied source for
INITIALIZE - Examples
INITIALIZE id-1
INSPECT
Specifies that characters, or groups of characters in a data item are to be
o Counted (tallied)
o Replaced
o Or both.
It will count the occurrence of a specific character (alphabetic, numeric, or special
character) in a data item.
It will fill all or portions of a data item with specified characters, such as spaces or
zeros.
It will convert all occurrences of specific characters in a data item to user-supplied
replacement characters.
CONVERTING is a special form of replacing
In the following list of comparison rules, the TALLYING and REPLACING phrases are the
items being compared:
When both the TALLYING and REPLACING phrases are specified, the INSPECT
statement is executed as if an INSPECT TALLYING statement were specified,
immediately followed by an INSPECT REPLACING statement.
The first comparand is compared with an equal number of leftmost contiguous
characters in the inspected item. The comparand matches the inspected
characters only if both are equal, character-for-character.
If no match occurs for the first comparand, the comparison is repeated for each
successive comparand until either a match is found or all comparands have been
acted upon.
If a match is found, tallying or replacing takes place, as described in the following
TALLYING/REPLACING phrase descriptions. In the inspected item, the first
character following the rightmost matching character is now considered to be in
the leftmost character position. The process described in rules 2 and 3 is then
repeated.
If no match is found, then, in the inspected item, the first character following the
leftmost inspected character is now considered to be in the leftmost character
position. The process described in rules 2 and 3 is then repeated.
If the CHARACTERS phrase is specified, an implied 1-character comparand is
used in the process described in rules 2 and 3. The implied character is always
considered to match the inspected character in the inspected item.
The actions taken in rules 1 through 6 (defined as the comparison cycle) are
repeated until the rightmost character in the inspected item has either been
matched or has been considered as being in the leftmost character position.
Inspection is then terminated.
Format 1
INSPECT id-1 TALLYING
id-2 FOR
{CHARACTER
ALL {id-3 lit-1}
LEADING {id-3 lit-1}}
[{BEFORE
AFTER} INITIAL {id-4 lit-2}]
Format 2
INSPECT id-1 REPLACING
{CHARACTER
ALL {id-2 lit-1}
LEADING {id-2 lit-1}}
BY {id-3 lit-2}
[{BEFORE
AFTER} INITIAL {id-4 lit-3}]
Format 3
INSPECT id-1
CONVERTING
{id-2 lit-1}
TO {id-3 lit-2}
[{BEFORE
AFTER} INITIAL {id-4 lit-3}]
INSPECT – Examples
77 countr PIC 9 VALUE ZERO.
01 data-1 PIC X(6).
INSPECT data-1 TALLYING countr FOR CHARACTERS AFTER INITIAL "S"
REPLACING ALL "A" BY "O"
DATA-1 COUNTR DATA-1
Before After After
ANSELM 3 ONSELM
SACKET 5 SOCKET
PASSED 3 POSSED
ANS”LM 0 000”LM
SACK”T 0 0000”T
Before After
a/five/?six a/FIVE/?six
r/Rexx/RRRr r/REXX/RRRR
zfour?inspe zfour?inspe
STRING
Strings together the partial or complete contents of two or more data items or
literal into one single data item.
One STRING statement can be written instead of a series of MOVE statements.
Process is called concatenation
STRING {id-1 lit-1} ...
DELIMITED BY {id-2 lit-2 SIZE}
INTO id-3 [WITH POINTER id-4 ]
STRING - Example
77 FIELD-1 PIC X(4) VALUE ‘ABCD’.
77 FIELD-2 PIC X(6) VALUE ‘MA IN ‘.
77 FIELD-3 PIC X(9) VALUE ‘121,34,56’.
77 FIELD-4 PIC X(14) VALUE SPACES.
FIELD-4 = ABCDMA121bbbbb
In the above example, FIELD-1 does not contain any delimiters, all 4 characters are moved to
FIELD-4
First 2 characters of FIELD-2 are moved to FIELD-4 as third character is the delimiter
First 3 characters of FIELD-3 are moved to FIELD-4 as 4th character is the delimiter
STRING - Rules
Receiving fields must not be
o Edited field
o With Justified clause
o With reference modification
Pointer variable must be
o Elementary and Numeric
o Large enough to hold max length of receiving field
ON OVERFLOW executed when pointer Value <= 0 or exceeds max length of
receiving field
UNSTRING
Causes contiguous data in a sending field to be separated and placed into
multiple receiving fields:
o Number of characters placed in each receiving field
o Count of the total number of characters transferred
o Special action when all the receiving fields are filled before the end of the
sending item
Useful to convert display format data to compact form
UNSTRING id-1
[DELIMITED BY ALL {id-2 lit-1}
UNSTRING – Example
FULL-NM = ‘EDISON, THOMAS ALVA ’
UNSTRING
FULL-NM DELIMITED BY ‘,’ OR SPACE
INTO LAST-NM COUNT IN LAST-NM-CNT
FIRST-NM COUNT IN FIRST-NM-CNT
MID-NM COUNT IN MID-NM-CNT
UNSTRING - Rules
If the DELIMITED BY phrase is not specified, the number of characters examined
is equal to the size of the current data-receiving field.
If the POINTER phrase
o Is not specified an implicit value of 1 is assumed
If specified, the source field is examined from the relative character position
specified by the value in the pointer field.
SET
SET - CONDITION NAME
Example
77 I-EOF-FLAG PIC x.
88 C-EOF VALUE ‘Y’.
SET C-EOF TO TRUE
(I-EOF-FLAG will have the value ‘Y’ after the execution of the SET statement)
77 I-ACTION-FLAG PIC X.
88 C-ADD VALUE ‘A’ space.
88 C-DEL VALUE ‘D’.
88 C-MOD VALUE ‘M’.
SET C-ADD TO TRUE
(Will get value ‘A’ - first lit in value clause)
SET – Indexes
SET index-name-3 UP BY identifier-3
DOWN BY integer-2
When this form of the SET statement is executed, the value of the receiving field
is increased (UP BY) or decreased (DOWN BY) by a value that corresponds to
the value in the sending field.
The receiving field can be specified by index-name-3. This index-name value
both before and after the SET statement execution must correspond to the
occurrence numbers in an associated table.
The sending field can be specified as identifier-3, which must be an elementary
integer data item, or as integer-2, which must be a nonzero integer.
When the Format 2 SET statement is executed, the contents of the receiving field
are increased (UP BY) or decreased (DOWN BY) by a value that corresponds to
the number of occurrences represented by the value of identifier-3 or integer-2.
Receiving fields are acted upon in the left-to-right order in which they are
specified. The value of the incrementing or decrementing field at the beginning of
SET statement execution is used for all receiving fields.
Introduction
Sometimes it becomes necessary to handle group of data consisting of similar items. Such a
group is called a Table or Array. An array is used to store similar items or elements. For eg.
A series of totals in the working storage with the same format.
A table is a list of stored fields that are looked up or referenced by the program. It also
eliminates the need for separate entries for repeated data items. The usage of tables can be
illustrated by the following example
For example when we need to list the months normal way of representing it is
MONTH-TABLE.
02 MON-1 PIC X(9) VALUE ‘JANUARYbb‘.
02 MON-2 PIC X(9) VALUE ‘FEBRUARYb ‘.
02 MON-3 PIC X(9) VALUE ‘MARCHbbbb‘.
02 MON-4 PIC X(9) VALUE ‘APRILbbbb‘.
02 MON-5 PIC X(9) VALUE ‘MAY bbbbbb‘.
02 MON-6 PIC X(9) VALUE ‘JUNEbbbbbb‘.
02 MON-7 PIC X(9) VALUE ‘JULYbbbbbb‘.
02 MON-8 PIC X(9) VALUE ‘AUGUSTbbb‘.
02 MON-9 PIC X(9) VALUE ‘SEPTEMBER‘.
02 MON-10 PIC X(9) VALUE ‘OCTOBERbb‘.
02 MON-11 PIC X(9) VALUE ‘NOVEMBERb‘.
02 MON-12 PIC X(9) VALUE ‘DECEMBERb‘.
In the above example, the same data month name is being repeated 12 times. Instead of
defining the elements like this we can define it as a table with 12 elements. Each element of
the table can be referred using a Subscript or an index. Now lets us look at how the table can
be defined in COBOL
01 MONTH-TABLE.
02 MON-NAME PIC X (9) OCCURS 12 TIMES.
This table can be fixed length tables and Variable length tables. The tables or Arrays are
define using OCCURS in COBOL. Now lets look at Occurs clause in detail.
Occurs
[ {ASCENDING KEY IS
DESCENDING }
dataname-2 [ ... ] ]
Example
03 YEAR PIC 9(4) OCCURS 10 TIMES INDEXED BY I1.
In the above example the displacement of first element is zero, 2nd is 4, 3rd is 8 and so on. I.e.
the index I1 assumes these values for occurrence numbers 1,2,3 and so on.
The value of Index item is set by the occurrence number and not the internal
value
The value of index is set using SET clause. The statements like Move or Add
cannot be used on index
Index name is implicitly defined
Index name cannot be associated with any other data hierarchy
Must be initialized before it can be used using SET and PERFORM VARYING
Example
77 A1 PIC 99
REC-1.
P1 PIC XX.
02 P2 PIC 99 OCCURS 1 TO 90 TIMES DEPENDING ON A1.
In this example depending on the value of A1, the size of the table may vary from 1 to 90.
[{ASCENDING KEY IS
DESCENDING }
dataname-2 [ ... ] ]
[ INDEXED BY index-name-1 [ ... ] ]
Object of the OCCURS DEPENDING ON (ODO) clause cannot be variably
located;
If subject of OCCURS is defined as EXTERNAL then ODO ought to be defined as
EXTERNAL
The int-1 and int-2 defined must be positive integers.
The data name-1 can be defined at the same level as ODO but it cannot be
defined as sub item to ODO.
Example
01 REC-1.
02 A1 PIC 99.
02 P1 PIC XX.
02 P2 PIC 99 OCCURS 1 TO 90 DEPENDING ON A1.
The above example is valid.
01 REC-1.
02 P1 PIC XX.
02 P2 PIC 99 OCCURS 1 TO 90 DEPENDING ON A1.
02 A1 PIC 99.
This definition is invalid
GLOBAL definition needs rules similar to EXTERNAL
ODO cannot be REDEFINED
Set
SET { id-1
index-name-1 } ...
TO { id-2
index-name-2
int-1 }
SET – Examples
05 TABLE-ITEM OCCURS 10
INDEXED BY INX-A
PIC X (8).
Receiving Fields
Sending fields Index Name Index Data Item Integer Data Item
Index Name V V* V
Index data item V* V* -
Integer data item V - -
Numeric literal V - -
Note: * - No Conversion
Complex Tables
FILLER.
05 CTR1 PIC S99.
05 CTR2 PIC S99.
05 FIELD-A.
1
10 TABLE-1.
15 REC-1 OCCURS 1 TO 5
DEPENDING ON CTR1 PIC X(3).
10 EMP-NR PIC X (5).
2
10 TABLE-2 OCCURS 5
3
INDEXED BY INDX.
4
15 TABLE-ITEM PIC 99.
5
15 REC-2 OCCURS 1 TO 3 DEPENDING ON CTR2.
20 DATA-NUM PIC S99.
TABLE PROCESSING
Now we have seen how to define tables of various sizes and dimension, we now see how to
process these tables using PERFORM verb.
EXAMPLE
Now we want to find the average price of the product for a period.
MOVE ZERO TO TOTAL.
MOVE 1 TO A1.
PERFORM ADD-PRICE-PARA 36 TIMES.
COMPUTE AVERAGE = TOTAL / 36
ADD-PRICE-PARA.
COMPUTE TOTAL = PROD-PRICE (A1) + TOTAL
ADD 1 TO A1.
This is one form of PERFORM statement used for FIXED length tables.
Now we want to find the price of a product for period 011999 (mmyyyy)
MOVE 1 TO A1
PERFORM FIND-PRICE-PARA UNTIL
(PERIOD = ‘011999’ OR
A1 > 36)
FIND-PRICE-PARA
IF PERIOD = ‘011999’
MOVE PROD-PRICE (A1) TO PRICE-1
END-IF
ADD 1 TO A1
In this form, the paragraph is executed repetitively until the period id 011999 or until the
subscript of the table is greater than the maximum table limits.
The same fixed length table can be defined as variable length table.
In this case again we want to find the price of a product for period 011999(mmyyyy)
PROCEDURE DIVISION.
SET INX-1 TO 1.
PERFORM FIND-PRICE-PARA VARYING INX-1 BY 1 UNTIL
INX-1 > TAB-CNT OR
PERIOD = ‘011999’
FIND-PRICE-PARA
IF PERIOD = ‘011999’
MOVE PROD-PRICE(INX-1) TO PRICE-1
END-IF
In the above statement the increment of the INDEX is not given explicitly.
It is done automatically.
Either fixed length or variable length the table can be in the sorted order by
defining a key for the table.
The sorted table reduces the time of search, when a search is performed on the
table.
The example for SORTED TABLES
02 ASSOC-DATA
OCCURS 10 TIMES
ASCENDING KEY IS A-NAME
INDEXED BY INX-1.
05 A-NAME PIC X(20).
05 A-NUM PIC 9(04).
The data have to be sorted in the correct order (ascending or descending) by the
programmer.
Search
SEARCH - Sequential
SEARCH id-1
[ VARYING { id-2
index-name-1 } ]
[ AT END imperative-statement-1 ]
WHEN condition-1 { imper-stmt2
NEXT SENTENCE }
[ WHEN condition-2 { imper-stmt3
NEXT SENTENCE } ] ...
[ END-SEARCH ]
Example
77 NAME PIC X(20).
05 ASSOC-TABLE OCCURS 350 TIMES
INDEXED BY I-1.
10 ASSOC-NAME PIC X (20).
10 ASSOC-NUM PIC 9(4).
SET I-1 TO 1.
SEARCH ASSOC-TABLE
AT END
DISPLAY ‘NAME NOT FOUND’
WHEN NAME = ASSOC-NAME (I-1)
DISPLAY ‘NAME FOUND’.
START
If the value
of index Execute Go to next
YES
associated imperative executable
with id-1 is statement
statement-1
> size of the
table
NO
Is YES Go to next
condition-1 Execute executable
true? imperative statement
statement-2
NO
Is Go to next
condition- YES
Execute executable
2 true? imperative statement
statement-3
NO
Index associated
with id-1 is
incremented by 1
id-2/index-name-
1 is incremented
by 1
SEARCH ALL
SEARCH ALL id-1
[ AT END imperative-statement-1 ]
WHEN { dataname-1= equal-clause
Condition-name-1}
[ AND { dataname-1= equal-clause
Condition-name-1} ] ...
{ imper-stmt2
NEXT SENTENCE }
[ END-SEARCH ]
Chapter 8: Sub-Program
Learning Objectives
The main objective of the chapter is:
Understand the concepts of calling a sub-program
Call
Transfers control from one object program to another within the run unit.
Called program starts executing from:
o Top of program
o ENTRY label (not good programming practice)
Transfer control methods
o Call nested program
o Static call
o Dynamic call
Parameters to called program:
o By reference
o By content
Use RETURN-CODE special register to pass return codes
Return of control depends on the termination stmt issued by the called program
o Stop run unit
o Return to called program
CALL { id-1 lit-1} [ USING
{ [BY REFERENCE ]
{ id-2 file-name-1
ADDRESS OF id-3} ...
BY CONTENT
{ [LENGTH OF] id-2
ADDRESS OF id-3
lit-1} ... } ... ]
[ON {OVERFLOW imperative stmt-1]
EXCEPTION }
[ NOT ON EXCEPTION imperative stmt-2]
[END-CALL]
CALL - Examples
CALL ‘SUBPGM1’.
CALL l-SUBPGM-1 USING
l-PARM1 l-PARM2.
CALL l-SUBPGM1 USING
BY CONTENT l-PARM1
l-PARM2
BY REFERENCE l-PARM3.
01 l-parm1.
05 l-name pic x(30).
05 l-emp-no pic 9(4).
01 l-parm2.
05 l-salary pic s9(9)v99 comp-3.
05 l-hra pic s9(9)v99 comp-3.
05 l-leave pic s9(2)v9 comp-3.
01 l-parm3.
05 l-gross pic s9(9)v99 comp-3.
05 l-deduct pic s9(9)v99 comp-3.
PROCEDURE DIVISION.
....
CALL l-SUBPGM1 USING
BY CONTENT l-PARM1 l-PARM2
BY REFERENCE l-PARM3.
IDENTIFICATION DIVISION.
PROGRAM-ID. 1-SUBPGM1.
…
LINKAGE SECTION.
01 L-PARM3.
05 l-gross pic s9(9)v99 comp-3.
05 l-deduct pic s9(9)v99 comp-3.
01 L-PARM1.
05 l-name pic x(30).
05 l-emp-no pic 9(4).
01 L-PARM2.
05 l-salary pic s9 (9) v99 comp-3.
CALL - Rules
The correspondence of identifiers in the using clause of called and calling
programs is positional
File-name in using is only for QSAM files
Address of option can be used only for Linkage variables with level 01 or 77
Exception or Overflow cond occurs when the called program cannot be made
available.
Called program must not execute a CALL statement that directly or indirectly calls
the calling program (Recursion not allowed)
Cancel
CANCEL {id-1 lit-1}
Ensures that the next time the referenced subprogram is called it will be entered
in its initial state.
All programs contained in the Canceled program are also canceled.
Same as executing an EXIT PROGRAM or GOBACK in the called subprogram if
it possesses the INITIAL attrib.
Entry
ENTRY lit-1 [USING id-1 ...]
Establishes an alternate entry point
Execution of the called program begins at the first executable stmt following the
ENTRY stmt whose literal corresponds to the CALL stmt literal or identifier
Not a recommended way of entering a program
Stop
STOP {RUN
lit-1}
Halts execution of the program:
o Permanently (RUN option)
o Temporarily (Lit-1 option)
Literal communicated to operator and execution suspended
Program execution is resumed only after operator intervention
STOP RUN statement closes all files defined in any of the programs comprising the run unit.
GOBACK
GOBACK
Functions like:
o EXIT PROGRAM statement when coded in a called program
o STOP RUN statement when coded in a main program.
END PROGRAM
END PROGRAM program-name.
An END PROGRAM header terminates a nested program or separates one
program from another in a sequence of programs.
The program-name must be same as the program-name declared in the
corresponding PROGRAM-ID paragraph.
An END PROGRAM is optional for the last program in a sequence only if that
program does not contain any nested source programs.
COPY statement
The COPY statement is a library statement that places prewritten text in a COBOL program.
Prewritten source program entries can be included in a source program at compile time.
Thus, an installation can use standard file descriptions, record descriptions, or procedures
without re-coding them. These entries and procedures can then be saved in user-created
libraries; they can then be included in the source program by means of the COPY statement.
Compilation of the source program containing COPY statements is logically equivalent to
processing all COPY statements before processing the resulting source program.
The effect of processing a COPY statement is that the library text associated with text-name
is copied into the source program, logically replacing the entire COPY statement, beginning
with the word COPY and ending with the period, inclusive. When the REPLACING phrase is
not specified, the library text is copied unchanged
Each COPY statement must be preceded by a space and ended with a separator period.
A COPY statement can appear in the source program anywhere a character string or a
separator can appear.
COPY { text-name
lit-1 }
[ { OF { lib-name
IN } lit-2 } ]
[ SUPPRESS ] [ REPLACING
( op-1 BY op-2 ) ... ] .
Compiler Directive
COPY – Example
01 :TAG:.
02 :TAG:-WEEK PIC S99.
02 :TAG:-GROSS-PAY PIC 9(5)V99.
02 :TAG:-HOURS PIC S999
OCCURS 1 TO 52 TIMES DEPENDING ON :TAG:-WEEK OF :TAG:.
01 PAYROLL.
02 PAYROLL-WEEK PIC S99.
02 PAYROLL-GROSS-PAY PIC S9(5)V99.
02 PAYROLL-HOURS PIC S999
OCCURS 1 TO 52 TIMES
DEPENDING ON PAYROLL-WEEK OF PAYROLL.
Compiler options
Helps to control the compilation
Specify these options in
o PARM field of the JCL
o CBL or PROCESS statement in program
Most of the options come in pairs
o XREF/NOXREF
Some options have sub-parameters.
o LINECOUNT (44)
Watch out
o There are default options when compiler is installed
Precedence of Compiler Options
o Level 1: (Highest precedence) Installation defaults, fixed by your installation
o Level 2: Those on PROCESS (or CBL) stmt
o Level 3: Those on the JCL PARM
o Level 4: (Lowest precedence) Installation defaults, but not fixed.
Object code generation
o COMPILE, CMPR2, DECK, NAME, OBJECT
Use of virtual storage
o BUFSIZE, SIZE
Object code execution
o ADV, ADW, DATA, DYNAM, FASTSRT, OPTIMIZE, OUTDD, NUMPROC
o RENT, RESIDENT, SSRANGE, TRUNC, ZWB
Maps, listing, and diagnostics
o DUMP, FLAG, FLAGMIG, FLAGSAA, FLAGSTD, LANGUAGE, LINECOUNT,
LIST, MAP, NUMBER, OFFSET, SEQUENCE, SOURCE, SPACE,
TERMINAL, VBREF, XREF
Debugging
o FDUMP, TEST
Literal delimiters
o APOST, QUOTE, DBCS
Reserved word list
o WORD
Processing of COPY ETC.
o LIB
Provision of User Exit
o EXIT
ADV / NOADV
Default is: ADV
ADV has meaning only if you use WRITE . . . ADVANCING in your source code.
With ADV in effect, the compiler adds 1 byte to the record length to account for
the printer control character. Use NOADV if you have already adjusted your
record length to include 1 byte for the printer control character
CMPR2 / NOCMPR2
Default is: NOCMPR2
Use CMPR2 when you want the compiler to generate code that is compatible with
code generated by VS COBOL II Release 2. Valid COBOL source programs that
compiled successfully under VS COBOL II Release 2 will also compile
successfully under IBM COBOL for MVS & VM with CMPR2 in effect and will
provide compatible results.
COMPILE / NOCOMPILE (W/E/S)
Default is: NOCOMPILE (S)
Abbreviations are: C / NOC
Use the COMPILE option only if you want to force full compilation even in the
presence of serious errors. All diagnostics and object code will be generated. Do
not try to run the object code generated if the compilation resulted in serious
errors--the results could be unpredictable or an abnormal termination could occur.
DATA (24/31)
Default is: DATA(31)
Language Environment provides services that control the storage used at run
time. IBM COBOL for MVS & VM uses these services for all storage requests.
For reentrant programs, the DATA (24|31) compiler option and the HEAP run-
time option control whether storage for dynamic data areas (such as WORKING-
STORAGE section and FD record areas) is obtained from below the 16-
megabyte line or from unrestricted storage.
When you specify the run-time option HEAP (BELOW), the DATA (24|31)
compiler option has no effect; the storage for all dynamic data areas is allocated
from below the 16-megabyte line. However, with HEAP (ANYWHERE) as the
run-time option, storage for dynamic data areas is allocated from below the line if
you compiled the program with the DATA (24) compiler option or from
unrestricted storage if you compiled with the DATA (31) compiler option.
Specify the DATA (24) compiler option for programs running in 31-bit addressing
mode that is passing data parameters to programs in 24-bit addressing mode.
This ensures that the data will be addressable by the called program.- With
NORENT compiler option, DATA(31) has no effect
DECK / NODECK
Default is: NODECK
Abbreviations are: D / NOD
Use DECK to produce object code in the form of 80-column card images. If you
use the DECK option, be certain that SYSPUNCH is defined in your JCL for
compilation.
SYSPUNCH ddname must for DECK opt
DYNAM / NODYNAM
Default is: NODYNAM
For unit testing your programs, you might find it easier to debug code that has not
been optimized. But when the program is ready for final test, specify OPTIMIZE,
so that the tested code and the production code are identical. You might also
want to use the option during development, if a program is used frequently
without recompilation. However, the overhead for OPTIMIZE might outweigh its
benefits if you re-compile frequently, unless you are using the assembler
language expansion (LIST option) to fine tune your program.
OPTIMIZE & TEST - mutually exclusive
OUTDD (ddname)
To get run-time DISPLAY output on a data set other than SYSOUT
QUOTE / APOST
Default is: QUOTE
Abbreviations are: Q / APOST
Use QUOTE if you want the figurative constant [ALL] QUOTE or [ALL] QUOTES
to represent one or more quotation mark (") characters.
Use APOST if you want the figurative constant [ALL] QUOTE or [ALL] QUOTES
to represent one or more apostrophe (') characters.
Note: Either quotes or apostrophes can be used as literal delimiters, regardless
of whether the APOST or QUOTE option is in effect. The delimiter character used
as the opening delimiter for a literal must be used as the closing delimiter for that
literal.
RENT / NORENT
Object code is to be re-entrant
Have RESIDENT option for all programs in a unit unless the run-time option
MIXRES has been specified.
SOURCE / NOSOURCE
Default is: SOURCE
Abbreviations are: S / NOS
Use SOURCE to get a listing of your source program. This listing will include any
statements embedded by PROCESS or COPY statements.
SOURCE must be specified if you want embedded messages in the source
listing.
Use NOSOURCE to suppress the source code from the compiler output listing.
SPACE (1/2/3)
To select single, double, or triple spacing in your source code listing.
TEST / NOTEST
Default is: NOTEST
Use TEST to produce object code that enables Debug Tool to perform batch and
interactive debugging. The amount of debugging support available depends on
which TEST suboptions you use. The TEST option also allows you to request
that symbolic variable be included in the formatted dump produced by Language
Environment.
Use NOTEST if you do not want to generate object code with debugging
information and do not want the formatted dump to include symbolic variables.
TEST has two sub options; you can specify both, just one of the sub options, or
neither of the sub options:
TRUNC (STD): - Use TRUNC (STD) to control the way arithmetic fields are
truncated during MOVE and arithmetic operations. TRUNC (STD) applies only to
USAGE BINARY receiving fields in MOVE statements and arithmetic
expressions. When TRUNC (STD) is in effect, the final result of an arithmetic
expression, or the sending field in the MOVE statement, is truncated to the
number of digits in the PICTURE clause of the BINARY receiving field.
TRUNC (OPT)
TRUNC (OPT) is a performance option. When TRUNC (OPT) is specified, the
compiler assumes that the data conforms to PICTURE and USAGE specifications
of the USAGE BINARY receiving fields in MOVE statements and arithmetic
expressions. The results are manipulated in the most optimal way, either
truncating to the number of digits in the PICTURE clause, or to the size of the
binary field in storage (halfword, fullword, or double word).
TRUNC (BIN): - The TRUNC (BIN) option applies to all COBOL language that
processes USAGE BINARY data. When TRUNC (BIN) is in effect:
o BINARY receiving fields are truncated only at half word, fullword, or
doubleword boundaries.
o BINARY sending fields are handled as halfwords, fullwords, or doublewords
when the receiver is numeric; TRUNC (BIN) has no effect when the receiver
is not numeric.
o The full binary content of the field is significant.
o DISPLAY will convert the entire content of the binary field, with no truncation.
VBREF / NOVBREF
Default is: NOVBREF
Use VBREF to get a cross-reference among all verb types used in the source
program and the line numbers in which they are used. VBREF also produces a
summary of how many times each verb was used in the program.
Use NOVBREF for more efficient compilation.
ZWB affects how the program runs; the same COBOL source program can give
different results, depending on the option setting.
Use NOZWB if you want to test input numeric fields for SPACES.
File operations
This section Covers File Handling, Input- output Statements for file, Sort and Merge of
records.
OPEN
OPEN { INPUT file-name1 ...
OUTPUT file-name2 ...
I-O file-name3 ...
EXTEND file-name4 ... } ...
CLOSE
CLOSE file-name1 ...
Closes the open file
Terminates the file processing
COBOL performs automatic closing if not closed
o At termination of run-unit
o CANCEL command
o Return from program with INITIAL attribute
READ
Format-1 - Sequential Read
USAGE: -
The random reading of indexed file is used when the key value for the file is exactly
known. The random read can be used in real time systems like Patient monitoring
system in hospitals. Here there might be necessary to retrieve a particular patient’s
record. The full key value for the Patient master file is known. Hence we use random
read in this case. The random read of indexed file is faster.
READ Random - Indexed file
Key of reference:
o Data name specified in KEY phrase
o The prime RECORD KEY data name if KEY phrase not specified
The KEY IS phrase can be specified only for indexed files. Data-name-1 must
identify a record key associated with file-name-1
When dynamic access is specified, this key of reference is used for subsequent
executions of sequential READ
Execution of a Format 2 READ statement causes the value of the key of
reference to be compared with the value of the corresponding key data item in
the file records, until the first record having an equal value is found. The file
position indicator is positioned to this record, which is then made available. If no
record can be so identified, an INVALID KEY condition exists, and READ
statement execution is unsuccessful.
If the KEY phrase is not specified, the prime RECORD KEY becomes the key of
reference for this request. When dynamic access is specified, the prime
RECORD KEY is also used as the key of reference for subsequent executions of
sequential READ statements, until a different key of reference is established.
KEY Phrase: - When the KEY phrase is specified, data-name becomes the key
of reference for this request. When dynamic access is specified, this key of
reference is used for subsequent executions of sequential READ statements,
until a different key of reference is established.
READ Random - Relative file
Execution of a Format 2 READ statement reads the record whose relative record
number is contained in the RELATIVE KEY data item,
The KEY phrase must not be specified
Example
The FD entry is:
When the next record from the file is read into RECORD-2,
Contents of record being read in RECORD-2:
01234567890123456789
But since the record description contains two 01 levels and it’s a variable length file
Contents of record area after second READ is executed:
01234567890123456789??????????
The last 10 characters of the record area is undefined. I.e. This storage area can hold any
characters depending on the sequence of reads and any process done inside the program
using RECORD-1. In the above example, assume there was no processing then the last 10
bytes would contain “UVWXYZ1234”. But this area cannot be accessed, when we use
RECORD-2 layout because this is implicitly redefined item
READ – Example
File- Indexed, Dynamic Access
Record Description:
01 ASSOC-REC
05 ASSOC-NO-KEY PIC 9(4).
05 ASSOC-NAME PIC X(10).
Assoc # Assoc Name
0004 RAJESH
0010 RAMESH
0015 GOPAL
0016 RAGHAVAN
0100 SARITA
0401 RANI
START
Enables the positioning of the pointer at a specific point in an indexed or relative
file
File should be opened in Input or I-O mode
Access mode must be Sequential or Dynamic
Does not read the record
START file-name
[ KEY IS { EQUAL TO data-name]
=
GREATER THAN
>
NOT LESS THAN
NOT < THAN }
[ INVALID KEY imperative-stmt-1 ]
[ NOT INVALID KEY imperative-stmt-2 ]
[ END-START ]
START - Rules
Invalid Key arises if the record position is empty
When KEY phrase is not specified KEY EQUAL TO primary key is implied
File position indicator points to the first record in the file whose key field satisfies
the comparison
When the KEY phrase is specified, the file position indicator is positioned at the
logical record in the file whose key field satisfies the comparison.
When the KEY phrase is not specified, KEY IS EQUAL (to the prime record key)
is implied.
When the START statement is executed, a comparison is made between the
current value in the key data-name and the corresponding key field in the file's
index.
PROGRAM COLLATING SEQUENCE clause, if specified, has no effect
The file position indicator points to the first record in the file whose key field
satisfies the comparison. If the operands in the comparison are of unequal
lengths, the comparison proceeds as if the longer field were truncated on the right
to the length of the shorter field. All other numeric and nonnumeric comparison
rules apply
START
File- Indexed, Dynamic Access
Record Description:
01 ASSOC-REC
05 ASSOC-NO-KEY PIC 9(4).
05 ASSOC-NAME PIC X(10).
Assoc # Assoc Name
0004 RAJESH
0010 RAMESH
0015 GOPAL
0016 RAGHAVAN
0100 SARITA
0401 RANI
WRITE
WRITE rec-name [FROM id-1]
[ { BEFORE ADVANCING
AFTER }
{ int-1 { LINE
id-2 LINES }
mnemonic-name
PAGE } ]
[AT { END-OF-PAGE stmt-1
EOP }
[NOT AT { END-OF-PAGE stmt-2
EOP } [END-WRITE]
Releases a record onto the output file
ADVANCING phrase is only for Printer Files
When this phrase is specified, the following rules apply:
1. When BEFORE ADVANCING is specified, the line is printed before the page is advanced.
2. When AFTER ADVANCING is specified, the page is advanced before the line is printed.
3. When identifier-2 is specified, the page is advanced the number of lines equal to the
current
value in identifier-2. Identifier-2 must name an elementary integer data item.
File Position is not affected by this statement
When END-OF-PAGE is specified, and the logical end of the printed page is
reached during execution of the WRITE statement, the END-OF-PAGE
imperative-statement is executed
The various 01 levels defined for the same file implicitly redefine each other. That
is they share the same record area. Therefore, in case of Non-Homogeneous
Files the Record Layouts must contain a Record Type Field for identification.
The WRITE statement can only be executed for a sequential file opened in
OUTPUT or EXTEND mode for a sequential file.
WRITE record-name
[ FROM id-1 ]
[ INVALID KEY imperative-stmt-1 ]
[ NOT INVALID KEY
imperative-stmt-2 ]
[ END-WRITE ]
WRITE record-name-1.
REWRITE
REWRITE record-name
[ FROM id-1]
[ INVALID KEY imperative-stmt-1]
[ NOT INVALID KEY
imperative-stmt-2 ]
[ END-REWRITE ]
Updates an existing record in a file
File should be opened in I-O mode
REWRITE - Rules
DELETE - Rules
File should opened for I-O
In sequential access mode, the last input/output statement must have been a
successfully executed READ
o INVALID key not allowed
For Random or Dynamic access system removes record pointed by the RECORD
key (KSDS) or RELATIVE key(RRDS)
SORT
While processing sequential files, it is sometimes necessary that the records
should appear in some predetermined sequence. The process of sequencing
records in file in some predetermined order on some fields is called SORTING
The fields based on which the records are sequenced are called SORT KEYS.
The sequencing can be ascending or descending order of the KEY.
This is a simple sort verb that accepts a input file and creates a sorted output file.
The Sort verb needs a work file for sorting the given input file. Hence this sort
requires 3 files for processing – unsorted input file, works file and sorted output
file.
In the above format file-1 is the work file , file-2 is the unsorted input file, file-3 is
the sorted output file
File-2 and file-3 are defined in the FD section
The work file File-1 is defined in the file section as SD entry sort description entry
The format of SD entry is same as the FD entry
The sort verb opens input, output and the work files before the sorting begins and
closed these files when sorting is over.
Example
Assume the following record description for the input file
FD EMP-FILE.
EMP-REC.
02 ID-NUM PIC 9(6).
02 NAME PIC X(24).
02 DEPARTMENT PIC X(10).
02 BASIC-PAY PIC 9(5)V99.
02 ALLOWANCE PIC 9(4)V99.
02 DEDUCTION PIC 9(4)V99.
We want to sort this file on DEPARTMENT on ascending sequence and then within each
DEPARTMENT, arrange BASIC-PAY on descending sequence. This means that the records
with same DEPARTMENT value are to be arranged from highest to lowest value of the
BASIC-PAY. The work file and output files are SORT-FILE and OUTPUT-FILE. The FD and
SD entries for these files are as follows
SD SORT-FILE
01 SORT-REC.
02 FILLER PIC X(30).
Sometimes its necessary to edit records before sorting or after sorting before writing it to the
output file. Editing in this context can mean selection of appropriate records from the input file
for sorting.
For example, a file with variable length records will require some padding with some
characters to make it fixed length for the purpose of sorting.
The sort verb allows user to specify the INPUT & OUTPUT PROCEDURE in the sort
statement, which perform the necessary processing of the records.
The input and output procedures are nothing but sections placed outside the SORT
statement.
INPUT PROCEDURE:-
The sort statement before the start of the sorting process implicitly performs the specified
input procedure. This procedure reads the records from input file, performs the necessary
processing and then release the records to Sorting operation by RELEASE statement which
is discussed later in this chapter
OUTPUT PROCEDURE:-
The output procedure is performed implicitly by sort statement in order to perform editing on
the sorted records. The output procedure gets the sorted records by means of RETURN
statement that is discussed later in this chapter.
SORT file-1 { ON
{ASCENDING
DESCENDING} KEY id-1... } ...
[WITH DUPLICATES IN ORDER]
[COLLATING SEQUENCE IS alphabet-name-1]
{USING file-2
INPUT PROCEDURE IS
proc-nm-1 [THRU proc-nm-2]}
{GIVING file-3
OUTPUT PROCEDURE IS
proc-nm-3 [THRU proc-nm-4]}
SORT – Examples
SORT sorted-emp-file
ASCENDING s-last-nm
s-first-nm
DESCENDING s-emp-nbr
USING emp-file
OUTPUT PROCEDURE
write-emp-list THRU
write-emp-list-exit
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT EMP-FILE ASSIGN TO EMPMSTR.
SELECT SORTED-EMP-FILE ASSIGN TO EMPSORT.
SELECT EMP-LIST ASSIGN TO REPORT.
DATA DIVISION.
FILE SECTION.
FD EMP-FILE
LABEL RECORDS ARE OMITTED.
01 EMP-REC.
05 EMP-NBR PIC 9(4).
05 LAST-NM PIC X(20).
05 FIRST-NM PIC X(20).
05 MID-NM PIC X(20).
SD SORTED-EMP-FILE
LABEL RECORDS ARE OMITTED.
01 SORT-EMP-REC.
05 S-EMP-NBR PIC 9(4).
05 S-LAST-NM PIC X(20).
05 S-FIRST-NM PIC X(20).
05 S-MID-NM PIC X(20).
PROCEDURE DIVISION.
.....
SORT sorted-emp-file
ASCENDING s-last-nm s-first-nm
DESCENDING s-emp-nbr
USING emp-file
OUTPUT PROCEDURE write-emp-list THRU
write-emp-list-exit
...
WRITE-EMP-LIST.
...
WRITE-EMP-LIST-EXIT.
EXIT.
Collating Sequences
COLLATING SEQUENCE option of the SORT statement that is defined in SPECIAL-
NAMES paragraph
PROGRAM COLLATING SEQUENCE if specified in the Configuration Section
Default is EBCDIC
RELEASE
Transfers records to the initial phase of sort operation
It’s like WRITE statement
RELEASE sort-rec-name-1
[FROM id-1]
If INPUT PROCEDURE is used, at-least one RELEASE stmt must be executed
RELEASE - Examples
MOVE emp-rec TO sort-emp-rec
RELEASE sort-emp-rec
RELEASE sort-emp-rec
FROM emp-rec
RETURN
Transfers records from the final phase of a sorting or merging operation to an
OUTPUT PROCEDURE.
It’s like READ statement
RETURN sort-file-name-1
[RECORD INTO id-1]
[AT END imperative stmt1 ]
[NOT AT END imperative stmt2]
[END-RETURN]
RETURN - Rules
If OUTPUT PROCEDURE is used, at-least one RETURN stmt must be executed
RETURN – Examples
read-sorted-rec.
RETURN sorted-emp-file
AT END
SET c-sort-eof TO TRUE
END-RETURN
.
read-sorted-rec-exit.
EXIT.
WRITE-EMP-LIST.
SET c-not-sort-eof TO TRUE
PERFORM read-sorted-rec
THRU read-sorted-rec-exit
PERFORM UNTIL c-sort-eof
PERFORM string-emp-name
THRU string-emp-name-exit
MOVE w-emp-name TO rep-name
MOVE s-emp-nbr TO rep-emp-nbr
WRITE emp-list-rec
PERFORM read-sorted-rec
THRU read-sorted-rec-exit
END-PERFORM
.
WRITE-EMP-LIST-EXIT.
EXIT.
MERGE
Sometimes it becomes necessary to create a new output file from 2 input files. These 2 files
needs to be merged and new file needs to be created
For example A Company has its marketing operations divided into 2 zones and for each zone
there is file. Each of these files contains zone name, district name, salesman name, product
name and amount of sales for a particular product. The files are sorted on product name. We
need to merge these 2 files into a single file to get a single transaction file to update the
master file.
The MERGE verb is used to merge 2 or more identical files sorted on the same field
MERGE file-1 { ON
{ASCENDING
DESCENDING} KEY id-1... } ...
[COLLATING SEQUENCE IS alphabet-name-1]
USING file-2 [file-3 ...]
{GIVING file-4
OUTPUT PROCEDURE IS
proc-nm-1 [THRU proc-nm-2]}
The input files to be merged through MERGE statement are file-2, file-3. The file-1 is the work
file, which should be defined in the SD entry. The file-2 and file-3 should be sorted on the key
used to merge these 2 files.
MERGE – Examples
MERGE sorted-emp-ph-file
ASCENDING s-last-nm
s-first-nm
DESCENDING s-emp-nbr
USING emp-ph-file
emp-addon-ph-file
GIVING new-emp-ph-file
MERGE – Rules
When USING / GIVING option is specified the input / output file(s) to merge must
not be open
The key used in the MERGE statement cannot be variably located.
When the file referenced by filename-1 is merged control passes to first stmt in
the OUTPUT PROCEDURE.
Collating Sequences:
o COLLATING SEQUENCE option of MERGE statement that is defined in
SPECIAL-NAMES paragraph
o PROGRAM COLLATING SEQUENCE specified in the Configuration Section
o Default is EBCDIC
For example, suppose you are processing a file containing transactions in order to update a
master file:
PERFORM UNTIL TRANSACTION-EOF = "TRUE"
READ UPDATE-TRANSACTION-FILE INTO WS-TRANSACTION-RECORD
AT END
DISPLAY "END OF TRANSACTION UPDATE FILE REACHED"
MOVE "TRUE" TO TRANSACTION-EOF
END READ
.
.
.
END-PERFORM
In some cases, however, the condition will reflect an error. You code the AT END phrase of
the READ statement to handle either case, according to your program design.
If you code an AT END phrase, upon end-of-file the phrase is executed. If you do not code
an AT END phrase, the associated ERROR declarative is executed. Following an AT END
condition, the contents of the associated record area are undefined, and attempts to move
data to or from the associated record may result in a protection exception.
EXCEPTION/ERROR Declarative
You can code one or more ERROR declarative procedures in your program that will be given
control if an input/output error occurs. You can have:
a) INVALID KEY phrases operate for only limited types of errors, whereas the ERROR
declarative encompasses all forms.
b) INVALID KEY phrases are coded directly onto the input/output verb, whereas
ERROR declaratives are coded separately.
c) INVALID KEY phrases are specific for one single input/output operation, whereas
ERROR declaratives are more general.
If you specify INVALID KEY in a statement that causes an INVALID KEY condition, control is
transferred to the INVALID KEY imperative statement. In this case, any ERROR declaratives
you have coded are not executed.
Appendix 1
FILE STATUS CODES AND MEANING
2 char code
o Status key 1
o Status key 2
Status key 1 tells the type of error
Status key 2 gives the detail
Status key 1
0 Successful Completion
1 At end condition
2 Invalid key condition
3 Permanent error condition
4 Logic error
9 Implementor defined (VSAM)
Successful Completion-0
0 No further info
1 Duplicate - Read, (Re) Write
2 Length error for Fixed files
5 Optional file not present
At end condition-1
0 End of file
4 Relative key > max possible
Invalid Key-2
1 Ascending key violation/Rewrite change primary Key
2 Duplicate key when not allowed (Primary, Alternate or relative key)
3 Record not found
4 Write beyond boundary
Permanent error-3
0 no further info
4 Due to boundary violation
5 File not available (ddname not found/defined)
7 Invalid open mode on open
8 Open of file closed with lock
9 DCB conflict during open
Logic error-4
1 Open of file in open status
2 Close of file not in open stat
REFERENCES
WEBSITES
http://homepage.ntlworld.com/zingmatter/zingcobol/index.html
http://www.techtutorials.info/cobol.html
http://www.techiwarehouse.com/Cobol/Cobol_Tutorial.html
BOOKS
STUDENT NOTES: