Here's a concise overview of COBOL basics, tailored especially for IBM i (AS/400) environments.
๐งฑ COBOL Basics Overview
COBOL (Common Business Oriented Language) is a high-level programming language designed for business applications, with readable syntax and strong file-handling capabilities.
๐ Structure of a COBOL Program
A COBOL program is divided into four main divisions:
1. IDENTIFICATION DIVISION
Specifies the program name.
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLOCOBOL.
2. ENVIRONMENT DIVISION
Defines the environment, such as files and systems.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT IN-FILE ASSIGN TO 'MYDATA.FILE'.
3. DATA DIVISION
Declares all variables and data structures.
DATA DIVISION.
FILE SECTION.
FD IN-FILE.
01 IN-RECORD.
05 CUSTOMER-ID PIC 9(5).
05 CUSTOMER-NAME PIC X(30).
WORKING-STORAGE SECTION.
01 WS-MESSAGE PIC X(50) VALUE "Hello from COBOL".
4. PROCEDURE DIVISION
Contains the executable logic.
PROCEDURE DIVISION.
DISPLAY WS-MESSAGE.
STOP RUN.
๐ ๏ธ Key Concepts
Concept | Description |
---|---|
PIC (Picture) | Defines data format: 9 for numeric, X for char |
FD / 01 | File descriptor / Record structure |
WORKING-STORAGE | Temporary memory (variables, flags, counters) |
PERFORM | Used like a loop or function call |
IF / EVALUATE | Conditional logic (like IF or CASE ) |
๐งพ Simple Example: Read File and Display
IDENTIFICATION DIVISION.
PROGRAM-ID. READFILE.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT IN-FILE ASSIGN TO 'MYFILE.FILE'
ORGANIZATION IS LINE SEQUENTIAL.
DATA DIVISION.
FILE SECTION.
FD IN-FILE.
01 IN-RECORD.
05 CUST-ID PIC 9(5).
05 CUST-NAME PIC X(30).
WORKING-STORAGE SECTION.
01 EOF-FLAG PIC X VALUE 'N'.
PROCEDURE DIVISION.
OPEN INPUT IN-FILE
PERFORM UNTIL EOF-FLAG = 'Y'
READ IN-FILE
AT END
MOVE 'Y' TO EOF-FLAG
NOT AT END
DISPLAY CUST-ID CUST-NAME
END-READ
END-PERFORM
CLOSE IN-FILE
STOP RUN.
๐ง COBOL on IBM i (AS/400)
-
COBOL on IBM i can be ILE COBOL (Integrated Language Environment)
-
Uses DDS files, display files, CL programs, etc.
-
You can call COBOL from CL, RPG, or expose it via web services
-
File names often refer to physical files (e.g.,
MYLIB/MYFILE
)
Great — here's a sample COBOL program that reads from a DB2 table using embedded SQL, specifically on IBM i (AS/400).
๐งพ COBOL Program with Embedded SQL (Read from Table)
๐ฏ Objective:
Read customer records from a DB2 table named CUSTOMERS
, and display CUSTOMER_ID
and CUSTOMER_NAME
.
๐ Sample Program: READSQLCBL
IDENTIFICATION DIVISION.
PROGRAM-ID. READSQLCBL.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
DATA DIVISION.
WORKING-STORAGE SECTION.
EXEC SQL INCLUDE SQLCA END-EXEC.
01 WS-CUST-ID PIC 9(5).
01 WS-CUST-NAME PIC X(30).
EXEC SQL
DECLARE C1 CURSOR FOR
SELECT CUSTOMER_ID, CUSTOMER_NAME
FROM CUSTOMERS
END-EXEC.
PROCEDURE DIVISION.
MAIN-LOGIC.
EXEC SQL
CONNECT TO CURRENT
END-EXEC
EXEC SQL
OPEN C1
END-EXEC
PERFORM UNTIL SQLCODE NOT = 0
EXEC SQL
FETCH C1 INTO :WS-CUST-ID, :WS-CUST-NAME
END-EXEC
IF SQLCODE = 0
DISPLAY "CUSTOMER ID: " WS-CUST-ID
DISPLAY "CUSTOMER NAME: " WS-CUST-NAME
END-IF
END-PERFORM
EXEC SQL
CLOSE C1
END-EXEC
EXEC SQL
COMMIT
END-EXEC
STOP RUN.
โ Key Points
Section | Purpose |
---|---|
EXEC SQL INCLUDE SQLCA |
Includes SQL Communication Area (for SQLCODE , etc.) |
DECLARE C1 CURSOR FOR ... |
Declares a SQL cursor for selecting data |
FETCH ... INTO :host-vars |
Moves DB2 data into COBOL working-storage |
SQLCODE |
Indicates result of last SQL operation (0 = success) |
๐ ๏ธ Compile & Bind Notes on IBM i
-
Precompile using
CRTSQLCBL
orCRTSQLCBLI
commandCRTSQLCBLI OBJ(MYLIB/READSQLCBL) SRCFILE(MYLIB/QCBLSRC) COMMIT(*NONE)
-
Ensure your DB2 table
CUSTOMERS
exists and has:-
CUSTOMER_ID
as numeric -
CUSTOMER_NAME
as character
-