📜 COBOL Fundamentals & Legacy Power

🎯 What is COBOL?

COBOL (Common Business-Oriented Language) is one of the oldest high-level programming languages, designed in 1959 by the CODASYL consortium. It was created for business, finance, and administrative systems. COBOL is self-documenting, English-like, and excels at batch processing and transaction handling. Today, over 95% of ATM transactions, 80% of in-person credit card swipes, and 43% of banking systems run on COBOL. It handles 220 billion lines of production code globally.

🔬 Key Characteristics

  • Verbose & Readable: Syntax mimics English (ADD, SUBTRACT, MOVE, IF)
  • Division Structure: IDENTIFICATION, ENVIRONMENT, DATA, PROCEDURE divisions.
  • Fixed Format (traditional): Area A (col 8-11) and Area B (col 12-72).
  • Strong Data Typing: PICTURE clauses define exact decimal/memory layout.
  • Record-Oriented I/O: Native file processing (sequential, indexed, relative).
  • Decimal Arithmetic: COBOL uses packed-decimal (COMP-3) for precise financial math.

🏢 Where COBOL Dominates

Banking core systems, insurance claims, government systems (Social Security, IRS), airline reservation systems, and mainframe transaction processors (CICS, IMS).

IDENTIFICATION DIVISION. PROGRAM-ID. HELLO-WORLD. PROCEDURE DIVISION. DISPLAY "COBOL: Enterprise Grade Since 1959". STOP RUN.

📋 The 4 DIVISIONS Structure

🎯 IDENTIFICATION DIVISION

Program metadata: PROGRAM-ID, AUTHOR, DATE-WRITTEN. Essential for compiler recognition.

📌 ENVIRONMENT DIVISION

Specifies hardware/software environment: CONFIGURATION SECTION, INPUT-OUTPUT SECTION (file assignment).

🗃️ DATA DIVISION

Declares variables: WORKING-STORAGE (local vars), LINKAGE (parameters), FILE SECTION (record structures).

⚙️ PROCEDURE DIVISION

Executable logic: paragraphs, sentences, statements, and PERFORM loops.

IDENTIFICATION DIVISION. PROGRAM-ID. BANK-TRANS. AUTHOR. CODEORBIT. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT TRANS-FILE ASSIGN TO "TRANS.DAT". DATA DIVISION. FILE SECTION. FD TRANS-FILE. 01 TRANS-RECORD. 05 TRANS-ID PIC X(10). 05 TRANS-AMT PIC 9(8)V99. WORKING-STORAGE SECTION. 01 WS-STATUS PIC X VALUE 'Y'. PROCEDURE DIVISION. MAIN-PROCESS. DISPLAY "Processing Transaction". STOP RUN.

🔢 Picture Clauses & Data Types

🎯 PICTURE (PIC) Definition

PIC defines data format: 9 (numeric), X (alphanumeric), A (alphabetic), S (sign), V (implied decimal). Example: PIC 9(5)V99 = 5 digits, 2 decimal places.

📊 Usage Clauses

  • COMP-3: Packed-decimal for arithmetic.
  • BINARY/COMP: Binary representation.
  • DISPLAY: Default human-readable.
  • OCCURS: Table definition.
01 CUSTOMER-RECORD. 05 CUST-ID PIC 9(9) VALUE ZERO. 05 CUST-NAME PIC X(30). 05 CUST-BALANCE PIC S9(7)V99 COMP-3. 05 CUST-ACTIVE PIC X VALUE 'Y'. 05 FILLER PIC X(50).

📦 Working-Storage & Variable Scope

🎯 WORKING-STORAGE SECTION

Defines local variables, constants, and intermediate fields. Level numbers (01-49) indicate hierarchy. 88-level condition names define boolean conditions.

WORKING-STORAGE SECTION. 01 WS-COUNTER PIC 9(4) VALUE 0. 01 WS-TOTAL PIC 9(8)V99 VALUE 0. 01 WS-FLAG PIC X. 88 WS-VALID VALUE 'Y'. 88 WS-INVALID VALUE 'N'. 01 WS-CUSTOMERS. 05 WS-CUST OCCURS 100 TIMES. 10 WS-CUST-ID PIC X(10). 10 WS-CUST-BAL PIC 9(8)V99.

🧮 Arithmetic & COMPUTE

🎯 COBOL Arithmetic Verbs

ADD, SUBTRACT, MULTIPLY, DIVIDE, COMPUTE. COMPUTE is most flexible using mathematical operators (+, -, *, /). ROUNDED, ON SIZE ERROR clauses.

ADD 100 TO WS-TOTAL. SUBTRACT TAX FROM GROSS. MULTIPLY QTY BY PRICE GIVING WS-COST. DIVIDE TOTAL BY COUNT GIVING AVG REMAINDER REM. COMPUTE WS-INTEREST = PRINCIPAL * RATE * YEARS. COMPUTE WS-FINAL ROUNDED = (A + B) / C.

🔀 IF / ELSE / EVALUATE

🎯 IF ... ELSE ... END-IF

Supports relational operators: =, >, <, >=, <=, NOT. Also EVALUATE (like switch) for multi-branch logic.

IF WS-AMOUNT > 1000 DISPLAY "Large Transaction" ADD 1 TO WS-LARGE-COUNT ELSE DISPLAY "Standard Transaction" END-IF. EVALUATE WS-STATUS WHEN 'A' PERFORM PROCESS-ACTIVE WHEN 'I' PERFORM PROCESS-INACTIVE WHEN OTHER PERFORM ERROR-ROUTINE END-EVALUATE.

🔄 PERFORM Loops & Iteration

