COBOL - Hướng dẫn nhanh

Giới thiệu về COBOL

COBOL là một ngôn ngữ cấp cao. Người ta phải hiểu cách hoạt động của COBOL. Máy tính chỉ hiểu mã máy, một dòng nhị phân 0s và 1s. Mã COBOL phải được chuyển đổi thành mã máy bằng cách sử dụngcompiler. Chạy nguồn chương trình thông qua trình biên dịch. Đầu tiên, trình biên dịch sẽ kiểm tra bất kỳ lỗi cú pháp nào và sau đó chuyển nó thành ngôn ngữ máy. Trình biên dịch tạo một tệp đầu ra được gọi làload module. Tệp đầu ra này chứa mã thực thi ở dạng 0s và 1s.

Sự phát triển của COBOL

Trong những năm 1950, khi các doanh nghiệp đang phát triển ở phía Tây của thế giới, nhu cầu tự động hóa các quy trình khác nhau để dễ vận hành và điều này đã sinh ra một ngôn ngữ lập trình cấp cao dành cho việc xử lý dữ liệu kinh doanh.

  • Năm 1959, COBOL được phát triển bởi CODASYL (Hội nghị về Ngôn ngữ Hệ thống Dữ liệu).

  • Phiên bản tiếp theo, COBOL-61, được phát hành vào năm 1961 với một số sửa đổi.

  • Năm 1968, COBOL đã được ANSI phê duyệt như một ngôn ngữ tiêu chuẩn để sử dụng thương mại (COBOL-68).

  • Nó một lần nữa được sửa đổi vào năm 1974 và 1985 để phát triển các phiên bản tiếp theo có tên lần lượt là COBOL-74 và COBOL-85.

  • Năm 2002, Object-Oriented COBOL được phát hành, có thể sử dụng các đối tượng được đóng gói như một phần bình thường của lập trình COBOL.

Tầm quan trọng của COBOL

  • COBOL là ngôn ngữ lập trình cấp cao đầu tiên được sử dụng rộng rãi. Nó là một ngôn ngữ giống như tiếng Anh, thân thiện với người dùng. Tất cả các hướng dẫn có thể được mã hóa bằng những từ tiếng Anh đơn giản.

  • COBOL cũng được sử dụng như một ngôn ngữ tự lập tài liệu.

  • COBOL có thể xử lý dữ liệu khổng lồ.

  • COBOL tương thích với các phiên bản trước của nó.

  • COBOL có thông báo lỗi hiệu quả và do đó, việc giải quyết lỗi dễ dàng hơn.

Đặc điểm của COBOL

Ngôn ngữ chuẩn

COBOL là một ngôn ngữ tiêu chuẩn có thể được biên dịch và thực thi trên các máy như IBM AS / 400, máy tính cá nhân, v.v.

Định hướng kinh doanh

COBOL được thiết kế cho các ứng dụng định hướng kinh doanh liên quan đến miền tài chính, miền quốc phòng, v.v. Nó có thể xử lý khối lượng dữ liệu khổng lồ nhờ khả năng xử lý tệp nâng cao.

Ngôn ngữ mạnh mẽ

COBOL là một ngôn ngữ mạnh mẽ vì rất nhiều công cụ kiểm tra và gỡ lỗi của nó có sẵn cho hầu hết các nền tảng máy tính.

Ngôn ngữ có cấu trúc

Các cấu trúc điều khiển logic có sẵn trong COBOL giúp dễ đọc và sửa đổi hơn. COBOL có các phân chia khác nhau nên rất dễ gỡ lỗi.

Cài đặt COBOL trên Windows / Linux

Có rất nhiều Trình mô phỏng máy tính lớn miễn phí có sẵn cho Windows có thể được sử dụng để viết và học các chương trình COBOL đơn giản.

Một trong những trình giả lập như vậy là Hercules, có thể dễ dàng cài đặt trên Windows bằng cách làm theo một số bước đơn giản như dưới đây:

  • Tải xuống và cài đặt trình giả lập Hercules, có sẵn từ trang chủ của Hercules: www.hercules-390.eu

  • Khi bạn đã cài đặt gói trên máy Windows, nó sẽ tạo một thư mục như C:/hercules/mvs/cobol.

  • Chạy Command Prompt (CMD) và truy cập thư mục C: / hercules / mvs / cobol trên CMD.

  • Có thể tìm thấy hướng dẫn đầy đủ về các lệnh khác nhau để viết và thực thi một chương trình JCL và COBOL tại:

    www.jaymoseley.com/hercules/installmvs/instmvs2.htm

Hercules là một phần mềm mã nguồn mở triển khai các kiến ​​trúc Hệ thống / 370 và ESA / 390 của máy tính lớn, bên cạnh Kiến trúc z / 64-bit mới nhất. Hercules chạy trên Linux, Windows, Solaris, FreeBSD và Mac OS X.

Người dùng có thể kết nối với máy chủ mainframe theo một số cách như máy khách mỏng, thiết bị đầu cuối giả, Hệ thống máy khách ảo (VCS) hoặc Hệ thống máy tính để bàn ảo (VDS). Mỗi người dùng hợp lệ được cấp một id đăng nhập để vào giao diện Z / OS (TSO / E hoặc ISPF).

Biên soạn các chương trình COBOL

Để thực thi chương trình COBOL ở chế độ hàng loạt sử dụng JCL, chương trình cần được biên dịch và mô-đun tải được tạo với tất cả các chương trình con. JCL sử dụng mô-đun tải chứ không phải chương trình thực tại thời điểm thực thi. Các thư viện tải được nối và cấp cho JCL tại thời điểm thực thi bằng cách sử dụngJCLLIB hoặc là STEPLIB.

Có nhiều tiện ích trình biên dịch máy tính lớn có sẵn để biên dịch chương trình COBOL. Một số công ty doanh nghiệp sử dụng các công cụ Quản lý Thay đổi nhưEndevor, biên dịch và lưu trữ mọi phiên bản của chương trình. Điều này rất hữu ích trong việc theo dõi các thay đổi được thực hiện đối với chương trình.

//COMPILE   JOB ,CLASS = 6,MSGCLASS = X,NOTIFY = &SYSUID             
//*            
//STEP1     EXEC IGYCRCTL,PARM = RMODE,DYNAM,SSRANGE
//SYSIN     DD DSN = MYDATA.URMI.SOURCES(MYCOBB),DISP = SHR
//SYSLIB    DD DSN = MYDATA.URMI.COPYBOOK(MYCOPY),DISP = SHR
//SYSLMOD   DD DSN = MYDATA.URMI.LOAD(MYCOBB),DISP = SHR
//SYSPRINT  DD SYSOUT=*
//*

IGYCRCTL là một tiện ích trình biên dịch COBOL của IBM. Các tùy chọn trình biên dịch được chuyển bằng cách sử dụng tham số PARM. Trong ví dụ trên, RMODE hướng dẫn trình biên dịch sử dụng chế độ định địa chỉ tương đối trong chương trình. Chương trình COBOL được truyền bằng cách sử dụng tham số SYSIN. Copybook là thư viện được chương trình sử dụng trong SYSLIB.

Thực thi các chương trình COBOL

Dưới đây là một ví dụ JCL trong đó chương trình MYPROG được thực thi bằng cách sử dụng tệp đầu vào MYDATA.URMI.INPUT và tạo ra hai tệp đầu ra được ghi vào ống đệm.

//COBBSTEP  JOB CLASS = 6,NOTIFY = &SYSUID
//
//STEP10    EXEC PGM = MYPROG,PARM = ACCT5000
//STEPLIB   DD DSN = MYDATA.URMI.LOADLIB,DISP = SHR
//INPUT1    DD DSN = MYDATA.URMI.INPUT,DISP = SHR
//OUT1      DD SYSOUT=*
//OUT2      DD SYSOUT=*
//SYSIN     DD *
//CUST1     1000
//CUST2     1001
/*

Mô-đun tải của MYPROG nằm trong MYDATA.URMI.LOADLIB. Điều quan trọng cần lưu ý là JCL ở trên chỉ có thể được sử dụng cho một mô-đun COBOL không phải DB2.

Thực thi các chương trình COBOL-DB2

Để chạy chương trình COBOL-DB2, một tiện ích IBM chuyên biệt được sử dụng trong JCL và chương trình; Vùng DB2 và các tham số bắt buộc được chuyển làm đầu vào cho tiện ích.

Các bước tiếp theo khi chạy chương trình COBOL-DB2 như sau:

  • Khi chương trình COBOL-DB2 được biên dịch, một DBRM (Mô-đun yêu cầu cơ sở dữ liệu) được tạo cùng với mô-đun tải. DBRM chứa các câu lệnh SQL của chương trình COBOL với cú pháp của nó được kiểm tra là đúng.

  • DBRM được liên kết với vùng DB2 (môi trường) mà COBOL sẽ chạy. Điều này có thể được thực hiện bằng cách sử dụng tiện ích IKJEFT01 trong JCL.

  • Sau bước liên kết, chương trình COBOL-DB2 được chạy bằng IKJEFT01 (một lần nữa) với thư viện tải và thư viện DBRM làm đầu vào cho JCL.

//STEP001  EXEC PGM = IKJEFT01
//*
//STEPLIB  DD DSN = MYDATA.URMI.DBRMLIB,DISP = SHR
//*
//input files
//output files
//SYSPRINT DD SYSOUT=*
//SYSABOUT DD SYSOUT=*
//SYSDBOUT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//DISPLAY  DD SYSOUT=*
//SYSOUT   DD SYSOUT=*
//SYSTSPRT DD SYSOUT=*
//SYSTSIN  DD *
   DSN SYSTEM(SSID)
   RUN PROGRAM(MYCOBB) PLAN(PLANNAME) PARM(parameters to cobol program) -
   LIB('MYDATA.URMI.LOADLIB')
   END
/*

Trong ví dụ trên, MYCOBB là chương trình COBOL-DB2 chạy bằng IKJEFT01. Xin lưu ý rằng tên chương trình, Id hệ thống con DB2 (SSID) và tên gói DB2 được chuyển trong câu lệnh SYSTSIN DD. Thư viện DBRM được chỉ định trong STEPLIB.

Cấu trúc chương trình COBOL bao gồm các phần như thể hiện trong hình sau:

Dưới đây là phần giới thiệu ngắn gọn về các bộ phận này:

  • Sectionslà các phân khu hợp lý của logic chương trình. Một phần là một tập hợp các đoạn văn.

  • Paragraphslà sự chia nhỏ của một phần hoặc bộ phận. Nó là tên do người dùng xác định hoặc được xác định trước, theo sau là dấu chấm và bao gồm không hoặc nhiều câu / mục nhập.

  • Sentenceslà sự kết hợp của một hoặc nhiều câu lệnh. Các câu chỉ xuất hiện trong phân chia Thủ tục. Một câu phải kết thúc bằng dấu chấm.

  • Statements là các câu lệnh COBOL có ý nghĩa thực hiện một số xử lý.

  • Characters là thấp nhất trong hệ thống phân cấp và không thể chia được.

Bạn có thể đồng liên hệ các thuật ngữ nêu trên với chương trình COBOL trong ví dụ sau:

PROCEDURE DIVISION.
A0000-FIRST-PARA SECTION.
FIRST-PARAGRAPH.
ACCEPT WS-ID            - Statement-1  -----|
MOVE '10' TO WS-ID      - Statement-2       |-- Sentence - 1
DISPLAY WS-ID           - Statement-3  -----|
.

Phân khu

Một chương trình COBOL bao gồm bốn phần.

Bộ phận nhận dạng

Đây là bộ phận bắt buộc đầu tiên và duy nhất của mọi chương trình COBOL. Lập trình viên và trình biên dịch sử dụng bộ phận này để xác định chương trình. Trong phần này, PROGRAM-ID là đoạn bắt buộc duy nhất. PROGRAM-ID chỉ định tên chương trình có thể bao gồm 1 đến 30 ký tự.

Hãy thử ví dụ sau bằng cách sử dụng Live Demo tùy chọn trực tuyến.

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
PROCEDURE DIVISION.
DISPLAY 'Welcome to Tutorialspoint'.
STOP RUN.

Dưới đây là JCL để thực hiện chương trình COBOL trên.

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO

Khi bạn biên dịch và thực thi chương trình trên, nó tạo ra kết quả sau:

Welcome to Tutorialspoint

Phòng Môi trường

Phân chia môi trường được sử dụng để chỉ định các tệp đầu vào và đầu ra cho chương trình. Nó bao gồm hai phần -

  • Configuration sectioncung cấp thông tin về hệ thống mà chương trình được viết và thực thi. Nó bao gồm hai đoạn văn -

    • Máy tính nguồn - Hệ thống dùng để biên dịch chương trình.

    • Máy tính đối tượng - Hệ thống dùng để thực thi chương trình.

  • Input-Output sectioncung cấp thông tin về các tệp sẽ được sử dụng trong chương trình. Nó bao gồm hai đoạn văn -

    • Kiểm soát tập tin - Cung cấp thông tin của các tập dữ liệu bên ngoài được sử dụng trong chương trình.

    • Điều khiển IO - Cung cấp thông tin của các tệp được sử dụng trong chương trình.

ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
   SOURCE-COMPUTER. XXX-ZOS.
   OBJECT-COMPUTER. XXX-ZOS.

INPUT-OUTPUT SECTION.
   FILE-CONTROL.
   SELECT FILEN ASSIGN TO DDNAME
   ORGANIZATION IS SEQUENTIAL.

Bộ phận dữ liệu

Phân chia dữ liệu được sử dụng để xác định các biến được sử dụng trong chương trình. Nó bao gồm bốn phần -

  • File section được sử dụng để xác định cấu trúc bản ghi của tệp.

  • Working-Storage section được sử dụng để khai báo các biến tạm thời và cấu trúc tệp được sử dụng trong chương trình.

  • Local-Storage sectiontương tự như phần Làm việc-Lưu trữ. Sự khác biệt duy nhất là các biến sẽ được cấp phát và khởi tạo mỗi khi một chương trình bắt đầu thực thi.

  • Linkage section được sử dụng để mô tả tên dữ liệu nhận được từ một chương trình bên ngoài.

COBOL Program

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

ENVIRONMENT DIVISION.
   INPUT-OUTPUT SECTION.
   FILE-CONTROL.
   SELECT FILEN ASSIGN TO INPUT.
      ORGANIZATION IS SEQUENTIAL.
      ACCESS IS SEQUENTIAL.

DATA DIVISION.
   FILE SECTION.
   FD FILEN
   01 NAME PIC A(25).
   
   WORKING-STORAGE SECTION.
   01 WS-STUDENT PIC A(30).
   01 WS-ID PIC 9(5).

   LOCAL-STORAGE SECTION.
   01 LS-CLASS PIC 9(3).
   
   LINKAGE SECTION.
   01 LS-ID PIC 9(5).
   
PROCEDURE DIVISION.
   DISPLAY 'Executing COBOL program using JCL'.
STOP RUN.

Các JCL để thực hiện chương trình COBOL ở trên như sau:

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
//INPUT DD DSN = ABC.EFG.XYZ,DISP = SHR

Khi bạn biên dịch và thực thi chương trình trên, nó tạo ra kết quả sau:

Executing COBOL program using JCL

Bộ phận thủ tục

Phân chia thủ tục được sử dụng để bao gồm logic của chương trình. Nó bao gồm các câu lệnh thực thi bằng cách sử dụng các biến được xác định trong phân chia dữ liệu. Trong cách phân chia này, tên đoạn và phần do người dùng định nghĩa.

Phải có ít nhất một câu lệnh trong phân chia thủ tục. Câu lệnh cuối cùng để kết thúc quá trình thực thi trong bộ phận này làSTOP RUN được sử dụng trong các chương trình gọi điện hoặc EXIT PROGRAM được sử dụng trong các chương trình được gọi.

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-NAME PIC A(30).
   01 WS-ID PIC 9(5) VALUE 12345.

PROCEDURE DIVISION.
   A000-FIRST-PARA.
   DISPLAY 'Hello World'.
   MOVE 'TutorialsPoint' TO WS-NAME.
   DISPLAY "My name is : "WS-NAME.
   DISPLAY "My ID is : "WS-ID.
STOP RUN.

JCL để thực hiện chương trình COBOL ở trên -

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO

Khi bạn biên dịch và thực thi chương trình trên, nó tạo ra kết quả sau:

Hello World
My name is : TutorialsPoint
My ID is : 12345

Bộ ký tự

'Các nhân vật' là thấp nhất trong hệ thống phân cấp và chúng không thể được phân chia thêm. Bộ ký tự COBOL bao gồm 78 ký tự được hiển thị bên dưới -

Sr.No. Nhân vật & Mô tả
1

A-Z

Bảng chữ cái (Chữ hoa)

2

a-z

Bảng chữ cái (Chữ thường)

3

0-9

Số

4

 

Không gian

5

+

Dấu cộng

6

-

Dấu trừ hoặc Dấu gạch nối

7

*

Dấu hoa thị

số 8

/

Dấu gạch chéo

9

$

Ký hiệu tiền tệ

10

,

Dấu phẩy

11

;

Dấu chấm phẩy

12

.

Dấu chấm hoặc dấu chấm thập phân

13

"

Dấu ngoặc kép

14

(

Dấu ngoặc đơn trái

15

)

Dấu ngoặc phải

16

>

Lớn hơn

17

<

Ít hơn

18

:

Đại tràng

19

'

Apostrophe

20

=

Dấu bằng

Bảng mã hóa

Chương trình nguồn của COBOL phải được viết ở định dạng được trình biên dịch chấp nhận. Các chương trình COBOL được viết trên các bảng mã COBOL. Có 80 vị trí ký tự trên mỗi dòng của bảng mã.

Vị trí ký tự được nhóm thành năm trường sau:

Vị trí Cánh đồng Sự miêu tả
1-6 Số cột Dành riêng cho số dòng.
7 Chỉ báo Nó có thể có Dấu hoa thị (*) biểu thị nhận xét, Dấu gạch nối (-) biểu thị sự tiếp tục và Dấu gạch chéo (/) biểu thị nguồn cấp dữ liệu biểu mẫu.
8-11 Khu A Tất cả các phần, phần, đoạn văn và một số mục đặc biệt của COBOL phải bắt đầu ở Khu vực A.
12-72 Khu B Tất cả các câu lệnh COBOL phải bắt đầu trong vùng B.
73-80 Khu vực nhận dạng Nó có thể được sử dụng khi cần thiết bởi lập trình viên.

Thí dụ

Ví dụ sau đây cho thấy một bảng mã COBOL:

000100 IDENTIFICATION DIVISION.                                         000100
000200 PROGRAM-ID. HELLO.                                               000101
000250* THIS IS A COMMENT LINE                                          000102
000300 PROCEDURE DIVISION.                                              000103
000350 A000-FIRST-PARA.                                                 000104
000400     DISPLAY “Coding Sheet”.                                      000105
000500 STOP RUN.                                                        000106

JCL để thực hiện chương trình COBOL ở trên -

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO

Khi bạn biên dịch và thực thi chương trình trên, nó tạo ra kết quả sau:

Coding Sheet

Chuỗi ký tự

Chuỗi ký tự được hình thành bằng cách kết hợp các ký tự riêng lẻ. Một chuỗi ký tự có thể là một

  • Comment,
  • Nghĩa đen, hoặc
  • Từ COBOL.

Tất cả các chuỗi ký tự phải được kết thúc bằng separators. Dấu phân tách được sử dụng để phân tách các chuỗi ký tự.

Các dấu phân cách thường được sử dụng - Dấu cách, Dấu phẩy, Dấu chấm, Dấu chấm, Dấu ngoặc đơn trái / phải và dấu ngoặc kép.

Bình luận

Chú thích là một chuỗi ký tự không ảnh hưởng đến việc thực hiện chương trình. Nó có thể là bất kỳ sự kết hợp của các ký tự.

Có hai loại nhận xét -

Dòng chú thích

Một dòng bình luận có thể được viết trong bất kỳ cột nào. Trình biên dịch không kiểm tra cú pháp dòng chú thích và xử lý nó để làm tài liệu.

Mục nhập bình luận

Các mục nhận xét là những mục được bao gồm trong các đoạn tùy chọn của Bộ phận Nhận dạng. Chúng được viết trong Khu vực B và các lập trình viên sử dụng nó để tham khảo.

Văn bản được đánh dấu trong Bold là các mục được nhận xét trong ví dụ sau -

000100 IDENTIFICATION DIVISION.                                         000100
000150 PROGRAM-ID. HELLO.                                               000101 
000200 AUTHOR. TUTORIALSPOINT.                                          000102
000250* THIS IS A COMMENT LINE                                          000103
000300 PROCEDURE DIVISION.                                              000104
000350 A000-FIRST-PARA.                                                 000105  
000360/ First Para Begins - Documentation Purpose                       000106
000400     DISPLAY “Comment line”.                                      000107
000500 STOP RUN.                                                        000108

JCL để thực hiện chương trình COBOL ở trên -

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO

Khi bạn biên dịch và thực thi chương trình trên, nó tạo ra kết quả sau:

Comment Line

Chữ nghĩa

Literal là một hằng số được mã hóa cứng trực tiếp trong một chương trình. Trong ví dụ sau, "Hello World" là một nghĩa đen.

PROCEDURE DIVISION.
DISPLAY 'Hello World'.

Có hai loại nghĩa đen như được thảo luận bên dưới -

Chữ cái và chữ số

Chữ cái và chữ số được đặt trong dấu ngoặc kép hoặc dấu nháy đơn. Độ dài có thể lên đến 160 ký tự. Dấu nháy đơn hoặc dấu ngoặc kép chỉ có thể là một phần của nghĩa đen nếu nó được ghép nối. Bắt đầu và kết thúc của nghĩa đen phải giống nhau, hoặc dấu nháy đơn hoặc dấu ngoặc kép.

Example

Ví dụ sau cho thấy các Chữ cái và Chữ số hợp lệ và không hợp lệ -

Valid:
   ‘This is valid’
   "This is valid"
   ‘This isn’’t invalid’

Invalid:
   ‘This is invalid”
   ‘This isn’t valid’

Numeric Literal

Chữ số theo kiểu chữ số là sự kết hợp của các chữ số từ 0 đến 9, +, - hoặc dấu thập phân. Độ dài có thể lên đến 18 ký tự. Dấu hiệu không được là ký tự ngoài cùng bên phải. Dấu thập phân không được xuất hiện ở cuối.

Example

Ví dụ sau cho thấy các Chữ số hợp lệ và không hợp lệ -

Valid:
   100
   +10.9
   -1.9

Invalid:
   1,00
   10.
   10.9-

COBOL Word

COBOL Word là một chuỗi ký tự có thể là một từ dành riêng hoặc một từ do người dùng định nghĩa. Độ dài có thể lên đến 30 ký tự.

Đã xác định người dùng

Các từ do người dùng định nghĩa được sử dụng để đặt tên tệp, dữ liệu, bản ghi, tên đoạn văn và phần. Bảng chữ cái, chữ số và dấu gạch nối được phép trong khi tạo các từ do người dùng xác định. Bạn không thể sử dụng các từ dành riêng COBOL.

Từ dành riêng

Các từ dành riêng là những từ được xác định trước trong COBOL. Các loại từ dành riêng khác nhau mà chúng tôi sử dụng thường xuyên như sau:

  • Keywords như THÊM, CHẤP NHẬN, DI CHUYỂN, v.v.

  • Special characters các từ như +, -, *, <, <=, v.v.

  • Figurative constants là các giá trị không đổi như ZERO, SPACES, v.v. Tất cả các giá trị không đổi của hằng số được đề cập trong bảng sau.

Hằng số tượng hình

Sr.No. Hằng số tượng hình & mô tả
1

HIGH-VALUES

Một hoặc nhiều ký tự sẽ ở vị trí cao nhất theo thứ tự giảm dần.

2

LOW-VALUES

Một hoặc nhiều ký tự có số không trong biểu diễn nhị phân.

3

ZERO/ZEROES

Một hoặc nhiều số 0 tùy thuộc vào kích thước của biến.

4

SPACES

Một hoặc nhiều khoảng trắng.

5

QUOTES

Dấu ngoặc kép hoặc đơn.

6

ALL literal

Điền vào mục dữ liệu bằng Literal.

Phân chia dữ liệu được sử dụng để xác định các biến được sử dụng trong một chương trình. Để mô tả dữ liệu trong COBOL, người ta phải hiểu các thuật ngữ sau:

  • Tên dữ liệu
  • Số cấp
  • Mệnh đề hình ảnh
  • Mệnh đề giá trị
01            TOTAL-STUDENTS            PIC9(5)            VALUE '125'.
|                    |                    |                    |
|                    |                    |                    |
|                    |                    |                    | 
Level Number     Data Name           Picture Clause       Value Clause

Tên dữ liệu

Tên dữ liệu phải được xác định trong Bộ phận Dữ liệu trước khi sử dụng chúng trong Bộ phận Thủ tục. Chúng phải có tên do người dùng xác định; từ dành riêng không được sử dụng. Tên dữ liệu cung cấp tham chiếu đến vị trí bộ nhớ nơi dữ liệu thực được lưu trữ. Chúng có thể là loại sơ cấp hoặc nhóm.

Thí dụ

Ví dụ sau cho thấy tên dữ liệu hợp lệ và không hợp lệ:

Valid:
   WS-NAME
   TOTAL-STUDENTS
   A100
   100B

Invalid:
   MOVE            (Reserved Words)
   COMPUTE         (Reserved Words)
   100             (No Alphabet)
   100+B           (+ is not allowed)

Số cấp

Số cấp được sử dụng để chỉ định mức dữ liệu trong bản ghi. Chúng được sử dụng để phân biệt giữa các mục cơ bản và các mục nhóm. Các mục cơ bản có thể được nhóm lại với nhau để tạo các mục nhóm.

Sr.No. Số cấp & Mô tả
1

01

Ghi lại mục mô tả

2

02 to 49

Nhóm và mục Cơ bản

3

66

Đổi tên các mục Mệnh đề

4

77

Các mục không thể chia nhỏ

5

88

Mục nhập tên điều kiện

  • Elementary itemskhông thể chia nhỏ hơn nữa. Số cấp, Tên dữ liệu, mệnh đề Hình ảnh và mệnh đề Giá trị (tùy chọn) được sử dụng để mô tả một mục cơ bản.

  • Group itemsbao gồm một hoặc nhiều mục cơ bản. Số cấp, Tên dữ liệu và mệnh đề Giá trị (tùy chọn) được sử dụng để mô tả một mục nhóm. Số cấp nhóm luôn là 01.

Thí dụ

Ví dụ sau đây cho thấy các mục Nhóm và Mục cơ bản:

DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-NAME    PIC X(25).                               ---> ELEMENTARY ITEM 
01 WS-CLASS   PIC 9(2)  VALUE  '10'.                   ---> ELEMENTARY ITEM

01 WS-ADDRESS.                                         ---> GROUP ITEM   
   05 WS-HOUSE-NUMBER    PIC 9(3).                     ---> ELEMENTARY ITEM
   05 WS-STREET          PIC X(15).                    ---> ELEMENTARY ITEM
   05 WS-CITY            PIC X(15).                    ---> ELEMENTARY ITEM
   05 WS-COUNTRY         PIC X(15)  VALUE 'INDIA'.     ---> ELEMENTARY ITEM

Mệnh đề hình ảnh

Mệnh đề hình ảnh được sử dụng để xác định các mục sau:

  • Data typecó thể là số, chữ cái hoặc chữ và số. Kiểu số chỉ gồm các chữ số từ 0 đến 9. Kiểu chữ cái bao gồm các chữ cái từ A đến Z và khoảng trắng. Kiểu chữ và số bao gồm các chữ số, chữ cái và các ký tự đặc biệt.

  • Signcó thể được sử dụng với dữ liệu số. Nó có thể là + hoặc -.

  • Decimal point positioncó thể được sử dụng với dữ liệu số. Vị trí giả định là vị trí của dấu thập phân và không được đưa vào dữ liệu.

  • Length xác định số byte được sử dụng bởi mục dữ liệu.

Các ký hiệu được sử dụng trong mệnh đề Hình ảnh -

Sr.No. Biểu tượng & Mô tả
1

9

Số

2

A

Chữ cái

3

X

Chữ và số

4

V

Số thập phân ngầm định

5

S

Ký tên

6

P

Số thập phân giả định

Thí dụ

Ví dụ sau đây cho thấy việc sử dụng mệnh đề PIC:

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-NUM1 PIC S9(3)V9(2).
   01 WS-NUM2 PIC PPP999.
   01 WS-NUM3 PIC S9(3)V9(2) VALUE -123.45.
   01 WS-NAME PIC A(6) VALUE 'ABCDEF'.
   01 WS-ID PIC X(5) VALUE 'A121$'.

PROCEDURE DIVISION.
   DISPLAY "WS-NUM1 : "WS-NUM1.
   DISPLAY "WS-NUM2 : "WS-NUM2.
   DISPLAY "WS-NUM3 : "WS-NUM3.
   DISPLAY "WS-NAME : "WS-NAME.
   DISPLAY "WS-ID : "WS-ID.
STOP RUN.

JCL để thực hiện chương trình COBOL ở trên -

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO

Khi bạn biên dịch và thực thi chương trình trên, nó tạo ra kết quả sau:

WS-NUM1 : +000.00
WS-NUM2 : .000000
WS-NUM3 : -123.45
WS-NAME : ABCDEF
WS-ID : A121$

Mệnh đề giá trị

Mệnh đề giá trị là một mệnh đề tùy chọn được sử dụng để khởi tạo các mục dữ liệu. Các giá trị có thể là chữ số, chữ và chữ số hoặc hằng số nghĩa bóng. Nó có thể được sử dụng với cả nhóm và mục sơ cấp.

Thí dụ

Ví dụ sau cho thấy việc sử dụng mệnh đề VALUE -

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-NUM1 PIC 99V9 VALUE IS 3.5.
   01 WS-NAME PIC A(6) VALUE 'ABCD'.
   01 WS-ID PIC 99 VALUE ZERO.

PROCEDURE DIVISION.
   DISPLAY "WS-NUM1 : "WS-NUM1.
   DISPLAY "WS-NAME : "WS-NAME.
   DISPLAY "WS-ID   : "WS-ID.
STOP RUN.

JCL để thực hiện chương trình COBOL ở trên -

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO

Khi bạn biên dịch và thực thi chương trình trên, nó tạo ra kết quả sau:

WS-NUM1 : 03.5
WS-NAME : ABCD
WS-ID   : 00

Động từ COBOL được sử dụng trong phân chia thủ tục để xử lý dữ liệu. Một câu lệnh luôn bắt đầu bằng động từ COBOL. Có một số động từ COBOL với các loại hành động khác nhau.

Động từ đầu vào / đầu ra

Các động từ Input / Output được sử dụng để lấy dữ liệu từ người dùng và hiển thị đầu ra của các chương trình COBOL. Hai động từ sau được sử dụng cho quá trình này:

Chấp nhận động từ

Động từ Accept được sử dụng để lấy dữ liệu như ngày, giờ và ngày từ hệ điều hành hoặc trực tiếp từ người dùng. Nếu một chương trình đang chấp nhận dữ liệu từ người dùng, thì chương trình đó cần phải được chuyển qua JCL. Trong khi lấy dữ liệu từ hệ điều hành, tùy chọn FROM được bao gồm như thể hiện trong ví dụ sau:

ACCEPT WS-STUDENT-NAME.
ACCEPT WS-DATE FROM SYSTEM-DATE.

Hiển thị động từ

Động từ hiển thị được sử dụng để hiển thị đầu ra của chương trình COBOL.

DISPLAY WS-STUDENT-NAME.
DISPLAY "System date is : " WS-DATE.

COBOL PROGRAM

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-STUDENT-NAME PIC X(25).
   01 WS-DATE PIC X(10).

PROCEDURE DIVISION.
   ACCEPT WS-STUDENT-NAME.
   ACCEPT WS-DATE FROM DATE.
   DISPLAY "Name :  " WS-STUDENT-NAME.
   DISPLAY "Date : " WS-DATE.

STOP RUN.

JCL để thực hiện chương trình COBOL ở trên -

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
//INPUT DD DSN=PROGRAM.DIRECTORY,DISP=SHR
//SYSIN DD *
TutorialsPoint
/*

Khi bạn biên dịch và thực thi chương trình trên, nó tạo ra kết quả sau:

Name : TutorialsPoint
Date : 200623

Khởi tạo động từ

Động từ khởi tạo được sử dụng để khởi tạo một mục nhóm hoặc một mục cơ bản. Không thể khởi tạo tên dữ liệu có mệnh đề RENAME. Các mục dữ liệu dạng số được thay thế bằng ZEROES. Các mục dữ liệu chữ và số hoặc chữ cái được thay thế bằng SPACES. Nếu chúng ta bao gồm thuật ngữ REPLACING, thì các mục dữ liệu có thể được khởi tạo thành giá trị thay thế đã cho như thể hiện trong ví dụ sau:

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-NAME PIC A(30) VALUE 'ABCDEF'.
   01 WS-ID PIC 9(5).
   01 WS-ADDRESS. 
   05 WS-HOUSE-NUMBER PIC 9(3).
   05 WS-COUNTRY PIC X(15).
   05 WS-PINCODE PIC 9(6) VALUE 123456.

PROCEDURE DIVISION.
   A000-FIRST-PARA.
   INITIALIZE WS-NAME, WS-ADDRESS.
   INITIALIZE WS-ID REPLACING NUMERIC DATA BY 12345.
   DISPLAY "My name is   : "WS-NAME.
   DISPLAY "My ID is     : "WS-ID.
   DISPLAY "Address      : "WS-ADDRESS.
   DISPLAY "House Number : "WS-HOUSE-NUMBER.
   DISPLAY "Country      : "WS-COUNTRY.
   DISPLAY "Pincode      : "WS-PINCODE.

STOP RUN.

JCL để thực hiện chương trình COBOL ở trên -

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO

Khi bạn biên dịch và thực thi chương trình trên, nó tạo ra kết quả sau:

My name is   :                               
My ID is     : 12345
Address      : 000               000000
House Number : 000
Country      :                
Pincode      : 000000

Chuyển động từ

Động từ Move dùng để sao chép dữ liệu từ dữ liệu nguồn sang dữ liệu đích. Nó có thể được sử dụng trên cả mục dữ liệu cơ bản và nhóm. Đối với các mục dữ liệu nhóm, MOVE CORRESPONDING / CORR được sử dụng. Trong tùy chọn thử, MOVE CORR không hoạt động; nhưng trên máy chủ mainframe, nó sẽ hoạt động.

Để di chuyển dữ liệu từ một chuỗi, MOVE (x: l) được sử dụng trong đó x là vị trí bắt đầu và l là chiều dài. Dữ liệu sẽ bị cắt bớt nếu mệnh đề PIC mục dữ liệu đích nhỏ hơn mệnh đề PIC mục dữ liệu nguồn. Nếu mệnh đề PIC của mục dữ liệu đích nhiều hơn mệnh đề PIC của mục dữ liệu nguồn thì ZEROS hoặc SPACES sẽ được thêm vào các byte phụ. Ví dụ sau đây làm cho nó rõ ràng.

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-NUM1 PIC 9(9).
   01 WS-NUM2 PIC 9(9).
   01 WS-NUM3 PIC 9(5).
   01 WS-NUM4 PIC 9(6).
   01 WS-ADDRESS. 
   05 WS-HOUSE-NUMBER PIC 9(3).
   05 WS-COUNTRY PIC X(5).
   05 WS-PINCODE PIC 9(6).
   01 WS-ADDRESS1. 
   05 WS-HOUSE-NUMBER1 PIC 9(3).
   05 WS-COUNTRY1 PIC X(5).
   05 WS-PINCODE1 PIC 9(6).

PROCEDURE DIVISION.
   A000-FIRST-PARA.
   MOVE 123456789 TO WS-NUM1.
   MOVE WS-NUM1 TO WS-NUM2 WS-NUM3.
   MOVE WS-NUM1(3:6) TO WS-NUM4.
   MOVE 123 TO WS-HOUSE-NUMBER.
   MOVE 'INDIA' TO WS-COUNTRY.
   MOVE 112233 TO WS-PINCODE.
   MOVE WS-ADDRESS TO WS-ADDRESS1.

   DISPLAY "WS-NUM1     : " WS-NUM1
   DISPLAY "WS-NUM2     : " WS-NUM2
   DISPLAY "WS-NUM3     : " WS-NUM3
   DISPLAY "WS-NUM4     : " WS-NUM4
   DISPLAY "WS-ADDRESS  : " WS-ADDRESS
   DISPLAY "WS-ADDRESS1 : " WS-ADDRESS1

STOP RUN.

JCL để thực hiện chương trình COBOL trên.

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO

Khi bạn biên dịch và thực thi chương trình trên, nó tạo ra kết quả sau:

WS-NUM1     : 123456789
WS-NUM2     : 123456789
WS-NUM3     : 56789
WS-NUM4     : 345678
WS-ADDRESS  : 123INDIA112233
WS-ADDRESS1 : 123INDIA112233

Động thái pháp lý

Bảng sau cung cấp thông tin về các động thái hợp pháp:

Chữ cái Chữ và số Số
Chữ cái Khả thi Khả thi Không thể
Chữ và số Khả thi Khả thi Khả thi
Số Không thể Khả thi Khả thi

Thêm động từ

Thêm động từ được sử dụng để thêm hai hoặc nhiều số và lưu trữ kết quả trong toán hạng đích.

Cú pháp

Dưới đây là cú pháp để Thêm hai hoặc nhiều số -

ADD A B TO C D

ADD A B C TO D GIVING E

ADD CORR WS-GROUP1 TO WS-GROUP2

Trong cú pháp-1, A, B, C được thêm vào và kết quả được lưu trữ trong C (C = A + B + C). A, B, D được thêm vào và kết quả được lưu trong D (D = A + B + D).

Trong cú pháp-2, A, B, C, D được thêm vào và kết quả được lưu trong E (E = A + B + C + D).

Trong cú pháp-3, các mục nhóm con trong WS-GROUP1 và WS-GROUP2 được thêm vào và kết quả được lưu trữ trong WS-GROUP2.

Example

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-NUM1 PIC 9(9) VALUE 10 .
   01 WS-NUM2 PIC 9(9) VALUE 10.
   01 WS-NUM3 PIC 9(9) VALUE 10.
   01 WS-NUM4 PIC 9(9) VALUE 10.
   01 WS-NUMA PIC 9(9) VALUE 10.
   01 WS-NUMB PIC 9(9) VALUE 10.
   01 WS-NUMC PIC 9(9) VALUE 10.
   01 WS-NUMD PIC 9(9) VALUE 10.
   01 WS-NUME PIC 9(9) VALUE 10.

PROCEDURE DIVISION.
   ADD WS-NUM1 WS-NUM2 TO WS-NUM3 WS-NUM4.
   ADD WS-NUMA WS-NUMB WS-NUMC TO WS-NUMD GIVING WS-NUME.
   DISPLAY "WS-NUM1     : " WS-NUM1
   DISPLAY "WS-NUM2     : " WS-NUM2
   DISPLAY "WS-NUM3     : " WS-NUM3
   DISPLAY "WS-NUM4     : " WS-NUM4
   DISPLAY "WS-NUMA     : " WS-NUMA
   DISPLAY "WS-NUMB     : " WS-NUMB
   DISPLAY "WS-NUMC     : " WS-NUMC
   DISPLAY "WS-NUMD     : " WS-NUMD
   DISPLAY "WS-NUME     : " WS-NUME

STOP RUN.

JCL để thực hiện chương trình COBOL ở trên -

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO

Khi bạn biên dịch và thực thi chương trình trên, nó tạo ra kết quả sau:

WS-NUM1     : 000000010
WS-NUM2     : 000000010
WS-NUM3     : 000000030
WS-NUM4     : 000000030
WS-NUMA     : 000000010
WS-NUMB     : 000000010
WS-NUMC     : 000000010
WS-NUMD     : 000000010
WS-NUME     : 000000040

Trừ động từ

Subtract verb được sử dụng cho các phép tính trừ.

Cú pháp

Dưới đây là cú pháp cho các phép toán Trừ -

SUBTRACT A B FROM C D

SUBTRACT A B C FROM D GIVING E

SUBTRACT CORR WS-GROUP1 TO WS-GROUP2

Trong cú pháp-1, A và B được cộng và trừ từ C. Kết quả được lưu trong C (C = C- (A + B)). A và B được cộng và trừ từ D. Kết quả được lưu trong D (D = D- (A + B)).

Trong cú pháp-2, A, B, C được cộng và trừ từ D. Kết quả được lưu trong E (E = D- (A + B + C))

Trong cú pháp-3, các mục nhóm con trong WS-GROUP1 và WS-GROUP2 được trừ đi và kết quả được lưu trữ trong WS-GROUP2.

Example

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-NUM1 PIC 9(9) VALUE 10 .
   01 WS-NUM2 PIC 9(9) VALUE 10.
   01 WS-NUM3 PIC 9(9) VALUE 100.
   01 WS-NUM4 PIC 9(9) VALUE 100.
   01 WS-NUMA PIC 9(9) VALUE 10.
   01 WS-NUMB PIC 9(9) VALUE 10.
   01 WS-NUMC PIC 9(9) VALUE 10.
   01 WS-NUMD PIC 9(9) VALUE 100.
   01 WS-NUME PIC 9(9) VALUE 10.

PROCEDURE DIVISION.
   SUBTRACT WS-NUM1 WS-NUM2 FROM WS-NUM3 WS-NUM4.
   SUBTRACT WS-NUMA WS-NUMB WS-NUMC FROM WS-NUMD GIVING WS-NUME.

   DISPLAY "WS-NUM1     : " WS-NUM1
   DISPLAY "WS-NUM2     : " WS-NUM2
   DISPLAY "WS-NUM3     : " WS-NUM3
   DISPLAY "WS-NUM4     : " WS-NUM4
   DISPLAY "WS-NUMA     : " WS-NUMA
   DISPLAY "WS-NUMB     : " WS-NUMB
   DISPLAY "WS-NUMC     : " WS-NUMC
   DISPLAY "WS-NUMD     : " WS-NUMD
   DISPLAY "WS-NUME     : " WS-NUME

STOP RUN.

JCL để thực hiện chương trình COBOL ở trên -

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO

Khi bạn biên dịch và thực thi chương trình trên, nó tạo ra kết quả sau:

WS-NUM1     : 000000010
WS-NUM2     : 000000010
WS-NUM3     : 000000080
WS-NUM4     : 000000080
WS-NUMA     : 000000010
WS-NUMB     : 000000010
WS-NUMC     : 000000010
WS-NUMD     : 000000100
WS-NUME     : 000000070

Nhân động từ

Multiply verb được sử dụng cho các phép toán nhân.

Cú pháp

Dưới đây là cú pháp để nhân hai hoặc nhiều số -

MULTIPLY A BY B C

MULTIPLY A BY B GIVING E

Trong cú pháp-1, A và B được nhân và kết quả được lưu trong B (B = A * B). A và C được nhân và kết quả được lưu trong C (C = A * C).

Trong cú pháp-2, A và B được nhân và kết quả được lưu trong E (E = A * B).

Example

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-NUM1 PIC 9(9) VALUE 10 .
   01 WS-NUM2 PIC 9(9) VALUE 10.
   01 WS-NUM3 PIC 9(9) VALUE 10.
   01 WS-NUMA PIC 9(9) VALUE 10.
   01 WS-NUMB PIC 9(9) VALUE 10.
   01 WS-NUMC PIC 9(9) VALUE 10.

PROCEDURE DIVISION.
   MULTIPLY WS-NUM1 BY WS-NUM2 WS-NUM3.
   MULTIPLY WS-NUMA BY WS-NUMB GIVING WS-NUMC.
   
   DISPLAY "WS-NUM1     : " WS-NUM1
   DISPLAY "WS-NUM2     : " WS-NUM2
   DISPLAY "WS-NUM3     : " WS-NUM3
   DISPLAY "WS-NUMA     : " WS-NUMA
   DISPLAY "WS-NUMB     : " WS-NUMB
   DISPLAY "WS-NUMC     : " WS-NUMC
   
STOP RUN.

JCL để thực hiện chương trình COBOL ở trên -

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO

Khi bạn biên dịch và thực thi chương trình trên, nó tạo ra kết quả sau:

WS-NUM1     : 000000010
WS-NUM2     : 000000100
WS-NUM3     : 000000100
WS-NUMA     : 000000010
WS-NUMB     : 000000010
WS-NUMC     : 000000100

Chia động từ

Động từ chia được sử dụng cho các phép toán chia.

Cú pháp

Dưới đây là cú pháp cho các phép toán chia:

DIVIDE A INTO B

DIVIDE A BY B GIVING C REMAINDER R

Trong cú pháp-1, B được chia cho A và kết quả được lưu trong B (B = B / A).

Trong cú pháp-2, A được chia cho B và kết quả được lưu trong C (C = A / B) và phần còn lại được lưu trong R.

Example

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-NUM1 PIC 9(9) VALUE 5.
   01 WS-NUM2 PIC 9(9) VALUE 250.
   01 WS-NUMA PIC 9(9) VALUE 100.
   01 WS-NUMB PIC 9(9) VALUE 15.
   01 WS-NUMC PIC 9(9).
   01 WS-REM PIC 9(9). 

PROCEDURE DIVISION.
   DIVIDE WS-NUM1 INTO WS-NUM2.
   DIVIDE WS-NUMA BY WS-NUMB GIVING WS-NUMC REMAINDER WS-REM.
   DISPLAY "WS-NUM1     : " WS-NUM1
   DISPLAY "WS-NUM2     : " WS-NUM2
   DISPLAY "WS-NUMA     : " WS-NUMA
   DISPLAY "WS-NUMB     : " WS-NUMB
   DISPLAY "WS-NUMC     : " WS-NUMC
   DISPLAY "WS-REM      : " WS-REM
   
STOP RUN.

JCL để thực hiện chương trình COBOL ở trên -

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO

Khi bạn biên dịch và thực thi chương trình trên, nó tạo ra kết quả sau:

WS-NUM1     : 000000005
WS-NUM2     : 000000050
WS-NUMA     : 000000100
WS-NUMB     : 000000015
WS-NUMC     : 000000006
WS-REM      : 000000010

Báo cáo điện toán

Câu lệnh Compute được sử dụng để viết các biểu thức số học trong COBOL. Đây là sự thay thế cho Cộng, Trừ, Nhân và Chia.

Example

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-NUM1 PIC 9(9) VALUE 10 .
   01 WS-NUM2 PIC 9(9) VALUE 10.
   01 WS-NUM3 PIC 9(9) VALUE 10.
   01 WS-NUMA PIC 9(9) VALUE 50.
   01 WS-NUMB PIC 9(9) VALUE 10.
   01 WS-NUMC PIC 9(9).

PROCEDURE DIVISION.
   COMPUTE WS-NUMC= (WS-NUM1 * WS-NUM2) - (WS-NUMA / WS-NUMB) + WS-NUM3.
   DISPLAY "WS-NUM1     : " WS-NUM1
   DISPLAY "WS-NUM2     : " WS-NUM2
   DISPLAY "WS-NUM3     : " WS-NUM3
   DISPLAY "WS-NUMA     : " WS-NUMA
   DISPLAY "WS-NUMB     : " WS-NUMB
   DISPLAY "WS-NUMC     : " WS-NUMC

STOP RUN.

JCL để thực hiện chương trình COBOL trên.

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO

Khi bạn biên dịch và thực thi chương trình trên, nó tạo ra kết quả sau:

WS-NUM1     : 000000010
WS-NUM2     : 000000010
WS-NUM3     : 000000010
WS-NUMA     : 000000050
WS-NUMB     : 000000010
WS-NUMC     : 000000105

Bố cục COBOL là mô tả việc sử dụng của từng trường và các giá trị có trong đó. Sau đây là các mục mô tả dữ liệu được sử dụng trong COBOL -

  • Định nghĩa lại mệnh đề
  • Điều khoản đổi tên
  • Điều khoản sử dụng
  • Copybooks

Định nghĩa lại mệnh đề

Mệnh đề định nghĩa lại được sử dụng để xác định một bộ lưu trữ với mô tả dữ liệu khác nhau. Nếu một hoặc nhiều mục dữ liệu không được sử dụng đồng thời, thì cùng một bộ nhớ có thể được sử dụng cho một mục dữ liệu khác. Vì vậy, cùng một bộ nhớ có thể được tham chiếu với các mục dữ liệu khác nhau.

Cú pháp

Sau đây là cú pháp cho mệnh đề Định nghĩa lại:

01 WS-OLD PIC X(10).
01 WS-NEW1 REDEFINES WS-OLD PIC 9(8).
01 WS-NEW2 REDEFINES WS-OLD PIC A(10).

Sau đây là chi tiết của các tham số được sử dụng:

  • WS-OLD là mục được xác định lại
  • WS-NEW1 và WS-NEW2 đang xác định lại mục

Số cấp của vật phẩm xác định lại và vật phẩm xác định lại phải giống nhau và nó không được là số cấp 66 hoặc 88. Không sử dụng mệnh đề GIÁ TRỊ với một mục xác định lại. Trong Phần Tệp, không sử dụng mệnh đề định nghĩa lại có 01 số cấp. Định nghĩa lại định nghĩa phải là mô tả dữ liệu tiếp theo mà bạn muốn xác định lại. Một mục xác định lại sẽ luôn có cùng giá trị với một mục xác định lại.

Example

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-DESCRIPTION.
   05 WS-DATE1 VALUE '20140831'.
   10 WS-YEAR PIC X(4).
   10 WS-MONTH PIC X(2).
   10 WS-DATE PIC X(2).
   05 WS-DATE2 REDEFINES WS-DATE1 PIC 9(8).

PROCEDURE DIVISION.
   DISPLAY "WS-DATE1 : "WS-DATE1.
   DISPLAY "WS-DATE2 : "WS-DATE2.

STOP RUN.

JCL để thực hiện chương trình COBOL ở trên -

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO

Khi bạn biên dịch và thực thi chương trình trên, nó tạo ra kết quả sau:

WS-DATE1 : 20140831
WS-DATE2 : 20140831

Điều khoản đổi tên

Mệnh đề Renames được sử dụng để đặt các tên khác nhau cho các mục dữ liệu hiện có. Nó được sử dụng để nhóm lại tên dữ liệu và đặt tên mới cho chúng. Tên dữ liệu mới có thể đổi tên cho các nhóm hoặc các mục cơ bản. Cấp số 66 được dành để đổi tên.

Syntax

Sau đây là cú pháp cho mệnh đề Đổi tên:

01 WS-OLD.
10 WS-A PIC 9(12).
10 WS-B PIC X(20).
10 WS-C PIC A(25).
10 WS-D PIC X(12).
66 WS-NEW RENAMES WS-A THRU WS-C.

Chỉ có thể đổi tên ở cùng cấp độ. Trong ví dụ trên, WS-A, WS-B và WS-C ở cùng một mức. Định nghĩa đổi tên phải là mô tả dữ liệu tiếp theo mà bạn muốn đổi tên. Không sử dụng các Tên có số cấp 01, 77 hoặc 66. Tên dữ liệu được sử dụng để đổi tên phải theo thứ tự. Không thể đổi tên các mục dữ liệu có mệnh đề xảy ra.

Example

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-DESCRIPTION.
   05 WS-NUM.
   10 WS-NUM1 PIC 9(2) VALUE 20.
   10 WS-NUM2 PIC 9(2) VALUE 56.
   05 WS-CHAR.
   10 WS-CHAR1 PIC X(2) VALUE 'AA'.
   10 WS-CHAR2 PIC X(2) VALUE 'BB'.
   66 WS-RENAME RENAMES WS-NUM2 THRU WS-CHAR2.

PROCEDURE DIVISION.
   DISPLAY "WS-RENAME : " WS-RENAME.
   
STOP RUN.

JCL để thực hiện chương trình COBOL ở trên -

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO

Khi bạn biên dịch và thực thi chương trình trên, nó tạo ra kết quả sau:

WS-RENAME : 56AABB

Điều khoản sử dụng

Điều khoản sử dụng chỉ định hệ điều hành mà dữ liệu định dạng được lưu trữ. Nó không thể được sử dụng với số cấp 66 hoặc 88. Nếu mệnh đề sử dụng được chỉ định trong một nhóm, thì tất cả các mục cơ bản sẽ có cùng mệnh đề sử dụng. Các tùy chọn khác nhau có sẵn với mệnh đề Sử dụng như sau:

Trưng bày

Mục dữ liệu được lưu trữ ở định dạng ASCII và mỗi ký tự sẽ chiếm 1 byte. Đó là cách sử dụng mặc định.

Ví dụ sau đây tính số byte được yêu cầu:

01 WS-NUM PIC S9(5)V9(3) USAGE IS DISPLAY.
It requires 8 bytes as sign and decimal doesn't require any byte.

01 WS-NUM PIC 9(5) USAGE IS DISPLAY.
It requires 5 bytes as sign.

COMPUTATIONAL / COMP

Mục dữ liệu được lưu trữ ở định dạng nhị phân. Ở đây, các mục dữ liệu phải là số nguyên.

Ví dụ sau đây tính số byte được yêu cầu:

01 WS-NUM PIC S9(n) USAGE IS COMP.

If 'n' = 1 to 4, it takes 2 bytes.
If 'n' = 5 to 9, it takes 4 bytes.
If 'n' = 10 to 18, it takes 8 bytes.

COMP-1

Mục dữ liệu tương tự như Real hoặc Float và được biểu thị dưới dạng một số dấu chấm động chính xác duy nhất. Trong nội bộ, dữ liệu được lưu trữ ở định dạng thập lục phân. COMP-1 không chấp nhận điều khoản PIC. Ở đây 1 từ bằng 4 byte.

COMP-2

Mục dữ liệu tương tự như Long hoặc Double và được biểu diễn dưới dạng số dấu chấm động có độ chính xác kép. Trong nội bộ, dữ liệu được lưu trữ ở định dạng thập lục phân. COMP-2 không chỉ định mệnh đề PIC. Ở đây 2 từ bằng 8 byte.

COMP-3

Mục dữ liệu được lưu trữ ở định dạng thập phân đóng gói. Mỗi chữ số chiếm nửa byte (1 nibble) và dấu được lưu trữ ở nibble ngoài cùng bên phải.

Ví dụ sau đây tính số byte được yêu cầu:

01 WS-NUM PIC 9(n) USAGE IS COMP.
Number of bytes = n/2 (If n is even)
Number of bytes = n/2 + 1(If n is odd, consider only integer part)

01 WS-NUM PIC 9(4) USAGE IS COMP-3 VALUE 21.
It requires 2 bytes of storage as each digit occupies half a byte.

01 WS-NUM PIC 9(5) USAGE IS COMP-3 VALUE 21.
It requires 3 bytes of storage as each digit occupies half a byte.

Sách sao chép

Sách sao chép COBOL là một tập hợp mã xác định cấu trúc dữ liệu. Nếu một cấu trúc dữ liệu cụ thể được sử dụng trong nhiều chương trình, thì thay vì viết lại cấu trúc dữ liệu tương tự, chúng ta có thể sử dụng sách chép. Chúng tôi sử dụng tuyên bố SAO CHÉP để đưa sách sao chép vào một chương trình. Câu lệnh COPY được sử dụng trong Phần Lưu trữ Làm việc.

Ví dụ sau đây bao gồm một cuốn sách bên trong chương trình COBOL -

DATA DIVISION.
WORKING-STORAGE SECTION.
COPY ABC.

Ở đây ABC là tên sách sao chép. Các mục dữ liệu sau đây trong ABC copybook có thể được sử dụng trong một chương trình.

01 WS-DESCRIPTION.
   05 WS-NUM.
      10 WS-NUM1 PIC 9(2) VALUE 20.
      10 WS-NUM2 PIC 9(2) VALUE 56.
   05 WS-CHAR.
      10 WS-CHAR1 PIC X(2) VALUE 'AA'.
      10 WS-CHAR2 PIC X(2) VALUE 'BB'.

Các câu lệnh điều kiện được sử dụng để thay đổi luồng thực thi tùy thuộc vào các điều kiện nhất định do người lập trình quy định. Câu lệnh điều kiện sẽ luôn luôn đánh giá đúng hoặc sai. Các điều kiện được sử dụng trong các câu lệnh IF, Đánh giá và Thực hiện. Các loại điều kiện khác nhau như sau:

  • Tuyên bố điều kiện IF
  • Tình trạng quan hệ
  • Điều kiện ký
  • Điều kiện lớp học
  • Điều kiện-Tên Điều kiện
  • Điều kiện cần thiết
  • Điều kiện kết hợp

Tuyên bố điều kiện IF

Câu lệnh IF kiểm tra các điều kiện. Nếu một điều kiện là đúng, khối IF được thực thi; và nếu điều kiện sai, khối ELSE được thực thi.

END-IFđược sử dụng để kết thúc khối IF. Để kết thúc khối IF, một dấu chấm có thể được sử dụng thay cho END-IF. Nhưng sử dụng END-IF cho nhiều khối IF luôn được ưu tiên hơn.

Nested-IF- Các khối IF xuất hiện bên trong một khối IF khác. Không có giới hạn về độ sâu của các câu lệnh IF lồng nhau.

Cú pháp

Sau đây là cú pháp của câu lệnh điều kiện IF:

IF [condition] THEN
   [COBOL statements]
ELSE
   [COBOL statements]
END-IF.

Example

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-NUM1 PIC 9(9).
   01 WS-NUM2 PIC 9(9).
   01 WS-NUM3 PIC 9(5).
   01 WS-NUM4 PIC 9(6).

PROCEDURE DIVISION.
   A000-FIRST-PARA.
   MOVE 25 TO WS-NUM1 WS-NUM3.
   MOVE 15 TO WS-NUM2 WS-NUM4.
   
   IF WS-NUM1 > WS-NUM2 THEN
      DISPLAY 'IN LOOP 1 - IF BLOCK'
      
      IF WS-NUM3 = WS-NUM4 THEN
         DISPLAY 'IN LOOP 2 - IF BLOCK'
      ELSE
         DISPLAY 'IN LOOP 2 - ELSE BLOCK'
      END-IF
      
   ELSE
      DISPLAY 'IN LOOP 1 - ELSE BLOCK'
   END-IF.
   
STOP RUN.

JCL để thực hiện chương trình COBOL ở trên -

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO

Khi bạn biên dịch và thực thi chương trình trên, nó tạo ra kết quả sau:

IN LOOP 1 - IF BLOCK
IN LOOP 2 - ELSE BLOCK

Tình trạng quan hệ

Điều kiện quan hệ so sánh hai toán hạng, một trong hai toán hạng có thể là một biểu thức định danh, chữ hoặc số học. So sánh đại số của các trường số được thực hiện bất kể kích thước và mệnh đề sử dụng.

For non-numeric operands

Nếu hai toán hạng không phải số có kích thước bằng nhau được so sánh, thì các ký tự được so sánh từ trái với các vị trí tương ứng cho đến khi đạt đến cuối. Toán hạng chứa số lượng ký tự lớn hơn được khai báo lớn hơn.

Nếu hai toán hạng không phải là số có kích thước không bằng nhau được so sánh, thì mục dữ liệu ngắn hơn sẽ được thêm vào bằng khoảng trắng ở cuối cho đến khi kích thước của toán hạng trở nên bằng nhau và sau đó so sánh theo các quy tắc đã đề cập ở điểm trước.

Cú pháp

Dưới đây là cú pháp của câu lệnh điều kiện quan hệ -

[Data Name/Arithmetic Operation]

   [IS] [NOT] 

[Equal to (=),Greater than (>), Less than (<), 
Greater than or Equal (>=), Less than or equal (<=) ]

[Data Name/Arithmetic Operation]

Example

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-NUM1 PIC 9(9).
   01 WS-NUM2 PIC 9(9).

PROCEDURE DIVISION.
   A000-FIRST-PARA.
   MOVE 25 TO WS-NUM1.
   MOVE 15 TO WS-NUM2.
   
   IF WS-NUM1 IS GREATER THAN OR EQUAL TO WS-NUM2 THEN
      DISPLAY 'WS-NUM1 IS GREATER THAN WS-NUM2'
   ELSE
      DISPLAY 'WS-NUM1 IS LESS THAN WS-NUM2'
   END-IF.
   
STOP RUN.

JCL để thực hiện chương trình COBOL ở trên -

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO

Khi bạn biên dịch và thực thi chương trình trên, nó tạo ra kết quả sau:

WS-NUM1 IS GREATER THAN WS-NUM2

Điều kiện ký

Điều kiện dấu được sử dụng để kiểm tra dấu của một toán hạng số. Nó xác định xem một giá trị số nhất định lớn hơn, nhỏ hơn hoặc bằng ZERO.

Cú pháp

Sau đây là cú pháp của câu lệnh điều kiện Sign:

[Data Name/Arithmetic Operation] 

   [IS] [NOT] 

[Positive, Negative or Zero]

[Data Name/Arithmetic Operation]

Example

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-NUM1 PIC S9(9) VALUE -1234.
   01 WS-NUM2 PIC S9(9) VALUE 123456.

PROCEDURE DIVISION.
   A000-FIRST-PARA.
   IF WS-NUM1 IS POSITIVE THEN
      DISPLAY 'WS-NUM1 IS POSITIVE'.
      
   IF WS-NUM1 IS NEGATIVE THEN
      DISPLAY 'WS-NUM1 IS NEGATIVE'.
      
   IF WS-NUM1 IS ZERO THEN
      DISPLAY 'WS-NUM1 IS ZERO'.
      
   IF WS-NUM2 IS POSITIVE THEN
      DISPLAY 'WS-NUM2 IS POSITIVE'.

STOP RUN.

JCL để thực hiện chương trình COBOL ở trên -

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO

Khi bạn biên dịch và thực thi chương trình trên, nó tạo ra kết quả sau:

WS-NUM1 IS NEGATIVE
WS-NUM2 IS POSITIVE

Điều kiện lớp học

Điều kiện lớp được sử dụng để kiểm tra xem một toán hạng chỉ chứa các bảng chữ cái hoặc dữ liệu số. Khoảng trắng được xem xét trong ALPHABETIC, ALPHABETIC-LOWER và ALPHABETIC-UPPER.

Cú pháp

Sau đây là cú pháp của câu lệnh điều kiện lớp:

[Data Name/Arithmetic Operation>]

   [IS] [NOT] 

[NUMERIC, ALPHABETIC, ALPHABETIC-LOWER, ALPHABETIC-UPPER]

[Data Name/Arithmetic Operation]

Example

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-NUM1 PIC X(9) VALUE 'ABCD '.
   01 WS-NUM2 PIC 9(9) VALUE 123456789.

PROCEDURE DIVISION.
   A000-FIRST-PARA.
   
   IF WS-NUM1 IS ALPHABETIC THEN
      DISPLAY 'WS-NUM1 IS ALPHABETIC'.
      
   IF WS-NUM1 IS NUMERIC THEN
      DISPLAY 'WS-NUM1 IS NUMERIC'.
      
   IF WS-NUM2 IS NUMERIC THEN
      DISPLAY 'WS-NUM2 IS NUMERIC'.
   
STOP RUN.

JCL để thực hiện chương trình COBOL ở trên -

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO

Khi bạn biên dịch và thực thi chương trình trên, nó tạo ra kết quả sau:

WS-NUM1 IS ALPHABETIC
WS-NUM2 IS NUMERIC

Điều kiện-tên Điều kiện

Tên điều kiện là tên do người dùng xác định. Nó chứa một tập hợp các giá trị do người dùng chỉ định. Nó hoạt động giống như các biến Boolean. Chúng được định nghĩa với cấp số 88. Nó sẽ không có điều khoản PIC.

Cú pháp

Sau đây là cú pháp của các câu lệnh điều kiện do người dùng xác định:

88 [Condition-Name] VALUE [IS, ARE] [LITERAL] [THRU LITERAL].

Example

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-NUM PIC 9(3).
   88 PASS VALUES ARE 041 THRU 100.
   88 FAIL VALUES ARE 000 THRU 40.

PROCEDURE DIVISION.
   A000-FIRST-PARA.
   MOVE 65 TO WS-NUM.
   
   IF PASS 
      DISPLAY 'Passed with ' WS-NUM ' marks'.
      
   IF FAIL 
      DISPLAY 'FAILED with ' WS-NUM 'marks'.
      
STOP RUN.

JCL để thực hiện chương trình COBOL ở trên -

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO

Khi bạn biên dịch và thực thi chương trình trên, nó tạo ra kết quả sau:

Passed with 065 marks

Điều kiện cần thiết

Điều kiện phân cấp được đưa ra bằng cách sử dụng từ khóa NOT. Nếu một điều kiện là đúng và chúng ta đã đưa ra KHÔNG trước nó, thì giá trị cuối cùng của nó sẽ là sai.

Cú pháp

Sau đây là cú pháp của câu lệnh điều kiện được phân bổ:

IF NOT [CONDITION] 
   COBOL Statements
END-IF.

Example

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-NUM1 PIC 9(2) VALUE 20.
   01 WS-NUM2 PIC 9(9) VALUE 25.

PROCEDURE DIVISION.
   A000-FIRST-PARA.
   
   IF NOT WS-NUM1 IS LESS THAN WS-NUM2 THEN
      DISPLAY 'IF-BLOCK'
   ELSE
      DISPLAY 'ELSE-BLOCK'
   END-IF.
   
STOP RUN.

JCL để thực hiện chương trình COBOL ở trên -

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO

Khi bạn biên dịch và thực thi chương trình trên, nó tạo ra kết quả sau:

ELSE-BLOCK

Điều kiện kết hợp

Một điều kiện kết hợp chứa hai hoặc nhiều điều kiện được kết nối bằng cách sử dụng toán tử logic AND hoặc OR.

Cú pháp

Sau đây là cú pháp của các câu lệnh điều kiện kết hợp:

IF [CONDITION] AND [CONDITION]
   COBOL Statements
END-IF.

Example

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-NUM1 PIC 9(2) VALUE 20.
   01 WS-NUM2 PIC 9(2) VALUE 25.
   01 WS-NUM3 PIC 9(2) VALUE 20.

PROCEDURE DIVISION.
   A000-FIRST-PARA.
   
   IF WS-NUM1 IS LESS THAN WS-NUM2 AND WS-NUM1=WS-NUM3 THEN
      DISPLAY 'Both condition OK'
   ELSE
      DISPLAY 'Error'
   END-IF.
   
STOP RUN.

JCL để thực hiện chương trình COBOL ở trên -

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO

Khi bạn biên dịch và thực thi chương trình trên, nó tạo ra kết quả sau:

Both condition OK

Đánh giá động từ

Đánh giá động từ là một thay thế của một loạt các câu lệnh IF-ELSE. Nó có thể được sử dụng để đánh giá nhiều hơn một điều kiện. Nó tương tự như câu lệnh SWITCH trong chương trình C.

Example

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-A PIC 9 VALUE 0.
   
PROCEDURE DIVISION.
   MOVE 3 TO WS-A.
   
   EVALUATE TRUE
      WHEN WS-A > 2
         DISPLAY 'WS-A GREATER THAN 2'

      WHEN WS-A < 0
         DISPLAY 'WS-A LESS THAN 0'

      WHEN OTHER
         DISPLAY 'INVALID VALUE OF WS-A'
   END-EVALUATE.
   
STOP RUN.

JCL để thực hiện chương trình COBOL ở trên -

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO

Khi bạn biên dịch và thực thi chương trình trên, nó tạo ra kết quả sau:

WS-A GREATER THAN 2

Có một số tác vụ cần phải được thực hiện lặp đi lặp lại như đọc từng bản ghi của tệp cho đến khi kết thúc. Các câu lệnh lặp được sử dụng trong COBOL là:

  • Thực hiện Thru
  • Thực hiện cho đến khi
  • Thời gian thực hiện
  • Thực hiện thay đổi

Thực hiện Thru

Thực hiện Thru được sử dụng để thực hiện một chuỗi đoạn văn bằng cách đặt tên đoạn văn đầu tiên và cuối cùng trong chuỗi. Sau khi thực hiện đoạn cuối cùng, điều khiển được trả lại.

Thực hiện trong dòng

Các câu lệnh bên trong PERFORM sẽ được thực hiện cho đến khi đạt đến END-PERFORM.

Cú pháp

Sau đây là cú pháp của biểu diễn nội dòng:

PERFORM 
   DISPLAY 'HELLO WORLD'
END-PERFORM.

Thực hiện ngoài luồng

Ở đây, một câu lệnh được thực hiện trong một đoạn và sau đó điều khiển được chuyển sang đoạn hoặc phần khác.

Cú pháp

Sau đây là cú pháp của Out-of-line performance:

PERFORM PARAGRAPH1 THRU PARAGRAPH2

Example

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

PROCEDURE DIVISION.
   A-PARA.
   PERFORM DISPLAY 'IN A-PARA'
   END-PERFORM.
   PERFORM C-PARA THRU E-PARA.
   
   B-PARA.
   DISPLAY 'IN B-PARA'.
   STOP RUN.
   
   C-PARA.
   DISPLAY 'IN C-PARA'.
   
   D-PARA.
   DISPLAY 'IN D-PARA'.
   
   E-PARA.
   DISPLAY 'IN E-PARA'.

JCL để thực hiện chương trình COBOL trên.

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO

Khi bạn biên dịch và thực thi chương trình trên, nó tạo ra kết quả sau:

IN A-PARA
IN C-PARA
IN D-PARA
IN E-PARA
IN B-PARA

Thực hiện cho đến khi

Trong 'thực hiện cho đến khi', một đoạn được thực hiện cho đến khi điều kiện đã cho trở thành đúng. 'With test before' là điều kiện mặc định và nó chỉ ra rằng điều kiện được kiểm tra trước khi thực hiện các câu lệnh trong một đoạn văn.

Cú pháp

Sau đây là cú pháp của biểu diễn cho đến khi -

PERFORM A-PARA UNTIL COUNT=5

PERFORM A-PARA WITH TEST BEFORE UNTIL COUNT=5

PERFORM A-PARA WITH TEST AFTER UNTIL COUNT=5

Example

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-CNT PIC 9(1) VALUE 0. 

PROCEDURE DIVISION.
   A-PARA.
   PERFORM B-PARA WITH TEST AFTER UNTIL WS-CNT>3.
   STOP RUN.
   
   B-PARA.
   DISPLAY 'WS-CNT : 'WS-CNT.
   ADD 1 TO WS-CNT.

JCL để thực hiện chương trình COBOL ở trên -

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO

Khi bạn biên dịch và thực thi chương trình trên, nó tạo ra kết quả sau:

WS-CNT : 0
WS-CNT : 1
WS-CNT : 2
WS-CNT : 3

Thời gian thực hiện

Trong 'thời gian thực hiện', một đoạn văn sẽ được thực hiện theo số lần được chỉ định.

Cú pháp

Sau đây là cú pháp của thời gian thực hiện:

PERFORM A-PARA 5 TIMES.

Example

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

PROCEDURE DIVISION.
   A-PARA.
   PERFORM B-PARA 3 TIMES.
   STOP RUN.
   
   B-PARA.
   DISPLAY 'IN B-PARA'.

JCL để thực hiện chương trình COBOL ở trên -

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO

Khi bạn biên dịch và thực thi chương trình trên, nó tạo ra kết quả sau:

IN B-PARA
IN B-PARA
IN B-PARA

Thực hiện thay đổi

Khi thực hiện khác nhau, một đoạn văn sẽ được thực hiện cho đến khi điều kiện trong cụm từ Until trở thành true.

Cú pháp

Sau đây là cú pháp thực hiện thay đổi:

PERFORM A-PARA VARYING A FROM 1 BY 1 UNTIL A = 5.

Example

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-A PIC 9 VALUE 0.

PROCEDURE DIVISION.
   A-PARA.
   PERFORM B-PARA VARYING WS-A FROM 1 BY 1 UNTIL WS-A=5
   STOP RUN.
   
   B-PARA.
   DISPLAY 'IN B-PARA ' WS-A.

JCL để thực hiện chương trình COBOL ở trên -

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO

Khi bạn biên dịch và thực thi chương trình trên, nó tạo ra kết quả sau:

IN B-PARA 1
IN B-PARA 2
IN B-PARA 3
IN B-PARA 4

ĐI ĐẾN Tuyên bố

Câu lệnh GO TO được sử dụng để thay đổi luồng thực thi trong một chương trình. Trong câu lệnh ĐI ĐẾN, chuyển chỉ đi theo hướng về phía trước. Nó được sử dụng để thoát khỏi một đoạn văn. Các loại câu lệnh GO TO khác nhau được sử dụng như sau:

ĐI ĐẾN vô điều kiện

GO TO para-name.

CÓ ĐIỀU KIỆN ĐI ĐẾN

GO TO para-1 para-2 para-3 DEPENDING ON x.

Nếu 'x' bằng 1, thì điều khiển sẽ được chuyển đến đoạn đầu tiên; và nếu 'x' bằng 2, thì điều khiển sẽ được chuyển sang đoạn thứ hai, v.v.

Example

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-A PIC 9 VALUE 2.
   
PROCEDURE DIVISION.
   A-PARA.
   DISPLAY 'IN A-PARA'
   GO TO B-PARA.
   
   B-PARA.
   DISPLAY 'IN B-PARA '.
   GO TO C-PARA D-PARA DEPENDING ON WS-A.
   
   C-PARA.
   DISPLAY 'IN C-PARA '.
   
   D-PARA.
   DISPLAY 'IN D-PARA '.
   STOP RUN.

JCL để thực hiện chương trình COBOL ở trên:

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO

Khi bạn biên dịch và thực thi chương trình trên, nó tạo ra kết quả sau:

IN A-PARA
IN B-PARA 
IN D-PARA

Các câu lệnh xử lý chuỗi trong COBOL được sử dụng để thực hiện nhiều hoạt động chức năng trên chuỗi. Sau đây là các câu lệnh xử lý chuỗi:

  • Inspect
  • String
  • Unstring

Quan sát

Kiểm tra động từ được sử dụng để đếm hoặc thay thế các ký tự trong một chuỗi. Các phép toán chuỗi có thể được thực hiện trên các giá trị chữ và số, số hoặc chữ cái. Các hoạt động kiểm tra được thực hiện từ trái sang phải. Các tùy chọn được sử dụng cho các hoạt động chuỗi như sau:

Kiểm đếm

Tùy chọn đếm được sử dụng để đếm các ký tự chuỗi.

Syntax

Sau đây là cú pháp của tùy chọn Kiểm đếm:

INSPECT input-string
TALLYING output-count FOR ALL CHARACTERS

Các tham số được sử dụng là -

  • input-string - Chuỗi có các ký tự được đếm.
  • output-count - Mục dữ liệu để chứa số lượng ký tự.

Example

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-CNT1 PIC 9(2) VALUE 0.
   01 WS-CNT2 PIC 9(2) VALUE 0.
   01 WS-STRING PIC X(15) VALUE 'ABCDACDADEAAAFF'.
   
PROCEDURE DIVISION.
   INSPECT WS-STRING TALLYING WS-CNT1 FOR CHARACTER.
   DISPLAY "WS-CNT1 : "WS-CNT1.
   INSPECT WS-STRING TALLYING WS-CNT2 FOR ALL 'A'.
   DISPLAY "WS-CNT2 : "WS-CNT2
   
STOP RUN.

JCL để thực hiện chương trình COBOL trên.

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO

Khi bạn biên dịch và thực thi chương trình trên, nó tạo ra kết quả sau:

WS-CNT1 : 15
WS-CNT2 : 06

Thay thế

Tùy chọn thay thế được sử dụng để thay thế các ký tự chuỗi.

Syntax

Sau đây là cú pháp của tùy chọn Thay thế:

INSPECT input-string REPLACING ALL char1 BY char2.

Tham số được sử dụng là -

  • input-string - Chuỗi có các ký tự được thay thế từ char1 sang char2.

Example

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-STRING PIC X(15) VALUE 'ABCDACDADEAAAFF'.

PROCEDURE DIVISION.
   DISPLAY "OLD STRING : "WS-STRING.
   INSPECT WS-STRING REPLACING ALL 'A' BY 'X'.
   DISPLAY "NEW STRING : "WS-STRING.
   
STOP RUN.

JCL để thực hiện chương trình COBOL trên.

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO

Khi bạn biên dịch và thực thi chương trình trên, nó tạo ra kết quả sau:

OLD STRING : ABCDACDADEAAAFF
NEW STRING : XBCDXCDXDEXXXFF

Chuỗi

Động từ chuỗi được sử dụng để nối các chuỗi. Sử dụng câu lệnh STRING, hai hoặc nhiều chuỗi ký tự có thể được kết hợp để tạo thành một chuỗi dài hơn. Điều khoản 'Delimited By' là bắt buộc.

Syntax

Sau đây là cú pháp của động từ chuỗi:

STRING ws-string1 DELIMITED BY SPACE
   ws-string2 DELIMITED BY SIZE
   INTO ws-destination-string
   WITH POINTER ws-count
   ON OVERFLOW DISPLAY message1
   NOT ON OVERFLOW DISPLAY message2
END-STRING.

Sau đây là chi tiết của các tham số được sử dụng:

  • ws-string1 và ws-string2: Các chuỗi đầu vào được nối
  • ws-string: Chuỗi đầu ra
  • ws-count: Được sử dụng để đếm độ dài của chuỗi được nối mới
  • Phân cách chỉ định phần cuối của chuỗi
  • Con trỏ và Tràn là tùy chọn

Example

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-STRING PIC A(30).
   01 WS-STR1 PIC A(15) VALUE 'Tutorialspoint'.
   01 WS-STR2 PIC A(7) VALUE 'Welcome'.
   01 WS-STR3 PIC A(7) VALUE 'To AND'.
   01 WS-COUNT PIC 99 VALUE 1.

PROCEDURE DIVISION.
   STRING WS-STR2 DELIMITED BY SIZE
      WS-STR3 DELIMITED BY SPACE
      WS-STR1 DELIMITED BY SIZE
      INTO WS-STRING 
      WITH POINTER WS-COUNT
      ON OVERFLOW DISPLAY 'OVERFLOW!' 
   END-STRING.
   
   DISPLAY 'WS-STRING : 'WS-STRING.
   DISPLAY 'WS-COUNT : 'WS-COUNT.

STOP RUN.

JCL để thực hiện chương trình COBOL ở trên -

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO

Khi bạn biên dịch và thực thi chương trình trên, nó tạo ra kết quả sau:

WS-STRING : WelcomeToTutorialspoint       
WS-COUNT : 25

Tháo dây

Động từ Unstring được sử dụng để chia một chuỗi thành nhiều chuỗi con. Điều khoản Delimited By là bắt buộc.

Syntax

Sau đây là cú pháp của Unstring verb:

UNSTRING ws-string DELIMITED BY SPACE
INTO ws-str1, ws-str2
WITH POINTER ws-count
ON OVERFLOW DISPLAY message
NOT ON OVERFLOW DISPLAY message
END-UNSTRING.

Example

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-STRING PIC A(30) VALUE 'WELCOME TO TUTORIALSPOINT'.
   01 WS-STR1 PIC A(7).
   01 WS-STR2 PIC A(2).
   01 WS-STR3 PIC A(15).
   01 WS-COUNT PIC 99 VALUE 1.

PROCEDURE DIVISION.
   UNSTRING WS-STRING DELIMITED BY SPACE
      INTO WS-STR1, WS-STR2, WS-STR3
   END-UNSTRING.
   
   DISPLAY 'WS-STR1 : 'WS-STR1.
   DISPLAY 'WS-STR2 : 'WS-STR2.
   DISPLAY 'WS-STR3 : 'WS-STR3.
   
STOP RUN.

JCL để thực hiện chương trình COBOL ở trên -

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO

Khi bạn biên dịch và thực thi chương trình trên, nó tạo ra kết quả sau:

WS-STR1 : WELCOME
WS-STR2 : TO
WS-STR3 : TUTORIALSPOINT

Mảng trong COBOL được gọi là bảng. Mảng là một cấu trúc dữ liệu tuyến tính và là một tập hợp các mục dữ liệu riêng lẻ cùng kiểu. Các mục dữ liệu của bảng được sắp xếp nội bộ.

Khai báo bảng

Bảng được khai báo trong Phân chia dữ liệu. Occursmệnh đề được sử dụng để xác định một bảng. Mệnh đề xảy ra chỉ ra sự lặp lại của định nghĩa tên dữ liệu. Nó chỉ có thể được sử dụng với số cấp bắt đầu từ 02 đến 49. Không sử dụng mệnh đề xảy ra với Định nghĩa lại. Mô tả bảng một chiều và hai chiều như sau:

Bảng một chiều

Trong bảng một chiều, occursmệnh đề chỉ được sử dụng một lần trong khai báo. WSTABLE là mục nhóm có chứa bảng. WS-B đặt tên cho các phần tử bảng xuất hiện 10 lần.

Syntax

Sau đây là cú pháp để xác định bảng một chiều:

01 WS-TABLE.
   05 WS-A PIC A(10) OCCURS 10 TIMES.

Example

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-TABLE.
      05 WS-A PIC A(10) VALUE 'TUTORIALS' OCCURS 5 TIMES.     

PROCEDURE DIVISION.
   DISPLAY "ONE-D TABLE : "WS-TABLE.
STOP RUN.

JCL để thực hiện chương trình COBOL ở trên -

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO

Khi bạn biên dịch và thực thi chương trình trên, nó tạo ra kết quả sau:

ONE-D TABLE : TUTORIALS TUTORIALS TUTORIALS TUTORIALS TUTORIALS

Bảng hai chiều

Một bảng hai chiều được tạo với cả hai phần tử dữ liệu có độ dài thay đổi. Để tham khảo, hãy xem qua cú pháp và sau đó thử phân tích bảng. Mảng đầu tiên (WS-A) có thể xảy ra từ 1 đến 10 lần và mảng bên trong (WS-C) có thể xảy ra từ 1 đến 5 lần. Với mỗi mục WS-A sẽ có 5 mục WS-C tương ứng.

Syntax

Sau đây là cú pháp để xác định bảng hai chiều:

01 WS-TABLE.
   05 WS-A OCCURS 10 TIMES.
      10 WS-B PIC A(10).
      10 WS-C OCCURS 5 TIMES.
         15 WS-D PIC X(6).

Example

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-TABLE.
      05 WS-A OCCURS 2 TIMES.
         10 WS-B PIC A(10) VALUE ' TUTORIALS'.
         10 WS-C OCCURS 2 TIMES.
            15 WS-D PIC X(6) VALUE ' POINT'.

PROCEDURE DIVISION.
   DISPLAY "TWO-D TABLE : "WS-TABLE.

STOP RUN.

JCL để thực hiện chương trình COBOL ở trên -

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO

Khi bạn biên dịch và thực thi chương trình trên, nó tạo ra kết quả sau:

TWO-D TABLE :  TUTORIALS POINT POINT TUTORIALS POINT POINT

Chỉ số phụ

Các phần tử riêng lẻ của bảng có thể được truy cập bằng cách sử dụng chỉ số con. Giá trị chỉ số con có thể nằm trong khoảng từ 1 đến số lần bảng xảy ra. Chỉ số phụ có thể là bất kỳ số dương nào. Nó không yêu cầu bất kỳ khai báo nào trong phân chia dữ liệu. Nó được tạo tự động với mệnh đề xảy ra.

Example

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-TABLE.
      05 WS-A OCCURS 3 TIMES.
         10 WS-B PIC A(2).
         10 WS-C OCCURS 2 TIMES.
            15 WS-D PIC X(3).

PROCEDURE DIVISION.
   MOVE '12ABCDEF34GHIJKL56MNOPQR' TO WS-TABLE.
   DISPLAY 'WS-TABLE  : ' WS-TABLE.
   DISPLAY 'WS-A(1)   : ' WS-A(1).
   DISPLAY 'WS-C(1,1) : ' WS-C(1,1).
   DISPLAY 'WS-C(1,2) : ' WS-C(1,2).
   DISPLAY 'WS-A(2)   : ' WS-A(2).
   DISPLAY 'WS-C(2,1) : ' WS-C(2,1).
   DISPLAY 'WS-C(2,2) : ' WS-C(2,2).
   DISPLAY 'WS-A(3)   : ' WS-A(3).
   DISPLAY 'WS-C(3,1) : ' WS-C(3,1).
   DISPLAY 'WS-C(3,2) : ' WS-C(3,2).
   
STOP RUN.

JCL để thực hiện chương trình COBOL ở trên -

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO

Khi bạn biên dịch và thực thi chương trình trên, nó tạo ra kết quả sau:

WS-TABLE  : 12ABCDEF34GHIJKL56MNOPQR
WS-A(1)   : 12ABCDEF
WS-C(1,1) : ABC
WS-C(1,2) : DEF
WS-A(2)   : 34GHIJKL
WS-C(2,1) : GHI
WS-C(2,2) : JKL
WS-A(3)   : 56MNOPQR
WS-C(3,1) : MNO
WS-C(3,2) : PQR

Mục lục

Các phần tử bảng cũng có thể được truy cập bằng chỉ mục. Chỉ mục là một sự dịch chuyển của phần tử từ đầu bảng. Một chỉ mục được khai báo với mệnh đề xảy ra bằng mệnh đề INDEXED BY. Giá trị của chỉ mục có thể được thay đổi bằng cách sử dụng câu lệnh SET và tùy chọn thay đổi PERFORM.

Syntax

Sau đây là cú pháp để xác định Chỉ mục trong bảng:

01 WS-TABLE.
   05 WS-A PIC A(10) OCCURS 10 TIMES INDEXED BY I.

Example

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-TABLE.
      05 WS-A OCCURS 3 TIMES INDEXED BY I.
         10 WS-B PIC A(2).
         10 WS-C OCCURS 2 TIMES INDEXED BY J.
            15 WS-D PIC X(3).

PROCEDURE DIVISION.
   MOVE '12ABCDEF34GHIJKL56MNOPQR' TO WS-TABLE.
   PERFORM A-PARA VARYING I FROM 1 BY 1 UNTIL I >3 
   STOP RUN.
   
   A-PARA.
   PERFORM C-PARA VARYING J FROM 1 BY 1 UNTIL J>2.
   
   C-PARA.
   DISPLAY WS-C(I,J).

JCL để thực hiện chương trình COBOL ở trên -

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO

Khi bạn biên dịch và thực thi chương trình trên, nó tạo ra kết quả sau:

ABC
DEF
GHI
JKL
MNO
PQR

Đặt câu lệnh

Câu lệnh set được sử dụng để thay đổi giá trị chỉ mục. Động từ set được sử dụng để khởi tạo, tăng hoặc giảm giá trị chỉ mục. Nó được sử dụng với Tìm kiếm và Tìm kiếm Tất cả để xác định vị trí các phần tử trong bảng.

Syntax

Sau đây là cú pháp để sử dụng câu lệnh Set:

SET I J TO positive-number
SET I TO J
SET I TO 5
SET I J UP BY 1
SET J DOWN BY 5

Example

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-TABLE.
      05 WS-A OCCURS 3 TIMES INDEXED BY I.
         10 WS-B PIC A(2).
         10 WS-C OCCURS 2 TIMES INDEXED BY J.
            15 WS-D PIC X(3).

PROCEDURE DIVISION.
   MOVE '12ABCDEF34GHIJKL56MNOPQR' TO WS-TABLE.
   SET I J TO 1.
   DISPLAY WS-C(I,J).
   SET I J UP BY 1.
   DISPLAY WS-C(I,J).
   
STOP RUN.

JCL để thực hiện chương trình COBOL trên.

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO

Khi bạn biên dịch và thực thi chương trình trên, nó tạo ra kết quả sau:

ABC
JKL

Tìm kiếm

Tìm kiếm là một phương pháp tìm kiếm tuyến tính, được sử dụng để tìm các phần tử bên trong bảng. Nó có thể được thực hiện trên bảng được sắp xếp cũng như không được sắp xếp. Nó chỉ được sử dụng cho các bảng được khai báo bằng cụm từ Chỉ mục. Nó bắt đầu với giá trị ban đầu của chỉ mục. Nếu phần tử được tìm kiếm không được tìm thấy, thì chỉ mục sẽ tự động tăng lên 1 và nó tiếp tục cho đến cuối bảng.

Example

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-TABLE.
      05 WS-A PIC X(1) OCCURS 18 TIMES INDEXED BY I.
   01 WS-SRCH PIC A(1) VALUE 'M'.

PROCEDURE DIVISION.
   MOVE 'ABCDEFGHIJKLMNOPQR' TO WS-TABLE.
   SET I TO 1.
   SEARCH WS-A
      AT END DISPLAY 'M NOT FOUND IN TABLE'
      WHEN WS-A(I) = WS-SRCH
      DISPLAY 'LETTER M FOUND IN TABLE'
   END-SEARCH.  

STOP RUN.

JCL để thực hiện chương trình COBOL trên.

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO

Khi bạn biên dịch và thực thi chương trình trên, nó tạo ra kết quả sau:

LETTER M FOUND IN TABLE

Tìm kiếm tất cả

Tìm kiếm Tất cả là một phương pháp tìm kiếm nhị phân, được sử dụng để tìm các phần tử bên trong bảng. Bảng phải được sắp xếp theo thứ tự cho tùy chọn Tìm kiếm Tất cả. Chỉ mục không yêu cầu khởi tạo. Trong tìm kiếm nhị phân, bảng được chia thành hai nửa và nó xác định trong đó một nửa phần tử được tìm kiếm có mặt. Quá trình này lặp lại cho đến khi phần tử được tìm thấy hoặc kết thúc.

Example

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-TABLE.
      05 WS-RECORD OCCURS 10 TIMES ASCENDING KEY IS WS-NUM INDEXED BY I.
      10 WS-NUM PIC 9(2).
      10 WS-NAME PIC A(3).

PROCEDURE DIVISION.
   MOVE '12ABC56DEF34GHI78JKL93MNO11PQR' TO WS-TABLE.
   SEARCH ALL WS-RECORD
     AT END DISPLAY 'RECORD NOT FOUND'
     WHEN WS-NUM(I) = 93
     DISPLAY 'RECORD FOUND '
     DISPLAY WS-NUM(I)
     DISPLAY WS-NAME(I)

END-SEARCH.

JCL để thực hiện chương trình COBOL ở trên -

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO

Khi bạn biên dịch và thực thi chương trình trên, nó tạo ra kết quả sau:

RECORD FOUND 
93
MNO

Khái niệm tệp trong COBOL khác với khái niệm trong C / C ++. Trong khi học các khái niệm cơ bản về 'Tệp' trong COBOL, không nên lồng ghép các khái niệm của cả hai ngôn ngữ. Thay vào đó, không thể sử dụng các tệp văn bản đơn giản trong COBOLPS (Physical Sequential)VSAMcác tệp được sử dụng. Các tệp PS sẽ được thảo luận trong mô-đun này.

Để hiểu cách xử lý tệp trong COBOL, người ta phải biết các thuật ngữ cơ bản. Các điều khoản này chỉ dùng để hiểu các nguyên tắc cơ bản về xử lý tệp. Thuật ngữ chuyên sâu hơn sẽ được thảo luận trong chương 'Động từ xử lý tệp'. Sau đây là các thuật ngữ cơ bản -

  • Field
  • Record
  • Hồ sơ vật lý
  • Bản ghi lôgic
  • File

Ví dụ sau giúp hiểu các thuật ngữ này -

Cánh đồng

Trường được sử dụng để chỉ ra dữ liệu được lưu trữ về một phần tử. Nó đại diện cho một phần tử duy nhất như được hiển thị trong ví dụ trên, chẳng hạn như id sinh viên, tên, điểm, tổng điểm và tỷ lệ phần trăm. Số lượng ký tự trong bất kỳ trường nào được gọi là kích thước trường, ví dụ: tên sinh viên có thể có 10 ký tự. Các trường có thể có các thuộc tính sau:

  • Primary keyslà những trường duy nhất cho mỗi bản ghi và được sử dụng để xác định một bản ghi cụ thể. Ví dụ: trong tệp đánh giá sinh viên, mỗi sinh viên sẽ có một id sinh viên duy nhất tạo thành khóa chính.

  • Secondary keyslà các trường duy nhất hoặc không duy nhất được sử dụng để tìm kiếm dữ liệu liên quan. Ví dụ, trong tệp đánh giá sinh viên, họ tên của sinh viên có thể được sử dụng làm khóa phụ khi không biết id sinh viên.

  • Descriptorscác trường được sử dụng để mô tả một thực thể. Ví dụ, trong tệp đánh dấu của sinh viên, các trường đánh dấu và tỷ lệ phần trăm bổ sung ý nghĩa cho bản ghi là các bộ mô tả đã biết.

Ghi lại

Bản ghi là một tập hợp các trường được sử dụng để mô tả một thực thể. Một hoặc nhiều trường cùng nhau tạo thành một bản ghi. Ví dụ, trong tệp sinh viên đánh dấu tệp, id sinh viên, tên, điểm, tổng điểm và tỷ lệ phần trăm tạo thành một bản ghi. Kích thước tích lũy của tất cả các trường trong một bản ghi được gọi là kích thước bản ghi. Các bản ghi có trong tệp có thể có độ dài cố định hoặc độ dài thay đổi.

Hồ sơ vật lý

Hồ sơ vật lý là thông tin tồn tại trên thiết bị bên ngoài. Nó còn được gọi là một khối.

Bản ghi lôgic

Bản ghi lôgic là thông tin được sử dụng bởi chương trình. Trong các chương trình COBOL, chỉ một bản ghi có thể được xử lý tại bất kỳ thời điểm nào và nó được gọi là bản ghi logic.

Tập tin

Tệp là tập hợp các bản ghi liên quan. Ví dụ, tệp điểm của học sinh bao gồm các bản ghi của tất cả học sinh.

Tổ chức tệp cho biết cách tổ chức các bản ghi trong một tệp. Có nhiều loại tổ chức khác nhau cho tệp để tăng hiệu quả truy cập hồ sơ. Sau đây là các loại lược đồ tổ chức tệp:

  • Tổ chức tệp tuần tự
  • Tổ chức tệp tuần tự được lập chỉ mục
  • Tổ chức tệp tương đối

Các cú pháp trong mô-đun này, được đề cập cùng với các thuật ngữ tương ứng, chỉ đề cập đến việc sử dụng chúng trong chương trình. Các chương trình hoàn chỉnh sử dụng các cú pháp này sẽ được thảo luận trong chương 'Động từ xử lý tệp'.

Tổ chức tệp tuần tự

Tệp tuần tự bao gồm các bản ghi được lưu trữ và truy cập theo thứ tự tuần tự. Sau đây là các thuộc tính chính của tổ chức tệp tuần tự:

  • Các bản ghi có thể được đọc theo thứ tự tuần tự. Để đọc bản ghi thứ 10 , tất cả 9 bản ghi trước đó phải được đọc.

  • Hồ sơ được viết theo thứ tự tuần tự. Bản ghi mới không thể được chèn vào giữa. Một bản ghi mới luôn được chèn vào cuối tệp.

  • Sau khi đặt một bản ghi thành một tệp tuần tự, không thể xóa, rút ​​ngắn hoặc kéo dài bản ghi.

  • Thứ tự của các bản ghi, một khi đã được chèn, không bao giờ có thể thay đổi được.

  • Có thể cập nhật hồ sơ. Một bản ghi có thể được ghi đè, nếu độ dài bản ghi mới bằng độ dài bản ghi cũ.

  • Các tệp đầu ra tuần tự là tùy chọn tốt để in.

Cú pháp

Sau đây là cú pháp của tổ chức tệp tuần tự:

INPUT-OUTPUT SECTION.
FILE-CONTROL.
   SELECT file-name ASSIGN TO dd-name-jcl
   ORGANIZATION IS SEQUENTIAL

Tổ chức tệp tuần tự được lập chỉ mục

Một tệp tuần tự được lập chỉ mục bao gồm các bản ghi có thể được truy cập tuần tự. Truy cập trực tiếp cũng có thể. Nó bao gồm hai phần -

  • Data File chứa các bản ghi trong lược đồ tuần tự.

  • Index File chứa khóa chính và địa chỉ của nó trong tệp dữ liệu.

Sau đây là các thuộc tính chính của tổ chức tệp tuần tự:

  • Các bản ghi có thể được đọc theo thứ tự tuần tự giống như trong tổ chức tệp tuần tự.

  • Các bản ghi có thể được truy cập ngẫu nhiên nếu khóa chính được biết. Tệp chỉ mục được sử dụng để lấy địa chỉ của một bản ghi và sau đó bản ghi được tìm nạp từ tệp dữ liệu.

  • Chỉ mục đã sắp xếp được duy trì trong hệ thống tệp này liên quan đến giá trị khóa với vị trí của bản ghi trong tệp.

  • Chỉ mục thay thế cũng có thể được tạo để tìm nạp các bản ghi.

Cú pháp

Sau đây là cú pháp của tổ chức tệp tuần tự được lập chỉ mục:

INPUT-OUTPUT SECTION.
FILE-CONTROL.
   SELECT file-name ASSIGN TO dd-name-jcl
   ORGANIZATION IS INDEXED
   RECORD KEY IS primary-key
   ALTERNATE RECORD KEY IS rec-key

Tổ chức tệp tương đối

Một tệp tương đối bao gồm các bản ghi được sắp xếp theo thứ tự relative address. Sau đây là các thuộc tính chính của tổ chức tệp tương đối:

  • Các bản ghi có thể được đọc theo thứ tự tuần tự giống như trong tổ chức tệp tuần tự và được lập chỉ mục.

  • Hồ sơ có thể được truy cập bằng cách sử dụng khóa tương đối. Khóa tương đối đại diện cho vị trí của bản ghi so với địa chỉ nơi bắt đầu tệp.

  • Bản ghi có thể được chèn bằng cách sử dụng khóa tương đối. Địa chỉ tương đối được tính bằng khóa tương đối.

  • Tệp tương đối cung cấp quyền truy cập nhanh nhất vào các bản ghi.

  • Nhược điểm chính của hệ thống tệp này là nếu thiếu một số bản ghi trung gian, chúng cũng sẽ chiếm dung lượng.

Cú pháp

Sau đây là cú pháp của tổ chức tệp tương đối:

INPUT-OUTPUT SECTION.
FILE-CONTROL.
   SELECT file-name ASSIGN TO dd-name-jcl
   ORGANIZATION IS RELATIVE
   RELATIVE KEY IS rec-key

Cho đến bây giờ, các kế hoạch tổ chức tệp đã được thảo luận. Đối với mỗi lược đồ tổ chức tệp, các chế độ truy cập khác nhau có thể được sử dụng. Sau đây là các loại chế độ truy cập tệp:

  • Truy cập tuần tự
  • Truy cập ngẫu nhiên
  • Truy cập động

Các cú pháp trong mô-đun này, được đề cập cùng với các thuật ngữ tương ứng, chỉ đề cập đến việc sử dụng chúng trong chương trình. Các chương trình hoàn chỉnh sử dụng các cú pháp này sẽ được thảo luận trong chương tiếp theo.

Truy cập tuần tự

Khi chế độ truy cập là tuần tự, phương pháp truy xuất bản ghi sẽ thay đổi theo tổ chức tệp đã chọn.

  • Đối với sequential files, các bản ghi được truy cập theo cùng thứ tự mà chúng đã được chèn vào.

  • Đối với indexed files, tham số được sử dụng để tìm nạp các bản ghi là các giá trị khóa bản ghi.

  • Đối với relative files, các khóa bản ghi tương đối được sử dụng để truy xuất các bản ghi.

Cú pháp

Sau đây là cú pháp của chế độ truy cập tuần tự:

ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
   SELECT file-name ASSIGN TO dd-name
   ORGANIZATION IS SEQUENTIAL
   ACCESS MODE IS SEQUENTIAL
	
	
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
   FILE-CONTROL.
   SELECT file-name ASSIGN TO dd-name
   ORGANIZATION IS INDEXED
   ACCESS MODE IS SEQUENTIAL
   RECORD KEY IS rec-key1
   ALTERNATE RECORD KEY IS rec-key2

		
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
   FILE-CONTROL.
   SELECT file-name ASSIGN TO dd-name
   ORGANIZATION IS RELATIVE
   ACCESS MODE IS SEQUENTIAL
   RELATIVE KEY IS rec-key1

Truy cập ngẫu nhiên

Khi chế độ truy cập là NGẪU NHIÊN, phương pháp truy xuất bản ghi sẽ thay đổi theo tổ chức tệp đã chọn.

  • Đối với indexed files, các bản ghi được truy cập theo giá trị được đặt trong trường khóa có thể là khóa chính hoặc khóa thay thế. Có thể có một hoặc nhiều chỉ mục thay thế.

  • Đối với relative files , các bản ghi được truy xuất thông qua các khóa bản ghi tương đối.

Cú pháp

Sau đây là cú pháp của chế độ truy cập ngẫu nhiên:

ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
   FILE-CONTROL.
   SELECT file-name ASSIGN TO dd-name
   ORGANIZATION IS INDEXED
   ACCESS MODE IS RANDOM
   RECORD KEY IS rec-key1
   ALTERNATE RECORD KEY IS rec-key2

		
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
   FILE-CONTROL.
   SELECT file-name ASSIGN TO dd-name
   ORGANIZATION IS RELATIVE
   ACCESS MODE IS RANDOM
   RELATIVE KEY IS rec-key1

Truy cập động

Truy cập động hỗ trợ cả truy cập tuần tự và truy cập ngẫu nhiên trong cùng một chương trình. Với quyền truy cập động, một định nghĩa tệp được sử dụng để thực hiện cả xử lý tuần tự và xử lý ngẫu nhiên như truy cập một số bản ghi theo thứ tự tuần tự và các bản ghi khác bằng khóa của chúng.

Với các tệp tương đối và được lập chỉ mục, chế độ truy cập động cho phép bạn chuyển đổi qua lại giữa chế độ truy cập tuần tự và chế độ truy cập ngẫu nhiên trong khi đọc tệp bằng cách sử dụng cụm từ NEXT trên câu lệnh READ. Các chức năng NEXT và READ sẽ được thảo luận trong chương tiếp theo.

Cú pháp

Sau đây là cú pháp của chế độ truy cập động:

ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
   FILE-CONTROL.
   SELECT file-name ASSIGN TO dd-name
   ORGANIZATION IS SEQUENTIAL
   ACCESS MODE IS DYNAMIC
   RECORD KEY IS rec-key1
   ALTERNATE RECORD KEY IS rec-key2

		
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
   FILE-CONTROL.
   SELECT file-name ASSIGN TO dd-name
   ORGANIZATION IS RELATIVE
   ACCESS MODE IS DYNAMIC
   RELATIVE KEY IS rec-key1

Các động từ xử lý tệp được sử dụng để thực hiện các hoạt động khác nhau trên tệp. Sau đây là các động từ xử lý tệp:

  • Open
  • Read
  • Write
  • Rewrite
  • Delete
  • Start
  • Close

Mở động từ

Mở là thao tác tệp đầu tiên phải được thực hiện. Nếu Mở thành công, thì chỉ có thể thực hiện thêm các thao tác trên tệp. Chỉ sau khi mở tệp, các biến trong cấu trúc tệp mới có sẵn để xử lý.FILE STATUS biến được cập nhật sau mỗi hoạt động tệp.

Cú pháp

OPEN "mode" file-name.

Ở đây, tên tệp là chuỗi ký tự, bạn sẽ sử dụng để đặt tên tệp của mình. Một tệp có thể được mở ở các chế độ sau:

Sr.No. Chế độ & Mô tả
1

Input

Chế độ đầu vào được sử dụng cho các tệp hiện có. Ở chế độ này, chúng ta chỉ có thể đọc tệp, không cho phép thực hiện các thao tác khác trên tệp.

2

Output

Chế độ đầu ra được sử dụng để chèn các bản ghi trong tệp. Nếu mộtsequential fileđược sử dụng và tệp đang giữ một số bản ghi, sau đó các bản ghi hiện có sẽ bị xóa trước tiên và sau đó các bản ghi mới sẽ được chèn vào tệp. Nó sẽ không xảy ra như vậy trong trường hợpindexed file hoặc một relative file.

3

Extend

Chế độ mở rộng được sử dụng để nối các bản ghi trong sequential file. Trong chế độ này, các bản ghi được chèn vào cuối. Nếu chế độ truy cập tệp làRandom hoặc là Dynamic, thì không thể sử dụng chế độ mở rộng.

4

I-O

Chế độ Input-Output được sử dụng để đọc và viết lại các bản ghi của một tệp.

Đọc động từ

Động từ đọc được sử dụng để đọc các bản ghi tệp. Chức năng của đọc là tìm nạp các bản ghi từ một tệp. Tại mỗi động từ đọc, chỉ một bản ghi có thể được đọc vào cấu trúc tệp. Để thực hiện thao tác đọc, hãy mở tệp ở chế độ INPUT hoặc IO. Tại mỗi câu lệnh đọc, con trỏ tệp được tăng lên và do đó các bản ghi kế tiếp được đọc.

Cú pháp

Sau đây là cú pháp để đọc các bản ghi khi chế độ truy cập tệp là tuần tự:

READ file-name NEXT RECORD INTO ws-file-structure
   AT END DISPLAY 'End of File'
   NOT AT END DISPLAY 'Record Details:' ws-file-structure
END-READ.

Sau đây là các tham số được sử dụng:

  • NEXT RECORD là tùy chọn và được chỉ định khi một tệp tuần tự được lập chỉ mục đang được đọc tuần tự.

  • Mệnh đề INTO là tùy chọn. ws-file-structure được định nghĩa trong Phần WorkingStorage để lấy các giá trị từ câu lệnh READ.

  • Điều kiện AT END trở thành True khi đạt đến cuối tệp.

Example- Ví dụ sau đây đọc một tệp hiện có bằng cách sử dụng tổ chức tuần tự dòng. Chương trình này có thể được biên dịch và thực thi bằngLive Demo tùy chọn nơi nó sẽ hiển thị tất cả các bản ghi có trong tệp.

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

ENVIRONMENT DIVISION.
   INPUT-OUTPUT SECTION.
      FILE-CONTROL.
      SELECT STUDENT ASSIGN TO 'input.txt'
      ORGANIZATION IS LINE SEQUENTIAL.            

DATA DIVISION.
   FILE SECTION.
   FD STUDENT.
   01 STUDENT-FILE.
      05 STUDENT-ID PIC 9(5).
      05 NAME PIC A(25).

   WORKING-STORAGE SECTION.
   01 WS-STUDENT.
      05 WS-STUDENT-ID PIC 9(5).
      05 WS-NAME PIC A(25).
   01 WS-EOF PIC A(1). 

PROCEDURE DIVISION.
   OPEN INPUT STUDENT.
      PERFORM UNTIL WS-EOF='Y'
         READ STUDENT INTO WS-STUDENT
            AT END MOVE 'Y' TO WS-EOF
            NOT AT END DISPLAY WS-STUDENT
         END-READ
      END-PERFORM.
   CLOSE STUDENT.
STOP RUN.

Giả sử dữ liệu tệp đầu vào có sẵn trong input.txt tệp chứa những thứ sau -

20003 Mohtashim M.
20004 Nishant Malik
20005 Amitabh Bachhan

Khi bạn biên dịch và thực thi chương trình trên, nó tạo ra kết quả sau:

20003 Mohtashim M.            
20004 Nishant Malik           
20005 Amitabh Bachhan

Cú pháp

Sau đây là cú pháp để đọc bản ghi khi chế độ truy cập tệp là ngẫu nhiên:

READ file-name RECORD INTO ws-file-structure
   KEY IS rec-key
   INVALID KEY DISPLAY 'Invalid Key'
   NOT INVALID KEY DISPLAY 'Record Details: ' ws-file-structure
END-READ.

Example- Ví dụ sau đây đọc một tệp hiện có bằng cách sử dụng tổ chức được lập chỉ mục. Chương trình này có thể được biên dịch và thực thi bằngJCLtrên Mainframes nơi nó sẽ hiển thị tất cả các bản ghi có trong tệp. Trên máy chủ Mainframes, chúng tôi không sử dụng tệp văn bản; thay vào đó chúng tôi sử dụng các tệp PS.

Giả sử rằng tệp hiện có trên Máy tính lớn có nội dung giống như tệp input.txt trong ví dụ trên.

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

ENVIRONMENT DIVISION.
   INPUT-OUTPUT SECTION.
   FILE-CONTROL.
   SELECT STUDENT ASSIGN TO IN1
      ORGANIZATION IS INDEXED
      ACCESS IS RANDOM
      RECORD KEY IS STUDENT-ID
      FILE STATUS IS FS.

DATA DIVISION.
   FILE SECTION.
   FD STUDENT.
      01 STUDENT-FILE.
      05 STUDENT-ID PIC 9(5).
      05 NAME PIC A(25).
     
   WORKING-STORAGE SECTION.
   01 WS-STUDENT.
      05 WS-STUDENT-ID PIC 9(5).
      05 WS-NAME PIC A(25).

PROCEDURE DIVISION.
   OPEN INPUT STUDENT.
      MOVE 20005 TO STUDENT-ID.
      
      READ STUDENT RECORD INTO WS-STUDENT-FILE
         KEY IS STUDENT-ID
         INVALID KEY DISPLAY 'Invalid Key'
         NOT INVALID KEY DISPLAY WS-STUDENT-FILE
      END-READ.
      
   CLOSE STUDENT.
STOP RUN.

JCL để thực hiện chương trình COBOL ở trên -

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
//IN1 DD DSN = STUDENT-FILE-NAME,DISP=SHR

Khi bạn biên dịch và thực thi chương trình trên, nó tạo ra kết quả sau:

20005 Amitabh Bachhan

Viết động từ

Động từ ghi được sử dụng để chèn các bản ghi trong một tệp. Khi bản ghi được ghi, nó không còn có sẵn trong bộ đệm bản ghi. Trước khi chèn các bản ghi vào tệp, hãy di chuyển các giá trị vào bộ đệm bản ghi và sau đó thực hiện động từ ghi.

Viết câu lệnh có thể được sử dụng với FROMtùy chọn ghi trực tiếp bản ghi từ các biến lưu trữ đang hoạt động. Từ là một mệnh đề tùy chọn. Nếu chế độ truy cập là tuần tự, thì để ghi bản ghi, tệp phải mở ở chế độ Đầu ra hoặc chế độ Mở rộng. Nếu chế độ truy cập là ngẫu nhiên hoặc động, thì để ghi bản ghi, tệp phải mở ở chế độ Đầu ra hoặc chế độ IO.

Cú pháp

Sau đây là cú pháp để đọc bản ghi khi tổ chức tệp là tuần tự:

WRITE record-buffer [FROM ws-file-structure]
END-WRITE.

Sau đây là cú pháp để đọc bản ghi khi tổ chức tệp được lập chỉ mục hoặc tương đối:

WRITE record-buffer [FROM ws-file-structure]
   INVALID KEY DISPLAY 'Invalid Key'
   NOT INVALID KEY DISPLAY 'Record Inserted'
END-WRITE.

Example - Ví dụ sau cho thấy cách chèn một bản ghi mới trong một tệp mới khi tổ chức tuần tự.

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

ENVIRONMENT DIVISION.
   INPUT-OUTPUT SECTION.
   FILE-CONTROL.
   SELECT STUDENT ASSIGN TO OUT1
      ORGANIZATION IS SEQUENTIAL
      ACCESS IS SEQUENTIAL
      FILE STATUS IS FS.

DATA DIVISION.
   FILE SECTION.
   FD STUDENT
   01 STUDENT-FILE.
      05 STUDENT-ID PIC 9(5).
      05 NAME PIC A(25).
      05 CLASS PIC X(3).

   WORKING-STORAGE SECTION.
   01 WS-STUDENT.
      05 WS-STUDENT-ID PIC 9(5).
      05 WS-NAME PIC A(25).
      05 WS-CLASS PIC X(3).

PROCEDURE DIVISION.
   OPEN EXTEND STUDENT.
      MOVE 1000 TO STUDENT-ID.
      MOVE 'Tim' TO NAME.
      MOVE '10' TO CLASS.
      WRITE STUDENT-FILE
      END-WRITE.	
   CLOSE STUDENT.
STOP RUN.

JCL để thực hiện chương trình COBOL ở trên -

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
//OUT1 DD DSN = OUTPUT-FILE-NAME,DISP = (NEW,CATALOG,DELETE)

Khi bạn biên dịch và thực thi chương trình trên, nó sẽ thêm một bản ghi mới vào tệp đầu ra.

1000 Tim         10

Viết lại động từ

Động từ ghi lại được sử dụng để cập nhật các bản ghi. Tệp phải được mở ở chế độ IO để ghi lại các thao tác. Nó chỉ có thể được sử dụng sau khi thao tác Đọc thành công. Động từ ghi lại ghi đè lên lần đọc bản ghi cuối cùng.

Cú pháp

Sau đây là cú pháp để đọc bản ghi khi tổ chức tệp là tuần tự:

REWRITE record-buffer [FROM ws-file-structure]
END-REWRITE.

Sau đây là cú pháp để đọc bản ghi khi tổ chức tệp được lập chỉ mục hoặc tương đối:

REWRITE record-buffer [FROM ws-file-structure]
   INVALID KEY DISPLAY 'Invalid Key'
   NOT INVALID KEY DISPLAY 'Record Updated'
END-REWRITE.

Example - Ví dụ sau đây cho thấy cách cập nhật bản ghi hiện có mà chúng tôi đã chèn trong bước Ghi trước đó -

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

ENVIRONMENT DIVISION.
   INPUT-OUTPUT SECTION.
   FILE-CONTROL.
   SELECT STUDENT ASSIGN TO IN1
      ORGANIZATION IS INDEXED
      ACCESS IS RANDOM
      RECORD KEY IS STUDENT-ID
      FILE STATUS IS FS.

DATA DIVISION.
   FILE SECTION.
   FD STUDENT
   01 STUDENT-FILE.
      05 STUDENT-ID PIC 9(4).
      05 NAME PIC A(12).
      05 CLASS PIC X(3).
      
   WORKING-STORAGE SECTION.
   01 WS-STUDENT.
      05 WS-STUDENT-ID PIC 9(5).
      05 WS-NAME PIC A(25).
      05 WS-CLASS PIC X(3).

PROCEDURE DIVISION.
   OPEN I-O STUDENT.
   MOVE '1000' TO STUDENT-ID.
  
   READ STUDENT
      KEY IS STUDENT-ID
      INVALID KEY DISPLAY ‘KEY IS NOT EXISTING’
   END-READ.
  
   MOVE 'Tim Dumais' TO NAME.
   REWRITE STUDENT-FILE
   END-REWRITE.
   CLOSE STUDENT.
STOP RUN.

JCL để thực hiện chương trình COBOL ở trên -

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
//IN1 DD DSN = OUTPUT-FILE-NAME,DISP = SHR

Khi bạn biên dịch và thực thi chương trình trên, nó sẽ cập nhật bản ghi -

1000 Tim Dumais  10

Xóa động từ

Xóa động từ chỉ có thể được thực hiện trên các tệp được lập chỉ mục và tương đối. Tệp phải được mở ở chế độ IO. Trong tổ chức tệp tuần tự, các bản ghi không thể bị xóa. Bản ghi được đọc lần cuối bởi câu lệnh Read sẽ bị xóa trong trường hợp chế độ truy cập tuần tự. Trong chế độ truy cập ngẫu nhiên, chỉ định khóa ghi và sau đó thực hiện thao tác Xóa.

Cú pháp

Sau đây là cú pháp để xóa một bản ghi:

DELETE file-name RECORD
   INVALID KEY DISPLAY 'Invalid Key'
   NOT INVALID KEY DISPLAY 'Record Deleted'
END-DELETE.

Example - để xóa một bản ghi hiện có -

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

ENVIRONMENT DIVISION.
   INPUT-OUTPUT SECTION.
   FILE-CONTROL.
   SELECT STUDENT ASSIGN TO OUT1
      ORGANIZATION IS INDEXED
      ACCESS IS RANDOM
      RECORD KEY IS STUDENT-ID
      FILE STATUS IS FS.

DATA DIVISION.
   FILE SECTION.
   FD STUDENT
   01 STUDENT-FILE.
      05 STUDENT-ID PIC 9(4).
      05 NAME PIC A(12).
      05 CLASS PIC X(3).
   WORKING-STORAGE SECTION.
   01 WS-STUDENT.
      05 WS-STUDENT-ID PIC 9(5).
      05 WS-NAME PIC A(25).
      05 WS-CLASS PIC X(3).

PROCEDURE DIVISION.
   OPEN I-O STUDENT.
   MOVE '1000' TO STUDENT-ID.
   
   DELETE STUDENT RECORD
      INVALID KEY DISPLAY 'Invalid Key'
      NOT INVALID KEY DISPLAY 'Record Deleted'
   END-DELETE.
   
   CLOSE STUDENT.
STOP RUN.

JCL để thực hiện chương trình COBOL ở trên -

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
//OUT1 DD DSN = OUTPUT-FILE-NAME,DISP = SHR

Khi bạn biên dịch và thực thi chương trình trên, nó tạo ra kết quả sau:

Record Deleted

Bắt đầu động từ

Động từ bắt đầu chỉ có thể được thực hiện trên các tệp được lập chỉ mục và tệp tương đối. Nó được sử dụng để đặt con trỏ tệp tại một bản ghi cụ thể. Chế độ truy cập phải tuần tự hoặc động. Tệp phải được mở ở chế độ IO hoặc Input.

Cú pháp

Sau đây là cú pháp để đặt con trỏ tại một bản ghi cụ thể:

START file-name KEY IS [=, >, <, NOT, <= or >=] rec-key
   INVALID KEY DISPLAY 'Invalid Key'
   NOT INVALID KEY DISPLAY 'File Pointer Updated'
END-START.

Đóng động từ

Động từ Close được sử dụng để đóng một tập tin. Sau khi thực hiện thao tác Đóng, các biến trong cấu trúc tệp sẽ không có sẵn để xử lý. Liên kết giữa chương trình và tệp bị mất.

Cú pháp

Sau đây là cú pháp để đóng một tệp:

CLOSE file-name.

Chương trình con Cobol là một chương trình có thể được biên dịch độc lập nhưng không thể thực thi một cách độc lập. Có hai loại chương trình con:internal subroutines giống Perform tuyên bố và external các chương trình con như CALL verb.

Gọi động từ

Động từ gọi được sử dụng để chuyển điều khiển từ chương trình này sang chương trình khác. Chương trình có chứa động từ CALL làCalling Program và chương trình được gọi là Called Program. Việc thực thi chương trình đang gọi sẽ tạm dừng cho đến khi chương trình được gọi kết thúc quá trình thực thi. Lệnh Exit Program được sử dụng trong chương trình Đã gọi để chuyển điều khiển trở lại.

Được gọi là Ràng buộc Chương trình

Sau đây là các yêu cầu chương trình được gọi:

  • Linkage sectionphải được định nghĩa trong chương trình được gọi. Nó bao gồm các phần tử dữ liệu được truyền vào chương trình. Các mục dữ liệu không được có mệnh đề Giá trị. Mệnh đề PIC phải tương thích với các biến được truyền qua chương trình gọi.

  • Procedure division using có danh sách các biến được truyền từ chương trình gọi và thứ tự phải giống như đã đề cập trong động từ Gọi.

  • Exit programcâu lệnh được sử dụng trong chương trình được gọi để chuyển điều khiển trở lại. Nó phải là câu lệnh cuối cùng trong chương trình được gọi.

Các tham số có thể được chuyển giữa các chương trình theo hai cách:

  • Bằng cách tham khảo
  • Theo nội dung

Gọi bằng Tham chiếu

Nếu giá trị của các biến trong chương trình được gọi được sửa đổi, thì giá trị mới của chúng sẽ phản ánh trong chương trình đang gọi. NếuBY mệnh đề không được chỉ định, khi đó các biến luôn được chuyển bằng tham chiếu.

Cú pháp

Sau đây là cú pháp gọi chương trình con bằng tham chiếu:

CALL sub-prog-name USING variable-1, variable-2.

Example

Ví dụ sau là chương trình gọi MAIN và UTIL là chương trình được gọi -

IDENTIFICATION DIVISION.
PROGRAM-ID. MAIN.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-STUDENT-ID PIC 9(4) VALUE 1000.
   01 WS-STUDENT-NAME PIC A(15) VALUE 'Tim'.

PROCEDURE DIVISION.
   CALL 'UTIL' USING WS-STUDENT-ID, WS-STUDENT-NAME.
   DISPLAY 'Student Id : ' WS-STUDENT-ID
   DISPLAY 'Student Name : ' WS-STUDENT-NAME
STOP RUN.

Chương trình đã gọi

IDENTIFICATION DIVISION.
PROGRAM-ID. UTIL.

DATA DIVISION.
   LINKAGE SECTION.
   01 LS-STUDENT-ID PIC 9(4).
   01 LS-STUDENT-NAME PIC A(15).

PROCEDURE DIVISION USING LS-STUDENT-ID, LS-STUDENT-NAME.
   DISPLAY 'In Called Program'.
   MOVE 1111 TO LS-STUDENT-ID.
EXIT PROGRAM.

JCL để thực hiện chương trình COBOL ở trên -

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = MAIN

Khi bạn biên dịch và thực thi chương trình trên, nó tạo ra kết quả sau:

In Called Program
Student Id : 1111
Student Name : Tim

Gọi theo nội dung

Nếu giá trị của các biến trong chương trình được gọi được sửa đổi, thì giá trị mới của chúng sẽ không phản ánh trong chương trình đang gọi.

Cú pháp

Sau đây là cú pháp gọi chương trình con theo nội dung:

CALL sub-prog-name USING 
BY CONTENT variable-1, BY CONTENT variable-2.

Example

Ví dụ sau là chương trình gọi MAIN và UTIL là chương trình được gọi -

IDENTIFICATION DIVISION.
PROGRAM-ID. MAIN.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-STUDENT-ID PIC 9(4) VALUE 1000.
   01 WS-STUDENT-NAME PIC A(15) VALUE 'Tim'.

PROCEDURE DIVISION.
   CALL 'UTIL' USING BY CONTENT WS-STUDENT-ID, BY CONTENT WS-STUDENT-NAME.
   DISPLAY 'Student Id : ' WS-STUDENT-ID
   DISPLAY 'Student Name : ' WS-STUDENT-NAME
STOP RUN.

Chương trình đã gọi

IDENTIFICATION DIVISION.
PROGRAM-ID. UTIL.

DATA DIVISION.
   LINKAGE SECTION.
   01 LS-STUDENT-ID PIC 9(4).
   01 LS-STUDENT-NAME PIC A(15).

PROCEDURE DIVISION USING LS-STUDENT-ID, LS-STUDENT-NAME.
   DISPLAY 'In Called Program'.
   MOVE 1111 TO LS-STUDENT-ID.
EXIT PROGRAM.

JCL để thực hiện chương trình COBOL ở trên -

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = MAIN

Khi bạn biên dịch và thực thi chương trình trên, nó tạo ra kết quả sau:

In Called Program
Student Id : 1000
Student Name : Tim

Các loại cuộc gọi

Có hai loại cuộc gọi -

  • Static Callxảy ra khi một chương trình được biên dịch với tùy chọn trình biên dịch NODYNAM. Một chương trình được gọi là tĩnh được tải vào bộ nhớ tại thời điểm biên dịch.

  • Dynamic Callxảy ra khi một chương trình được biên dịch với tùy chọn trình biên dịch DYNAM và NODLL. Một chương trình động được gọi là được tải vào bộ nhớ trong thời gian chạy.

Sắp xếp dữ liệu trong một tệp hoặc hợp nhất hai hoặc nhiều tệp là nhu cầu phổ biến trong hầu hết các ứng dụng hướng tới doanh nghiệp. Sắp xếp được sử dụng để sắp xếp các bản ghi theo thứ tự tăng dần hoặc giảm dần để có thể thực hiện xử lý tuần tự. Có hai kỹ thuật được sử dụng để phân loại tệp trong COBOL -

  • External sortđược sử dụng để sắp xếp các tệp bằng cách sử dụng tiện ích SORT trong JCL. Chúng tôi đã thảo luận điều này trong chương JCL. Hiện tại, chúng tôi sẽ tập trung vào phân loại nội bộ.

  • Internal sort được sử dụng để sắp xếp các tệp trong chương trình COBOL. SORT động từ được sử dụng để sắp xếp một tập tin.

Sắp xếp động từ

Ba tệp được sử dụng trong quá trình sắp xếp trong COBOL -

  • Input file là tệp mà chúng ta phải sắp xếp theo thứ tự tăng dần hoặc giảm dần.

  • Work fileđược sử dụng để giữ các bản ghi trong khi quá trình sắp xếp đang diễn ra. Hồ sơ tệp đầu vào được chuyển sang tệp công việc cho quá trình sắp xếp. Tệp này phải được xác định trong Mục Tệp trong mục SD.

  • Output filelà tệp mà chúng tôi nhận được sau quá trình sắp xếp. Nó là đầu ra cuối cùng của động từ Sắp xếp.

Cú pháp

Sau đây là cú pháp để sắp xếp một tệp:

SORT work-file ON ASCENDING KEY rec-key1
   [ON DESCENDING KEY rec-key2]
USING input-file GIVING output-file.

SORT thực hiện các hoạt động sau:

  • Mở tệp công việc ở chế độ IO, tệp đầu vào ở chế độ INPUT và tệp đầu ra ở chế độ OUTPUT.

  • Chuyển các bản ghi có trong tệp đầu vào sang tệp công việc.

  • Sắp xếp SORT-FILE theo trình tự tăng dần / giảm dần bằng phím rút lại.

  • Chuyển các bản ghi đã sắp xếp từ tệp công việc sang tệp đầu ra.

  • Đóng tệp đầu vào và tệp đầu ra và xóa tệp công việc.

Example

Trong ví dụ sau, INPUT là tệp đầu vào cần được sắp xếp theo thứ tự tăng dần -

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

ENVIRONMENT DIVISION.
   INPUT-OUTPUT SECTION.
   FILE-CONTROL.
      SELECT INPUT ASSIGN TO IN.
      SELECT OUTPUT ASSIGN TO OUT.
      SELECT WORK ASSIGN TO WRK.

DATA DIVISION.
   FILE SECTION.
   FD INPUT.
      01 INPUT-STUDENT.
         05 STUDENT-ID-I PIC 9(5).
         05 STUDENT-NAME-I PIC A(25).
   FD OUTPUT.
      01 OUTPUT-STUDENT.
         05 STUDENT-ID-O PIC 9(5).
         05 STUDENT-NAME-O PIC A(25).
   SD WORK.
      01 WORK-STUDENT.
         05 STUDENT-ID-W PIC 9(5).
         05 STUDENT-NAME-W PIC A(25).

PROCEDURE DIVISION.
   SORT WORK ON ASCENDING KEY STUDENT-ID-O
   USING INPUT GIVING OUTPUT.
   DISPLAY 'Sort Successful'.
STOP RUN.

JCL để thực hiện chương trình COBOL ở trên -

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
//IN DD DSN = INPUT-FILE-NAME,DISP = SHR
//OUT DD DSN = OUTPUT-FILE-NAME,DISP = SHR
//WRK DD DSN = &&TEMP

Khi bạn biên dịch và thực thi chương trình trên, nó tạo ra kết quả sau:

Sort Successful

Hợp nhất động từ

Hai hoặc nhiều tệp có trình tự giống hệt nhau được kết hợp bằng cách sử dụng câu lệnh Merge. Các tệp được sử dụng trong quá trình hợp nhất -

  • Tệp đầu vào - Đầu vào-1, Đầu vào-2
  • Tệp công việc
  • Tệp đầu ra

Cú pháp

Sau đây là cú pháp để hợp nhất hai hoặc nhiều tệp:

MERGE work-file ON ASCENDING KEY rec-key1
   [ON DESCENDING KEY rec-key2]

USING input-1, input-2 GIVING output-file.

Merge thực hiện các hoạt động sau:

  • Mở tệp công việc ở chế độ IO, tệp đầu vào ở chế độ INPUT và tệp đầu ra ở chế độ OUTPUT.

  • Chuyển các bản ghi có trong tệp đầu vào sang tệp công việc.

  • Sắp xếp SORT-FILE theo trình tự tăng dần / giảm dần bằng phím rút lại.

  • Chuyển các bản ghi đã sắp xếp từ tệp công việc sang tệp đầu ra.

  • Đóng tệp đầu vào và tệp đầu ra và xóa tệp công việc.

Example

Trong ví dụ sau, INPUT1 và INPUT2 là các tệp đầu vào sẽ được hợp nhất theo thứ tự tăng dần -

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

ENVIRONMENT DIVISION.
   INPUT-OUTPUT SECTION.
   FILE-CONTROL.
      SELECT INPUT1 ASSIGN TO IN1.
      SELECT INPUT2 ASSIGN TO IN2.
      SELECT OUTPUT ASSIGN TO OUT.
      SELECT WORK ASSIGN TO WRK.

DATA DIVISION.
   FILE SECTION.
   FD INPUT1.
      01 INPUT1-STUDENT.
         05 STUDENT-ID-I1 PIC 9(5).
         05 STUDENT-NAME-I1 PIC A(25).
   FD INPUT2.
      01 INPUT2-STUDENT.
         05 STUDENT-ID-I2 PIC 9(5).
         05 STUDENT-NAME-I2 PIC A(25).
   FD OUTPUT.
      01 OUTPUT-STUDENT.
         05 STUDENT-ID-O PIC 9(5).
         05 STUDENT-NAME-O PIC A(25).
   SD WORK.
      01 WORK-STUDENT.
         05 STUDENT-ID-W PIC 9(5).
         05 STUDENT-NAME-W PIC A(25).

PROCEDURE DIVISION.
   MERGE WORK ON ASCENDING KEY STUDENT-ID-O
   USING INPUT1, INPUT2 GIVING OUTPUT.
   DISPLAY 'Merge Successful'.
STOP RUN.

JCL để thực hiện chương trình COBOL ở trên -

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
//IN1 DD DSN=INPUT1-FILE-NAME,DISP=SHR
//IN2 DD DSN=INPUT2-FILE-NAME,DISP=SHR
//OUT DD DSN = OUTPUT-FILE-NAME,DISP=SHR
//WRK DD DSN = &&TEMP

Khi bạn biên dịch và thực thi chương trình trên, nó tạo ra kết quả sau:

Merge Successful

Hiện tại, chúng tôi đã học cách sử dụng các tệp trong COBOL. Bây giờ, chúng ta sẽ thảo luận về cách một chương trình COBOL tương tác với DB2. Nó bao gồm các điều khoản sau:

  • SQL nhúng
  • Lập trình ứng dụng DB2
  • Biến máy chủ
  • SQLCA
  • Truy vấn SQL
  • Cursors

SQL nhúng

Các câu lệnh SQL nhúng được sử dụng trong các chương trình COBOL để thực hiện các hoạt động SQL tiêu chuẩn. Các câu lệnh SQL nhúng được xử lý trước bởi bộ xử lý SQL trước khi chương trình ứng dụng được biên dịch. COBOL được gọi làHost Language. Các ứng dụng COBOL-DB2 là những ứng dụng bao gồm cả COBOL và DB2.

Các câu lệnh SQL được nhúng hoạt động giống như các câu lệnh SQL bình thường với một số thay đổi nhỏ. Ví dụ: đầu ra của một truy vấn được chuyển hướng đến một tập hợp các biến được xác định trước được gọi làHost Variables. Một mệnh đề INTO bổ sung được đặt trong câu lệnh SELECT.

Lập trình ứng dụng DB2

Sau đây là các quy tắc cần tuân thủ khi viết mã chương trình COBOL-DB2:

  • Tất cả các câu lệnh SQL phải được phân tách giữa EXEC SQLENDEXEC..

  • Các câu lệnh SQL phải được mã hóa trong Vùng B.

  • Tất cả các bảng được sử dụng trong một chương trình phải được khai báo trong Phần lưu trữ làm việc. Điều này được thực hiện bằng cách sử dụngINCLUDE tuyên bố.

  • Tất cả các câu lệnh SQL ngoài INCLUDE và DECLARE TABLE phải xuất hiện trong Bộ phận thủ tục.

Biến máy chủ

Biến máy chủ được sử dụng để nhận dữ liệu từ bảng hoặc chèn dữ liệu vào bảng. Các biến máy chủ phải được khai báo cho tất cả các giá trị sẽ được chuyển giữa chương trình và DB2. Chúng được khai báo trong phần Lưu trữ-Làm việc.

Các biến máy chủ không thể là các mục nhóm, nhưng chúng có thể được nhóm lại với nhau trong cấu trúc máy chủ. Họ không thểRenamed hoặc là Redefined. Sử dụng các biến máy chủ với các câu lệnh SQL, đặt tiền tố chúng bằngcolon (:)..

Cú pháp

Sau đây là cú pháp để khai báo các biến máy chủ và bao gồm các bảng trong phần Lưu trữ-Làm việc:

DATA DIVISION.
   WORKING-STORAGE SECTION.
   
   EXEC SQL
   INCLUDE table-name
   END-EXEC.

   EXEC SQL BEGIN DECLARE SECTION
   END-EXEC.
   
   01 STUDENT-REC.
      05 STUDENT-ID PIC 9(4).
      05 STUDENT-NAME PIC X(25).
      05 STUDENT-ADDRESS X(50).
   EXEC SQL END DECLARE SECTION
   END-EXEC.

SQLCA

SQLCA là một vùng giao tiếp SQL mà qua đó DB2 chuyển phản hồi về việc thực thi SQL cho chương trình. Nó cho chương trình biết việc thực thi có thành công hay không. Có một số biến được xác định trước trong SQLCA nhưSQLCODEchứa mã lỗi. Giá trị '000' trong SQLCODE cho biết thực thi thành công.

Cú pháp

Sau đây là cú pháp để khai báo một SQLCA trong phần Lưu trữ-Làm việc -

DATA DIVISION.
WORKING-STORAGE SECTION.
	EXEC SQL
	INCLUDE SQLCA
	END-EXEC.

Truy vấn SQL

Giả sử chúng ta có một bảng có tên là 'Sinh viên' chứa Mã số sinh viên, Tên sinh viên và Địa chỉ sinh viên.

Bảng STUDENT chứa dữ liệu sau:

Student Id		Student Name		Student Address
1001 			   Mohtashim M.		Hyderabad
1002			   Nishant Malik		Delhi
1003 			   Amitabh Bachan		Mumbai
1004			   Chulbul Pandey		Lucknow

Ví dụ sau đây cho thấy việc sử dụng SELECT truy vấn trong chương trình COBOL -

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   EXEC SQL
      INCLUDE SQLCA
   END-EXEC.
   
   EXEC SQL
      INCLUDE STUDENT
   END-EXEC.
   
   EXEC SQL BEGIN DECLARE SECTION
   END-EXEC.
      01 WS-STUDENT-REC.
         05 WS-STUDENT-ID PIC 9(4).
         05 WS-STUDENT-NAME PIC X(25).
         05 WS-STUDENT-ADDRESS X(50).
   EXEC SQL END DECLARE SECTION
   END-EXEC.

PROCEDURE DIVISION.
   EXEC SQL
      SELECT STUDENT-ID, STUDENT-NAME, STUDENT-ADDRESS
      INTO :WS-STUDENT-ID, :WS-STUDENT-NAME, WS-STUDENT-ADDRESS FROM STUDENT
      WHERE STUDENT-ID=1004
   END-EXEC.
   
   IF SQLCODE = 0 
      DISPLAY WS-STUDENT-RECORD
   ELSE DISPLAY 'Error'
   END-IF.
STOP RUN.

JCL để thực hiện chương trình COBOL ở trên -

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP001  EXEC PGM = IKJEFT01
//STEPLIB  DD DSN = MYDATA.URMI.DBRMLIB,DISP = SHR
//SYSPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSOUT   DD SYSOUT=*
//SYSTSIN  DD *
   DSN SYSTEM(SSID)
   RUN PROGRAM(HELLO) PLAN(PLANNAME) -
   END
/*

Khi bạn biên dịch và thực thi chương trình trên, nó tạo ra kết quả sau:

1004 Chulbul Pandey		Lucknow

Ví dụ sau đây cho thấy việc sử dụng INSERT truy vấn trong chương trình COBOL -

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   EXEC SQL
   INCLUDE SQLCA
   END-EXEC.
   
   EXEC SQL
   INCLUDE STUDENT
   END-EXEC.
   
   EXEC SQL BEGIN DECLARE SECTION
   END-EXEC.
      01 WS-STUDENT-REC.
         05 WS-STUDENT-ID PIC 9(4).
         05 WS-STUDENT-NAME PIC X(25).
         05 WS-STUDENT-ADDRESS X(50).
   EXEC SQL END DECLARE SECTION
   END-EXEC.

PROCEDURE DIVISION.
   MOVE 1005 TO WS-STUDENT-ID.
   MOVE 'TutorialsPoint' TO WS-STUDENT-NAME.
   MOVE 'Hyderabad' TO WS-STUDENT-ADDRESS.
   
   EXEC SQL
      INSERT INTO STUDENT(STUDENT-ID, STUDENT-NAME, STUDENT-ADDRESS)
      VALUES (:WS-STUDENT-ID, :WS-STUDENT-NAME, WS-STUDENT-ADDRESS)
   END-EXEC.
   
   IF SQLCODE = 0 
      DISPLAY 'Record Inserted Successfully'
      DISPLAY WS-STUDENT-REC
   ELSE DISPLAY 'Error'
   END-IF.
STOP RUN.

JCL để thực hiện chương trình COBOL ở trên -

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP001  EXEC PGM = IKJEFT01
//STEPLIB  DD DSN = MYDATA.URMI.DBRMLIB,DISP=SHR
//SYSPRINT DD SYSOUT = *
//SYSUDUMP DD SYSOUT = *
//SYSOUT   DD SYSOUT = *
//SYSTSIN  DD *
   DSN SYSTEM(SSID)
   RUN PROGRAM(HELLO) PLAN(PLANNAME) -
   END
/*

Khi bạn biên dịch và thực thi chương trình trên, nó tạo ra kết quả sau:

Record Inserted Successfully
1005 TutorialsPoint		Hyderabad

Ví dụ sau đây cho thấy việc sử dụng UPDATE truy vấn trong chương trình COBOL -

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   
   EXEC SQL
   INCLUDE SQLCA
   END-EXEC.
   
   EXEC SQL
   INCLUDE STUDENT
   END-EXEC.
   
   EXEC SQL BEGIN DECLARE SECTION
   END-EXEC.
      01 WS-STUDENT-REC.
         05 WS-STUDENT-ID PIC 9(4).
         05 WS-STUDENT-NAME PIC X(25).
         05 WS-STUDENT-ADDRESS X(50).
   EXEC SQL END DECLARE SECTION
   END-EXEC.

PROCEDURE DIVISION.
   MOVE 'Bangalore' TO WS-STUDENT-ADDRESS.
   EXEC SQL
      UPDATE STUDENT SET STUDENT-ADDRESS=:WS-STUDENT-ADDRESS
      WHERE STUDENT-ID = 1003
   END-EXEC.
   
   IF SQLCODE = 0 
      DISPLAY 'Record Updated Successfully'
   ELSE DISPLAY 'Error'
   END-IF.
STOP RUN.

JCL để thực hiện chương trình COBOL ở trên -

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP001  EXEC PGM = IKJEFT01
//STEPLIB  DD DSN = MYDATA.URMI.DBRMLIB,DISP = SHR
//SYSPRINT DD SYSOUT = *
//SYSUDUMP DD SYSOUT = *
//SYSOUT   DD SYSOUT = *
//SYSTSIN  DD *
   DSN SYSTEM(SSID)
   RUN PROGRAM(HELLO) PLAN(PLANNAME) -
   END
/*

Khi bạn biên dịch và thực thi chương trình trên, nó tạo ra kết quả sau:

Record Updated Successfully

Sau example cho thấy việc sử dụng DELETE truy vấn trong chương trình COBOL -

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
WORKING-STORAGE SECTION.

   EXEC SQL
   INCLUDE SQLCA
   END-EXEC.
   
   EXEC SQL
   INCLUDE STUDENT
   END-EXEC.
   
   EXEC SQL BEGIN DECLARE SECTION
   END-EXEC.
      01 WS-STUDENT-REC.
         05 WS-STUDENT-ID PIC 9(4).
         05 WS-STUDENT-NAME PIC X(25).
         05 WS-STUDENT-ADDRESS X(50).
   EXEC SQL END DECLARE SECTION
   END-EXEC.

PROCEDURE DIVISION.
   MOVE 1005 TO WS-STUDENT-ID.
   
   EXEC SQL
      DELETE FROM STUDENT
      WHERE STUDENT-ID=:WS-STUDENT-ID
   END-EXEC.
   
   IF SQLCODE = 0 
      DISPLAY 'Record Deleted Successfully'
   ELSE DISPLAY 'Error'
   END-IF.
STOP RUN.

JCL để thực hiện chương trình COBOL ở trên -

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP001  EXEC PGM = IKJEFT01
//STEPLIB  DD DSN = MYDATA.URMI.DBRMLIB,DISP=SHR
//SYSPRINT DD SYSOUT = *
//SYSUDUMP DD SYSOUT = *
//SYSOUT   DD SYSOUT = *
//SYSTSIN  DD *
   DSN SYSTEM(SSID)
   RUN PROGRAM(HELLO) PLAN(PLANNAME) -
   END
/*

Khi bạn biên dịch và thực thi chương trình trên, nó tạo ra kết quả sau:

Record Deleted Successfully

Con trỏ

Con trỏ được sử dụng để xử lý nhiều lựa chọn hàng cùng một lúc. Chúng là cấu trúc dữ liệu chứa tất cả các kết quả của một truy vấn. Chúng có thể được định nghĩa trong Phần lưu trữ làm việc hoặc Bộ phận thủ tục. Sau đây là các thao tác liên quan đến Con trỏ:

  • Declare
  • Open
  • Close
  • Fetch

Khai báo con trỏ

Khai báo con trỏ có thể được thực hiện trong Bộ phận lưu trữ làm việc hoặc Bộ phận thủ tục. Câu lệnh đầu tiên là câu lệnh DECLARE là một câu lệnh không thể thay đổi được.

EXEC SQL
   DECLARE STUDCUR CURSOR FOR
   SELECT STUDENT-ID, STUDENT-NAME, STUDENT-ADDRESS FROM STUDENT
   WHERE STUDENT-ID >:WS-STUDENT-ID
END-EXEC.

Mở

Trước khi sử dụng con trỏ, câu lệnh Mở phải được thực hiện. Câu lệnh Open chuẩn bị cho SELECT để thực thi.

EXEC SQL
   OPEN STUDCUR
END-EXEC.

Đóng

Câu lệnh Close giải phóng tất cả bộ nhớ mà con trỏ chiếm giữ. Bắt buộc phải đóng con trỏ trước khi kết thúc chương trình.

EXEC SQL
   CLOSE STUDCUR
END-EXEC.

Tìm nạp

Câu lệnh tìm nạp xác định con trỏ và đặt giá trị trong mệnh đề INTO. Câu lệnh Tìm nạp được mã hóa trong vòng lặp khi chúng ta nhận được một hàng tại một thời điểm.

EXEC SQL
   FETCH STUDCUR
   INTO :WS-STUDENT-ID, :WS-STUDENT-NAME, WS-STUDENT-ADDRESS
END-EXEC.

Ví dụ sau cho thấy cách sử dụng con trỏ để tìm nạp tất cả các bản ghi từ bảng STUDENT -

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   
   EXEC SQL
   INCLUDE SQLCA
   END-EXEC.
   
   EXEC SQL
   INCLUDE STUDENT
   END-EXEC.
   
   EXEC SQL BEGIN DECLARE SECTION
   END-EXEC.
      01 WS-STUDENT-REC.
         05 WS-STUDENT-ID PIC 9(4).
         05 WS-STUDENT-NAME PIC X(25).
         05 WS-STUDENT-ADDRESS X(50).
   EXEC SQL END DECLARE SECTION
   END-EXEC.
   
   EXEC SQL
      DECLARE STUDCUR CURSOR FOR
      SELECT STUDENT-ID, STUDENT-NAME, STUDENT-ADDRESS FROM STUDENT
      WHERE STUDENT-ID >:WS-STUDENT-ID
   END-EXEC.

PROCEDURE DIVISION.
   MOVE 1001 TO WS-STUDENT-ID.
   PERFORM UNTIL SQLCODE = 100
   
   EXEC SQL
      FETCH STUDCUR
      INTO :WS-STUDENT-ID, :WS-STUDENT-NAME, WS-STUDENT-ADDRESS
   END-EXEC
   
   DISPLAY WS-STUDENT-REC
END-PERFORM	
STOP RUN.

JCL để thực hiện chương trình COBOL ở trên -

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP001  EXEC PGM=IKJEFT01
//STEPLIB  DD DSN=MYDATA.URMI.DBRMLIB,DISP=SHR
//SYSPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSOUT   DD SYSOUT=*
//SYSTSIN  DD *
   DSN SYSTEM(SSID)
   RUN PROGRAM(HELLO) PLAN(PLANNAME) -
   END
/*

Khi bạn biên dịch và thực thi chương trình trên, nó tạo ra kết quả sau:

1001 Mohtashim M.		Hyderabad
1002 Nishant Malik		Delhi
1003 Amitabh Bachan		Mumbai
1004 Chulbul Pandey		Lucknow