🎯 PERFORM Statement Variants

PERFORM VARYING (FOR loop), PERFORM UNTIL, PERFORM TIMES, and in-line PERFORM. Supports nested loops and EXIT PERFORM.

PERFORM VARYING I FROM 1 BY 1 UNTIL I > 10 DISPLAY "Iteration " I END-PERFORM. PERFORM UNTIL WS-EOF READ TRANS-FILE AT END MOVE 'Y' TO WS-EOF NOT AT END ADD 1 TO WS-COUNT END-PERFORM. PERFORM 100 TIMES ADD 1 TO WS-LOOP-COUNT END-PERFORM.

📊 Tables (Arrays) & OCCURS

🎯 OCCURS Clause

Defines arrays/tables. OCCURS DEPENDING ON (ODO) for variable-length tables. Can be 1D or 2D.

01 WS-TABLE. 05 WS-ENTRY OCCURS 1 TO 50 TIMES DEPENDING ON WS-ENTRY-COUNT. 10 WS-CODE PIC X(5). 10 WS-VALUE PIC 9(8). PERFORM VARYING IDX FROM 1 BY 1 UNTIL IDX > WS-ENTRY-COUNT MOVE WS-CODE(IDX) TO OUTPUT-CODE END-PERFORM.

💾 File Handling (Sequential/Indexed)

🎯 Sequential, Relative, Indexed Files

COBOL file verbs: OPEN, READ, WRITE, REWRITE, DELETE, CLOSE. File organization: SEQUENTIAL, RELATIVE, INDEXED. FILE STATUS for error checking.

ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT MASTER-FILE ASSIGN TO "MASTER.DAT" ORGANIZATION IS INDEXED ACCESS IS RANDOM RECORD KEY IS MF-ID. PROCEDURE DIVISION. OPEN I-O MASTER-FILE. MOVE "CUST001" TO MF-ID. READ MASTER-FILE INVALID KEY DISPLAY "Record not found" NOT INVALID KEY DISPLAY MF-NAME END-READ. CLOSE MASTER-FILE.

📝 STRING, UNSTRING & INSPECT

🎯 Powerful String Operations

STRING concatenates, UNSTRING splits, INSPECT counts/replaces characters. Essential for report generation and data parsing.

STRING "Customer: " CUST-NAME " Balance: " CUST-BAL DELIMITED BY SIZE INTO WS-OUTPUT. UNSTRING WS-DATA DELIMITED BY "," INTO WS-FIELD1 WS-FIELD2 WS-FIELD3. INSPECT WS-TEXT REPLACING ALL ' ' BY '-'. INSPECT WS-STRING TALLYING WS-COUNT FOR CHARACTERS.

🔌 Subprograms & CALL

🎯 Modular Programming

CALL statement invokes subprograms. Linkage Section defines parameters. USING BY CONTENT / BY REFERENCE controls data passing. CANCEL releases subprogram.

CALL "TAX-CALC" USING BY CONTENT WS-GROSS BY REFERENCE WS-TAX. *> Subprogram: TAX-CALC LINKAGE SECTION. 01 LS-GROSS PIC 9(8)V99. 01 LS-TAX PIC 9(8)V99. PROCEDURE DIVISION USING LS-GROSS LS-TAX. COMPUTE LS-TAX = LS-GROSS * 0.2. GOBACK.

⚙️ SORT/MERGE & Report Writer

🎯 High-Performance Sorting

COBOL has built-in SORT and MERGE verbs for large datasets. INPUT PROCEDURE / OUTPUT PROCEDURE for custom processing. Report Writer (RW) simplifies formatted reports.

SORT WORK-FILE ON ASCENDING KEY SORT-KEY USING INPUT-FILE GIVING OUTPUT-FILE. *> Using procedures SORT WORK-FILE ON DESCENDING KEY SORT-AMT INPUT PROCEDURE IS PRE-SORT OUTPUT PROCEDURE IS POST-SORT.

🛡️ Exception Handling & Declaratives

🎯 DECLARATIVES & USE Statements

Declaratives section handles file errors, exceptions, and debugging. USE AFTER EXCEPTION traps file I/O errors. Also ON EXCEPTION clause for arithmetic.

DECLARATIVES. FILE-ERROR SECTION. USE AFTER EXCEPTION PROCEDURE ON INPUT-FILE. DISPLAY "FILE ERROR: " FILE-STATUS. END DECLARATIVES. PROCEDURE DIVISION. COMPUTE WS-RESULT = A / B ON SIZE ERROR MOVE 0 TO WS-RESULT DISPLAY "Division error" END-COMPUTE.

🚀 Modern COBOL & Integration

🎯 COBOL 2023+ Features

Modern COBOL supports: XML/JSON generation and parsing, dynamic memory allocation (ALLOCATE), object-oriented COBOL (classes, methods, inheritance), and integration with Java/.NET (JNI, Managed COBOL).

🔌 Interoperability

  • CICS (Transaction Server) for online processing
  • IMS DB/DC hierarchical databases
  • DB2 SQL embedded statements (EXEC SQL)
  • RESTful APIs via JSON and HTTP
  • Containers (z/OS Container Extensions) & DevOps
*> Embedded SQL in COBOL EXEC SQL SELECT BALANCE INTO :WS-BALANCE FROM ACCOUNTS WHERE ACCOUNT-ID = :WS-ACCT-ID END-EXEC. *> OO COBOL syntax CLASS-ID. EMPLOYEE. METHOD-ID. CALCULATE-PAY. ... END METHOD. END CLASS. *> JSON generation (modern compilers) JSON GENERATE WS-JSON FROM WS-CUSTOMER.