COBOL - คู่มือฉบับย่อ

รู้เบื้องต้นเกี่ยวกับ COBOL

ภาษาโคบอลเป็นภาษาระดับสูง เราต้องเข้าใจวิธีการทำงานของ COBOL คอมพิวเตอร์เข้าใจเฉพาะรหัสเครื่องสตรีมไบนารี 0s และ 1s ต้องแปลงรหัส COBOL เป็นรหัสเครื่องโดยใช้ไฟล์compiler. รันซอร์สโปรแกรมผ่านคอมไพเลอร์ คอมไพเลอร์จะตรวจสอบข้อผิดพลาดทางไวยากรณ์ก่อนจากนั้นจึงแปลงเป็นภาษาเครื่อง คอมไพเลอร์สร้างไฟล์เอาต์พุตซึ่งเรียกว่าload module. ไฟล์เอาต์พุตนี้มีโค้ดปฏิบัติการในรูปแบบ 0s และ 1s

วิวัฒนาการของ COBOL

ในช่วงปี 1950 เมื่อธุรกิจต่างๆเติบโตขึ้นในภาคตะวันตกของโลกจำเป็นต้องทำให้กระบวนการต่างๆเป็นไปโดยอัตโนมัติเพื่อความสะดวกในการดำเนินการและสิ่งนี้ทำให้เกิดภาษาโปรแกรมระดับสูงที่มีไว้สำหรับการประมวลผลข้อมูลทางธุรกิจ

  • ในปีพ. ศ. 2502 COBOL ได้รับการพัฒนาโดย CODASYL (Conference on Data Systems Language)

  • เวอร์ชันถัดไป COBOL-61 เปิดตัวในปีพ. ศ. 2504 โดยมีการแก้ไขบางส่วน

  • ในปี พ.ศ. 2511 ภาษาโคบอลได้รับการรับรองจาก ANSI ให้เป็นภาษามาตรฐานสำหรับใช้ในเชิงพาณิชย์ (COBOL-68)

  • ได้รับการแก้ไขอีกครั้งในปีพ. ศ. 2517 และ พ.ศ. 2528 เพื่อพัฒนาเวอร์ชันถัดมาชื่อ COBOL-74 และ COBOL-85 ตามลำดับ

  • ในปี 2002 COBOL เชิงวัตถุได้รับการเผยแพร่ซึ่งสามารถใช้วัตถุห่อหุ้มเป็นส่วนปกติของการเขียนโปรแกรม COBOL

ความสำคัญของ COBOL

  • ภาษาโคบอลเป็นภาษาโปรแกรมระดับสูงภาษาแรกที่ใช้กันอย่างแพร่หลาย เป็นภาษาที่เหมือนภาษาอังกฤษซึ่งใช้งานง่าย คำแนะนำทั้งหมดสามารถเขียนเป็นคำภาษาอังกฤษง่ายๆ

  • COBOL ยังใช้เป็นภาษาในการจัดทำเอกสารด้วยตนเอง

  • COBOL สามารถจัดการการประมวลผลข้อมูลขนาดใหญ่

  • COBOL เข้ากันได้กับเวอร์ชันก่อนหน้า

  • COBOL มีข้อความแสดงข้อผิดพลาดที่มีประสิทธิภาพดังนั้นการแก้ไขข้อบกพร่องจึงง่ายกว่า

คุณสมบัติของ COBOL

ภาษามาตรฐาน

ภาษา COBOL เป็นภาษามาตรฐานที่สามารถรวบรวมและดำเนินการบนเครื่องเช่น IBM AS / 400 คอมพิวเตอร์ส่วนบุคคลเป็นต้น

เชิงธุรกิจ

COBOL ได้รับการออกแบบมาสำหรับแอปพลิเคชันสำหรับธุรกิจที่เกี่ยวข้องกับโดเมนทางการเงินโดเมนการป้องกัน ฯลฯ สามารถจัดการข้อมูลจำนวนมากได้เนื่องจากความสามารถในการจัดการไฟล์ขั้นสูง

ภาษาที่แข็งแกร่ง

COBOL เป็นภาษาที่มีประสิทธิภาพเนื่องจากมีเครื่องมือในการดีบักและทดสอบมากมายสำหรับแพลตฟอร์มคอมพิวเตอร์เกือบทั้งหมด

ภาษาที่มีโครงสร้าง

โครงสร้างการควบคุมเชิงตรรกะมีอยู่ใน COBOL ซึ่งทำให้อ่านและแก้ไขได้ง่ายขึ้น COBOL มีหน่วยงานที่แตกต่างกันดังนั้นจึงง่ายต่อการแก้ไขข้อบกพร่อง

การติดตั้ง COBOL บน Windows / Linux

มี Mainframe Emulators ฟรีมากมายสำหรับ Windows ซึ่งสามารถใช้ในการเขียนและเรียนรู้โปรแกรม COBOL แบบง่ายๆ

หนึ่งในโปรแกรมจำลองดังกล่าวคือ Hercules ซึ่งสามารถติดตั้งได้อย่างง่ายดายบน Windows โดยทำตามขั้นตอนง่ายๆตามที่ระบุด้านล่าง -

  • ดาวน์โหลดและติดตั้งโปรแกรมจำลอง Hercules ซึ่งมีอยู่ในเว็บไซต์หลักของ Hercules: www.hercules-390.eu

  • เมื่อคุณติดตั้งแพคเกจบนเครื่อง Windows แล้วจะสร้างโฟลเดอร์เช่น C:/hercules/mvs/cobol.

  • เรียกใช้ Command Prompt (CMD) และเข้าถึงไดเร็กทอรี C: / hercules / mvs / cobol บน CMD

  • คำแนะนำฉบับสมบูรณ์เกี่ยวกับคำสั่งต่างๆในการเขียนและดำเนินการโปรแกรม JCL และ COBOL มีอยู่ที่:

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

Hercules คือการใช้งานซอฟต์แวร์โอเพ่นซอร์สของสถาปัตยกรรมระบบเมนเฟรม / 370 และ ESA / 390 นอกเหนือจาก z / สถาปัตยกรรม 64 บิตล่าสุด Hercules ทำงานภายใต้ Linux, Windows, Solaris, FreeBSD และ Mac OS X

ผู้ใช้สามารถเชื่อมต่อกับเซิร์ฟเวอร์เมนเฟรมได้หลายวิธีเช่นไคลเอ็นต์แบบบางเทอร์มินัลดัมมี่ระบบไคลเอ็นต์เสมือน (VCS) หรือระบบเดสก์ท็อปเสมือน (VDS) ผู้ใช้ที่ถูกต้องทุกคนจะได้รับรหัสล็อกอินเพื่อเข้าสู่อินเทอร์เฟซ Z / OS (TSO / E หรือ ISPF)

การรวบรวมโปรแกรม COBOL

ในการรันโปรแกรม COBOL ในโหมดแบตช์โดยใช้ JCL โปรแกรมจะต้องมีการคอมไพล์และโมดูลโหลดจะถูกสร้างขึ้นพร้อมกับโปรแกรมย่อยทั้งหมด JCL ใช้โมดูลโหลดไม่ใช่โปรแกรมจริงในขณะดำเนินการ ไลบรารีโหลดจะเชื่อมต่อกันและมอบให้กับ JCL ในขณะดำเนินการโดยใช้JCLLIB หรือ STEPLIB.

มียูทิลิตี้คอมไพเลอร์เมนเฟรมจำนวนมากสำหรับคอมไพล์โปรแกรม COBOL บริษัท บางแห่งใช้เครื่องมือการจัดการการเปลี่ยนแปลงเช่นEndevorซึ่งรวบรวมและจัดเก็บโปรแกรมทุกเวอร์ชัน สิ่งนี้มีประโยชน์ในการติดตามการเปลี่ยนแปลงที่เกิดขึ้นกับโปรแกรม

//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 เป็นยูทิลิตี้คอมไพเลอร์ IBM COBOL อ็อพชันคอมไพเลอร์ถูกส่งผ่านโดยใช้พารามิเตอร์ PARM ในตัวอย่างข้างต้น RMODE สั่งให้คอมไพเลอร์ใช้โหมดการกำหนดแอดเดรสสัมพัทธ์ในโปรแกรม โปรแกรม COBOL ถูกส่งผ่านโดยใช้พารามิเตอร์ SYSIN Copybook คือไลบรารีที่โปรแกรมใช้ใน SYSLIB

การดำเนินการโปรแกรม COBOL

ด้านล่างนี้เป็นตัวอย่าง JCL ที่โปรแกรม MYPROG ทำงานโดยใช้ไฟล์อินพุต MYDATA.URMI.INPUT และสร้างไฟล์เอาต์พุตสองไฟล์ที่เขียนไปยังสปูล

//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
/*

โมดูลโหลดของ MYPROG อยู่ใน MYDATA.URMI.LOADLIB สิ่งนี้เป็นสิ่งสำคัญที่ต้องทราบว่า JCL ข้างต้นสามารถใช้กับโมดูล COBOL ที่ไม่ใช่ DB2 เท่านั้น

การรันโปรแกรม COBOL-DB2

สำหรับการรันโปรแกรม COBOL-DB2 ยูทิลิตี้ IBM เฉพาะจะถูกใช้ใน JCL และโปรแกรม ภูมิภาค DB2 และพารามิเตอร์ที่ต้องการจะถูกส่งผ่านไปยังยูทิลิตี้

ขั้นตอนตามในการรันโปรแกรม COBOL-DB2 มีดังต่อไปนี้ -

  • เมื่อคอมไพล์โปรแกรม COBOL-DB2 DBRM (Database Request Module) จะถูกสร้างขึ้นพร้อมกับโหลดโมดูล DBRM ประกอบด้วยคำสั่ง SQL ของโปรแกรม COBOL โดยตรวจสอบไวยากรณ์แล้วว่าถูกต้อง

  • DBRM ถูกผูกไว้กับภูมิภาค DB2 (สภาพแวดล้อม) ที่ COBOL จะทำงาน สามารถทำได้โดยใช้ยูทิลิตี้ IKJEFT01 ใน JCL

  • หลังจากขั้นตอนการโยงโปรแกรม COBOL-DB2 จะรันโดยใช้ IKJEFT01 (อีกครั้ง) โดยมีโหลดไลบรารีและไลบรารี DBRM เป็นอินพุตไปยัง 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
/*

ในตัวอย่างข้างต้น MYCOBB คือโปรแกรม COBOL-DB2 ที่รันโดยใช้ IKJEFT01 โปรดทราบว่าชื่อโปรแกรม DB2 Sub-System Id (SSID) และชื่อแผน DB2 จะถูกส่งผ่านภายในคำสั่ง SYSTSIN DD ไลบรารี DBRM ถูกระบุใน STEPLIB

โครงสร้างโปรแกรม COBOL ประกอบด้วยหน่วยงานดังที่แสดงในภาพต่อไปนี้ -

คำแนะนำสั้น ๆ ของหน่วยงานเหล่านี้มีอยู่ด้านล่าง -

  • Sectionsเป็นการแบ่งส่วนย่อยเชิงตรรกะของตรรกะโปรแกรม ส่วนคือชุดของย่อหน้า

  • Paragraphsคือการแบ่งส่วนย่อยของส่วนหรือส่วน เป็นชื่อที่ผู้ใช้กำหนดเองหรือชื่อที่กำหนดไว้ล่วงหน้าตามด้วยจุดและประกอบด้วยประโยค / รายการที่เป็นศูนย์หรือมากกว่า

  • Sentencesคือการรวมกันของหนึ่งคำสั่งขึ้นไป ประโยคจะปรากฏเฉพาะในการแบ่งขั้นตอน ประโยคต้องลงท้ายด้วยจุด

  • Statements เป็นคำสั่ง COBOL ที่มีความหมายซึ่งดำเนินการประมวลผลบางอย่าง

  • Characters ต่ำที่สุดในลำดับชั้นและไม่สามารถหารได้

คุณสามารถเชื่อมโยงคำที่กล่าวถึงข้างต้นกับโปรแกรม COBOL ได้ในตัวอย่างต่อไปนี้ -

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  -----|
.

หน่วยงาน

โปรแกรม COBOL ประกอบด้วยสี่แผนก

กองพิสูจน์หลักฐาน

เป็นแผนกแรกและแผนกเดียวของทุกโปรแกรม COBOL โปรแกรมเมอร์และคอมไพเลอร์ใช้ส่วนนี้เพื่อระบุโปรแกรม ในส่วนนี้ PROGRAM-ID เป็นย่อหน้าบังคับเท่านั้น PROGRAM-ID ระบุชื่อโปรแกรมที่ประกอบด้วยอักขระ 1 ถึง 30 ตัว

ลองใช้ตัวอย่างต่อไปนี้โดยใช้ไฟล์ Live Demo ตัวเลือกออนไลน์

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

ด้านล่างคือไฟล์ JCL เพื่อดำเนินการโปรแกรม COBOL ข้างต้น

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

เมื่อคุณคอมไพล์และรันโปรแกรมข้างต้นโปรแกรมจะให้ผลลัพธ์ดังต่อไปนี้ -

Welcome to Tutorialspoint

กองสิ่งแวดล้อม

การแบ่งสภาพแวดล้อมใช้เพื่อระบุไฟล์อินพุตและเอาต์พุตไปยังโปรแกรม ประกอบด้วยสองส่วน -

  • Configuration sectionให้ข้อมูลเกี่ยวกับระบบที่โปรแกรมถูกเขียนและดำเนินการ ประกอบด้วยสองย่อหน้า -

    • คอมพิวเตอร์ต้นทาง - ระบบที่ใช้ในการคอมไพล์โปรแกรม

    • คอมพิวเตอร์ออบเจ็กต์ - ระบบที่ใช้ในการรันโปรแกรม

  • Input-Output sectionให้ข้อมูลเกี่ยวกับไฟล์ที่จะใช้ในโปรแกรม ประกอบด้วยสองย่อหน้า -

    • การควบคุมไฟล์ - ให้ข้อมูลของชุดข้อมูลภายนอกที่ใช้ในโปรแกรม

    • การควบคุม IO - ให้ข้อมูลของไฟล์ที่ใช้ในโปรแกรม

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.

กองข้อมูล

การแบ่งข้อมูลใช้เพื่อกำหนดตัวแปรที่ใช้ในโปรแกรม ประกอบด้วยสี่ส่วน -

  • File section ใช้เพื่อกำหนดโครงสร้างเร็กคอร์ดของไฟล์

  • Working-Storage section ใช้เพื่อประกาศตัวแปรชั่วคราวและโครงสร้างไฟล์ที่ใช้ในโปรแกรม

  • Local-Storage sectionคล้ายกับส่วน Working-Storage ข้อแตกต่างเพียงอย่างเดียวคือตัวแปรจะถูกจัดสรรและเริ่มต้นทุกครั้งที่โปรแกรมเริ่มดำเนินการ

  • Linkage section ใช้เพื่ออธิบายชื่อข้อมูลที่ได้รับจากโปรแกรมภายนอก

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.

JCL เพื่อดำเนินการโปรแกรม COBOL ข้างต้นมีดังนี้ -

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

เมื่อคุณคอมไพล์และรันโปรแกรมข้างต้นโปรแกรมจะให้ผลลัพธ์ดังต่อไปนี้ -

Executing COBOL program using JCL

กองกระบวนงาน

การแบ่งขั้นตอนใช้เพื่อรวมตรรกะของโปรแกรม ประกอบด้วยคำสั่งปฏิบัติการโดยใช้ตัวแปรที่กำหนดในการแบ่งข้อมูล ในส่วนนี้ชื่อย่อหน้าและส่วนเป็นผู้กำหนดเอง

ต้องมีอย่างน้อยหนึ่งคำสั่งในการแบ่งขั้นตอน คำสั่งสุดท้ายที่จะยุติการดำเนินการในส่วนนี้คือSTOP RUN ซึ่งใช้ในโปรแกรมการโทรหรือ EXIT PROGRAM ซึ่งใช้ในโปรแกรมที่เรียกว่า

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 เพื่อดำเนินการโปรแกรม COBOL ข้างต้น -

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

เมื่อคุณคอมไพล์และรันโปรแกรมข้างต้นโปรแกรมจะให้ผลลัพธ์ดังต่อไปนี้ -

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

ชุดตัวอักษร

'อักขระ' ต่ำที่สุดในลำดับชั้นและไม่สามารถแบ่งออกได้อีก ชุดอักขระ COBOL ประกอบด้วยอักขระ 78 ตัวซึ่งแสดงไว้ด้านล่าง -

ซีเนียร์ ตัวละครและคำอธิบาย
1

A-Z

ตัวอักษร (ตัวพิมพ์ใหญ่)

2

a-z

ตัวอักษร (ตัวพิมพ์เล็ก)

3

0-9

ตัวเลข

4

 

พื้นที่

5

+

เครื่องหมายบวก

6

-

เครื่องหมายลบหรือยัติภังค์

7

*

ดอกจัน

8

/

ส่งต่อ Slash

9

$

เครื่องหมายสกุล

10

,

จุลภาค

11

;

อัฒภาค

12

.

จุดทศนิยมหรือจุด

13

"

อัญประกาศ

14

(

วงเล็บด้านซ้าย

15

)

วงเล็บด้านขวา

16

>

มากกว่า

17

<

น้อยกว่า

18

:

ลำไส้ใหญ่

19

'

เครื่องหมายอะพอสทรอฟี

20

=

เครื่องหมายเท่ากับ

แผ่นการเข้ารหัส

โปรแกรมต้นฉบับของ COBOL จะต้องเขียนในรูปแบบที่คอมไพเลอร์ยอมรับได้ โปรแกรม COBOL เขียนบนแผ่นเข้ารหัส COBOL มีตำแหน่งอักขระ 80 ตำแหน่งในแต่ละบรรทัดของแผ่นการเข้ารหัส

ตำแหน่งของอักขระถูกจัดกลุ่มออกเป็นห้าฟิลด์ต่อไปนี้ -

ตำแหน่ง ฟิลด์ คำอธิบาย
1-6 หมายเลขคอลัมน์ สงวนไว้สำหรับหมายเลขบรรทัด
7 ตัวบ่งชี้ สามารถมีเครื่องหมายดอกจัน (*) แสดงความคิดเห็น, ยัติภังค์ (-) ระบุความต่อเนื่องและเครื่องหมายทับ (/) ระบุฟีดฟอร์ม
8-11 พื้นที่ก หน่วยงาน COBOL ทั้งหมดส่วนย่อหน้าและรายการพิเศษบางส่วนจะต้องเริ่มต้นในพื้นที่ A
12-72 พื้นที่ B คำสั่ง COBOL ทั้งหมดต้องเริ่มต้นในพื้นที่ B
73-80 พื้นที่ระบุ สามารถใช้งานได้ตามที่โปรแกรมเมอร์ต้องการ

ตัวอย่าง

ตัวอย่างต่อไปนี้แสดงแผ่นการเข้ารหัส 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 เพื่อดำเนินการโปรแกรม COBOL ข้างต้น -

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

เมื่อคุณคอมไพล์และรันโปรแกรมข้างต้นโปรแกรมจะให้ผลลัพธ์ดังต่อไปนี้ -

Coding Sheet

สตริงอักขระ

สตริงอักขระเกิดจากการรวมอักขระแต่ละตัว สตริงอักขระสามารถเป็นไฟล์

  • Comment,
  • ตัวอักษรหรือ
  • คำโคบอล

สตริงอักขระทั้งหมดต้องลงท้ายด้วย separators. ตัวคั่นใช้เพื่อแยกสตริงอักขระ

ตัวคั่นที่ใช้บ่อย - Space, Comma, Period, Apostrophe, Left / Right Parenthesis และ Quotation mark

แสดงความคิดเห็น

ข้อคิดเห็นคือสตริงอักขระที่ไม่มีผลต่อการทำงานของโปรแกรม สามารถผสมกันระหว่างอักขระ

ความคิดเห็นมีสองประเภท -

คอมเมนต์ไลน์

สามารถเขียนบรรทัดความคิดเห็นในคอลัมน์ใดก็ได้ คอมไพลเลอร์ไม่ได้ตรวจสอบบรรทัดข้อคิดเห็นสำหรับไวยากรณ์และถือว่าเป็นเอกสารประกอบ

รายการแสดงความคิดเห็น

รายการความคิดเห็นคือรายการที่รวมอยู่ในย่อหน้าที่ไม่บังคับของแผนกการระบุตัวตน พวกเขาเขียนในพื้นที่ B และโปรแกรมเมอร์ใช้สำหรับการอ้างอิง

ข้อความที่เน้นใน Bold เป็นรายการที่แสดงความคิดเห็นในตัวอย่างต่อไปนี้ -

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 เพื่อดำเนินการข้างต้นโปรแกรม COBOL -

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

เมื่อคุณคอมไพล์และรันโปรแกรมข้างต้นโปรแกรมจะให้ผลลัพธ์ดังต่อไปนี้ -

Comment Line

ตัวอักษร

Literal คือค่าคงที่ที่เข้ารหัสโดยตรงในโปรแกรม ในตัวอย่างต่อไปนี้ "Hello World" เป็นตัวอักษร

PROCEDURE DIVISION.
DISPLAY 'Hello World'.

ตัวอักษรมีสองประเภทดังที่จะกล่าวถึงด้านล่าง -

ตัวอักษรและตัวเลขคละกัน

ตัวอักษรและตัวเลขคละกันอยู่ในเครื่องหมายคำพูดหรือเครื่องหมายอะพอสทรอฟี ความยาวได้สูงสุด 160 อักขระ เครื่องหมายวรรคตอนหรืออัญประกาศสามารถเป็นส่วนหนึ่งของตัวอักษรได้ก็ต่อเมื่อมีการจับคู่ การเริ่มต้นและการสิ้นสุดของลิเทอรัลควรเหมือนกันไม่ว่าจะเป็นเครื่องหมายวรรคตอนหรือเครื่องหมายคำพูด

Example

ตัวอย่างต่อไปนี้แสดงตัวอักษรและตัวเลขคละกันที่ถูกต้องและไม่ถูกต้อง -

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

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

ตัวอักษรตัวเลข

ตัวอักษรตัวเลขคือการรวมกันของตัวเลขตั้งแต่ 0 ถึง 9, +, - หรือจุดทศนิยม ความยาวสูงสุด 18 อักขระ เครื่องหมายต้องไม่เป็นอักขระขวาสุด จุดทศนิยมไม่ควรปรากฏที่ส่วนท้าย

Example

ตัวอย่างต่อไปนี้แสดงตัวอักษรตัวเลขที่ถูกต้องและไม่ถูกต้อง -

Valid:
   100
   +10.9
   -1.9

Invalid:
   1,00
   10.
   10.9-

คำโคบอล

COBOL Word เป็นสตริงอักขระที่สามารถเป็นคำสงวนหรือคำที่ผู้ใช้กำหนดเอง ความยาวได้สูงสุด 30 อักขระ

ผู้ใช้กำหนดเอง

คำที่ผู้ใช้กำหนดใช้สำหรับการตั้งชื่อไฟล์ข้อมูลบันทึกชื่อย่อหน้าและส่วนต่างๆ อนุญาตให้ใช้ตัวอักษรตัวเลขและขีดกลางในขณะที่สร้างคำที่ผู้ใช้กำหนด คุณไม่สามารถใช้คำสงวนของ COBOL

คำสงวน

คำสงวนเป็นคำที่กำหนดไว้ล่วงหน้าในภาษาโคบอล คำสงวนประเภทต่างๆที่เราใช้บ่อยมีดังนี้ -

  • Keywords เช่น ADD, ACCEPT, MOVE ฯลฯ

  • Special characters คำเช่น +, -, *, <, <= ฯลฯ

  • Figurative constants คือค่าคงที่เช่น ZERO, SPACES เป็นต้นค่าคงที่ทั้งหมดของค่าคงที่เป็นรูปเป็นร่างจะกล่าวถึงในตารางต่อไปนี้

ค่าคงที่เป็นรูปเป็นร่าง

ซีเนียร์ ค่าคงที่เป็นรูปเป็นร่างและคำอธิบาย
1

HIGH-VALUES

อักขระอย่างน้อยหนึ่งตัวซึ่งจะอยู่ในตำแหน่งสูงสุดโดยเรียงลำดับจากมากไปหาน้อย

2

LOW-VALUES

อักขระอย่างน้อยหนึ่งตัวมีศูนย์ในการแทนค่าฐานสอง

3

ZERO/ZEROES

ศูนย์อย่างน้อยหนึ่งศูนย์ขึ้นอยู่กับขนาดของตัวแปร

4

SPACES

ช่องว่างอย่างน้อยหนึ่งช่อง

5

QUOTES

คำพูดเดี่ยวหรือคู่

6

ALL literal

เติมรายการข้อมูลด้วย Literal

Data Division ใช้เพื่อกำหนดตัวแปรที่ใช้ในโปรแกรม ในการอธิบายข้อมูลในภาษาโคบอลต้องเข้าใจคำศัพท์ต่อไปนี้ -

  • ชื่อข้อมูล
  • หมายเลขระดับ
  • ข้อรูปภาพ
  • ประโยคค่า
01            TOTAL-STUDENTS            PIC9(5)            VALUE '125'.
|                    |                    |                    |
|                    |                    |                    |
|                    |                    |                    | 
Level Number     Data Name           Picture Clause       Value Clause

ชื่อข้อมูล

ต้องกำหนดชื่อข้อมูลในส่วนข้อมูลก่อนที่จะใช้ในกองกระบวนงาน ต้องมีชื่อที่ผู้ใช้กำหนดเอง ไม่สามารถใช้คำสงวน ชื่อข้อมูลอ้างอิงตำแหน่งหน่วยความจำที่เก็บข้อมูลจริง อาจเป็นประเภทประถมศึกษาหรือกลุ่ม

ตัวอย่าง

ตัวอย่างต่อไปนี้แสดงชื่อข้อมูลที่ถูกต้องและไม่ถูกต้อง -

Valid:
   WS-NAME
   TOTAL-STUDENTS
   A100
   100B

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

หมายเลขระดับ

หมายเลขระดับใช้เพื่อระบุระดับของข้อมูลในบันทึก ใช้เพื่อแยกความแตกต่างระหว่างรายการระดับประถมศึกษาและรายการกลุ่ม รายการหลักสามารถจัดกลุ่มเข้าด้วยกันเพื่อสร้างรายการกลุ่ม

ซีเนียร์ หมายเลขระดับและคำอธิบาย
1

01

รายการคำอธิบายบันทึก

2

02 to 49

รายการกลุ่มและระดับประถมศึกษา

3

66

เปลี่ยนชื่อรายการ Clause

4

77

รายการที่ไม่สามารถแบ่งย่อยได้

5

88

รายการชื่อเงื่อนไข

  • Elementary itemsไม่สามารถแบ่งออกได้อีก หมายเลขระดับชื่อข้อมูลส่วนคำสั่งรูปภาพและส่วนค่า (ไม่บังคับ) ใช้เพื่ออธิบายรายการพื้นฐาน

  • Group itemsประกอบด้วยรายการพื้นฐานอย่างน้อยหนึ่งรายการ หมายเลขระดับชื่อข้อมูลและส่วนคำสั่งค่า (ทางเลือก) ใช้เพื่ออธิบายรายการกลุ่ม หมายเลขระดับกลุ่มคือ 01 เสมอ

ตัวอย่าง

ตัวอย่างต่อไปนี้แสดงรายการ Group และ Elementary -

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

ข้อรูปภาพ

ประโยครูปภาพใช้เพื่อกำหนดรายการต่อไปนี้ -

  • Data typeสามารถเป็นตัวเลขตัวอักษรหรือตัวเลขคละกัน ประเภทตัวเลขประกอบด้วยตัวเลข 0 ถึง 9 เท่านั้นประเภทตัวอักษรประกอบด้วยตัวอักษร A ถึง Z และช่องว่าง ประเภทตัวอักษรและตัวเลขประกอบด้วยตัวเลขตัวอักษรและอักขระพิเศษ

  • Signสามารถใช้กับข้อมูลตัวเลข อาจเป็นได้ทั้ง + หรือ -

  • Decimal point positionสามารถใช้กับข้อมูลตัวเลข ตำแหน่งสมมติคือตำแหน่งของจุดทศนิยมและไม่รวมอยู่ในข้อมูล

  • Length กำหนดจำนวนไบต์ที่ใช้โดยรายการข้อมูล

สัญลักษณ์ที่ใช้ในประโยครูปภาพ -

ซีเนียร์ สัญลักษณ์และคำอธิบาย
1

9

ตัวเลข

2

A

ตามตัวอักษร

3

X

ตัวอักษรและตัวเลข

4

V

ทศนิยมโดยปริยาย

5

S

ลงชื่อ

6

P

สมมติว่าทศนิยม

ตัวอย่าง

ตัวอย่างต่อไปนี้แสดงการใช้ประโยค 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 เพื่อดำเนินการโปรแกรม COBOL ข้างต้น -

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

เมื่อคุณคอมไพล์และรันโปรแกรมข้างต้นโปรแกรมจะให้ผลลัพธ์ดังต่อไปนี้ -

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

ประโยคค่า

Value clause เป็นอนุประโยคทางเลือกซึ่งใช้ในการเตรียมข้อมูลเบื้องต้นรายการข้อมูล ค่าอาจเป็นตัวอักษรตัวเลขลิเทอรัลตัวอักษรและตัวเลขหรือค่าคงที่เป็นรูปเป็นร่าง สามารถใช้ได้กับทั้งไอเท็มกลุ่มและไอเท็มระดับประถมศึกษา

ตัวอย่าง

ตัวอย่างต่อไปนี้แสดงการใช้คำสั่ง 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 เพื่อดำเนินการโปรแกรม COBOL ข้างต้น -

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

เมื่อคุณคอมไพล์และรันโปรแกรมข้างต้นโปรแกรมจะให้ผลลัพธ์ดังต่อไปนี้ -

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

คำกริยาภาษาโคบอลใช้ในการแบ่งขั้นตอนสำหรับการประมวลผลข้อมูล คำสั่งจะเริ่มต้นด้วยกริยา COBOL เสมอ มีคำกริยาภาษาโคบอลหลายคำที่มีการกระทำหลายประเภท

คำกริยาอินพุต / เอาต์พุต

คำกริยาอินพุต / เอาต์พุตใช้เพื่อรับข้อมูลจากผู้ใช้และแสดงผลลัพธ์ของโปรแกรม COBOL คำกริยาสองคำต่อไปนี้ใช้สำหรับกระบวนการนี้ -

ยอมรับคำกริยา

คำกริยายอมรับใช้เพื่อรับข้อมูลเช่นวันเวลาและวันจากระบบปฏิบัติการหรือจากผู้ใช้โดยตรง หากโปรแกรมยอมรับข้อมูลจากผู้ใช้จำเป็นต้องส่งผ่าน JCL ในขณะที่รับข้อมูลจากระบบปฏิบัติการตัวเลือก FROM จะรวมอยู่ด้วยดังที่แสดงในตัวอย่างต่อไปนี้ -

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

แสดงกริยา

คำกริยาที่แสดงใช้เพื่อแสดงผลลัพธ์ของโปรแกรม 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 เพื่อดำเนินการโปรแกรม COBOL ข้างต้น -

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

เมื่อคุณคอมไพล์และรันโปรแกรมข้างต้นโปรแกรมจะให้ผลลัพธ์ดังต่อไปนี้ -

Name : TutorialsPoint
Date : 200623

เริ่มต้นคำกริยา

คำกริยาเริ่มต้นใช้เพื่อเริ่มต้นรายการกลุ่มหรือรายการพื้นฐาน ไม่สามารถเริ่มต้นชื่อข้อมูลที่มีอนุประโยค RENAME ได้ รายการข้อมูลตัวเลขจะถูกแทนที่ด้วย ZEROES รายการข้อมูลที่เป็นตัวอักษรและตัวเลขหรือตัวอักษรจะถูกแทนที่ด้วย SPACES หากเรารวมคำ REPLACING รายการข้อมูลสามารถเริ่มต้นเป็นค่าการแทนที่ที่กำหนดดังที่แสดงในตัวอย่างต่อไปนี้ -

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 เพื่อดำเนินการโปรแกรม COBOL ข้างต้น -

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

เมื่อคุณคอมไพล์และรันโปรแกรมข้างต้นโปรแกรมจะให้ผลลัพธ์ดังต่อไปนี้ -

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

ย้ายกริยา

คำกริยาการย้ายใช้เพื่อคัดลอกข้อมูลจากแหล่งข้อมูลไปยังข้อมูลปลายทาง สามารถใช้ได้ทั้งกับรายการข้อมูลระดับประถมศึกษาและกลุ่ม สำหรับรายการข้อมูลกลุ่มจะใช้ MOVE CORRESPONDING / CORR ในการลองใช้ตัวเลือก MOVE CORR ไม่ทำงาน แต่บนเซิร์ฟเวอร์เมนเฟรมจะใช้งานได้

สำหรับการย้ายข้อมูลจากสตริงจะใช้ MOVE (x: l) โดยที่ x คือตำแหน่งเริ่มต้นและ l คือความยาว ข้อมูลจะถูกตัดทอนหากรายการข้อมูลปลายทางส่วนคำสั่ง PIC น้อยกว่าข้อ PIC รายการข้อมูลต้นทาง หากรายการข้อมูลปลายทาง PIC clause มากกว่ารายการข้อมูลต้นทาง PIC clause ดังนั้น ZEROS หรือ SPACES จะถูกเพิ่มในไบต์พิเศษ ตัวอย่างต่อไปนี้ทำให้ชัดเจน

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 เพื่อดำเนินการโปรแกรม COBOL ข้างต้น

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

เมื่อคุณคอมไพล์และรันโปรแกรมข้างต้นโปรแกรมจะให้ผลลัพธ์ดังต่อไปนี้ -

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

การเคลื่อนไหวทางกฎหมาย

ตารางต่อไปนี้ให้ข้อมูลเกี่ยวกับการเคลื่อนไหวทางกฎหมาย -

ตามตัวอักษร ตัวอักษรและตัวเลข ตัวเลข
ตามตัวอักษร เป็นไปได้ เป็นไปได้ เป็นไปไม่ได้
ตัวอักษรและตัวเลข เป็นไปได้ เป็นไปได้ เป็นไปได้
ตัวเลข เป็นไปไม่ได้ เป็นไปได้ เป็นไปได้

เพิ่มคำกริยา

เพิ่มคำกริยาใช้เพื่อเพิ่มตัวเลขสองตัวขึ้นไปและเก็บผลลัพธ์ไว้ในตัวถูกดำเนินการปลายทาง

ไวยากรณ์

ด้านล่างนี้เป็นไวยากรณ์สำหรับเพิ่มตัวเลขสองตัวขึ้นไป -

ADD A B TO C D

ADD A B C TO D GIVING E

ADD CORR WS-GROUP1 TO WS-GROUP2

ในไวยากรณ์ -1, A, B, C จะถูกเพิ่มและผลลัพธ์จะถูกเก็บไว้ใน C (C = A + B + C) เพิ่ม A, B, D และผลลัพธ์จะถูกเก็บไว้ใน D (D = A + B + D)

ในไวยากรณ์ -2, A, B, C, D จะถูกเพิ่มและผลลัพธ์จะถูกเก็บไว้ใน E (E = A + B + C + D)

ในไวยากรณ์ -3 จะมีการเพิ่มรายการกลุ่มย่อยภายใน WS-GROUP1 และ WS-GROUP2 และผลลัพธ์จะถูกเก็บไว้ใน 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 เพื่อดำเนินการโปรแกรม COBOL ข้างต้น -

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

เมื่อคุณคอมไพล์และรันโปรแกรมข้างต้นโปรแกรมจะให้ผลลัพธ์ดังต่อไปนี้ -

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

ลบคำกริยา

Subtract verb ใช้สำหรับการลบ

ไวยากรณ์

ด้านล่างนี้เป็นไวยากรณ์สำหรับการดำเนินการลบ -

SUBTRACT A B FROM C D

SUBTRACT A B C FROM D GIVING E

SUBTRACT CORR WS-GROUP1 TO WS-GROUP2

ในไวยากรณ์ -1 จะมีการเพิ่ม A และ B และลบออกจาก C ผลลัพธ์จะถูกเก็บไว้ใน C (C = C- (A + B)) A และ B จะถูกเพิ่มและลบออกจาก D ผลลัพธ์จะถูกเก็บไว้ใน D (D = D- (A + B))

ในไวยากรณ์ -2, A, B, C จะถูกเพิ่มและลบออกจาก D ผลลัพธ์จะถูกเก็บไว้ใน E (E = D- (A + B + C))

ในไวยากรณ์ -3 รายการกลุ่มย่อยภายใน WS-GROUP1 และ WS-GROUP2 จะถูกลบออกและผลลัพธ์จะถูกเก็บไว้ใน 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 เพื่อดำเนินการโปรแกรม COBOL ข้างต้น -

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

เมื่อคุณคอมไพล์และรันโปรแกรมข้างต้นโปรแกรมจะให้ผลลัพธ์ดังต่อไปนี้ -

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

คูณกริยา

Multiply verb ใช้สำหรับการดำเนินการคูณ

ไวยากรณ์

ด้านล่างนี้คือไวยากรณ์ในการคูณตัวเลขสองตัวขึ้นไป -

MULTIPLY A BY B C

MULTIPLY A BY B GIVING E

ในไวยากรณ์ -1 จะมีการคูณ A และ B และผลลัพธ์จะถูกเก็บไว้ใน B (B = A * B) A และ C ถูกคูณและผลลัพธ์จะถูกเก็บไว้ใน C (C = A * C)

ในไวยากรณ์ -2 จะมีการคูณ A และ B และผลลัพธ์จะถูกเก็บไว้ใน 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 เพื่อดำเนินการโปรแกรม COBOL ข้างต้น -

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

เมื่อคุณคอมไพล์และรันโปรแกรมข้างต้นโปรแกรมจะให้ผลลัพธ์ดังต่อไปนี้ -

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

หารกริยา

Divide verb ใช้สำหรับการดำเนินการหาร

ไวยากรณ์

ให้ด้านล่างนี้เป็นไวยากรณ์สำหรับการดำเนินการหาร -

DIVIDE A INTO B

DIVIDE A BY B GIVING C REMAINDER R

ในไวยากรณ์ -1 B ถูกหารด้วย A และผลลัพธ์จะถูกเก็บไว้ใน B (B = B / A)

ในไวยากรณ์ -2 A หารด้วย B และผลลัพธ์จะถูกเก็บไว้ใน C (C = A / B) และส่วนที่เหลือจะถูกเก็บไว้ใน 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 เพื่อดำเนินการโปรแกรม COBOL ข้างต้น -

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

เมื่อคุณคอมไพล์และรันโปรแกรมข้างต้นโปรแกรมจะให้ผลลัพธ์ดังต่อไปนี้ -

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

คำชี้แจงการคำนวณ

Compute statement ใช้ในการเขียนนิพจน์ทางคณิตศาสตร์ในภาษาโคบอล นี่คือการแทนที่สำหรับ Add, Subtract, Multiply และ Divide

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 เพื่อดำเนินการโปรแกรม COBOL ข้างต้น

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

เมื่อคุณคอมไพล์และรันโปรแกรมข้างต้นโปรแกรมจะให้ผลลัพธ์ดังต่อไปนี้ -

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

เลย์เอาต์ COBOL คือคำอธิบายการใช้งานของแต่ละฟิลด์และค่าที่มีอยู่ในนั้น ต่อไปนี้เป็นรายการคำอธิบายข้อมูลที่ใช้ใน COBOL -

  • นิยามใหม่ของ Clause
  • เปลี่ยนชื่อ Clause
  • คำสั่งการใช้งาน
  • Copybooks

นิยามใหม่ของ Clause

นิยามประโยคใหม่ใช้เพื่อกำหนดหน่วยเก็บข้อมูลที่มีคำอธิบายข้อมูลที่แตกต่างกัน หากไม่ได้ใช้รายการข้อมูลอย่างน้อยหนึ่งรายการพร้อมกันจะสามารถใช้ที่เก็บข้อมูลเดียวกันสำหรับรายการข้อมูลอื่นได้ ดังนั้นพื้นที่เก็บข้อมูลเดียวกันสามารถอ้างอิงกับรายการข้อมูลที่แตกต่างกันได้

ไวยากรณ์

ต่อไปนี้เป็นไวยากรณ์สำหรับนิยามประโยคใหม่ -

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

ต่อไปนี้เป็นรายละเอียดของพารามิเตอร์ที่ใช้ -

  • WS-OLD คือรายการที่นิยามใหม่
  • WS-NEW1 และ WS-NEW2 เป็นการกำหนดรายการใหม่

หมายเลขระดับของรายการที่กำหนดใหม่และการกำหนดรายการใหม่จะต้องเหมือนกันและต้องไม่เป็นหมายเลขระดับ 66 หรือ 88 อย่าใช้คำสั่ง VALUE กับรายการที่กำหนดขึ้นใหม่ ในส่วนของไฟล์อย่าใช้คำสั่งใหม่ที่กำหนดด้วยหมายเลขระดับ 01 กำหนดนิยามใหม่ต้องเป็นคำอธิบายข้อมูลถัดไปที่คุณต้องการกำหนดใหม่ รายการที่กำหนดใหม่จะมีค่าเท่ากับรายการที่กำหนดใหม่เสมอ

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 เพื่อดำเนินการโปรแกรม COBOL ข้างต้น -

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

เมื่อคุณคอมไพล์และรันโปรแกรมข้างต้นจะให้ผลลัพธ์ดังต่อไปนี้ -

WS-DATE1 : 20140831
WS-DATE2 : 20140831

เปลี่ยนชื่อ Clause

Renames clause ใช้เพื่อตั้งชื่อที่แตกต่างกันให้กับรายการข้อมูลที่มีอยู่ ใช้เพื่อจัดกลุ่มชื่อข้อมูลใหม่และตั้งชื่อใหม่ให้ ชื่อข้อมูลใหม่สามารถเปลี่ยนชื่อข้ามกลุ่มหรือรายการพื้นฐานได้ ระดับหมายเลข 66 สงวนไว้สำหรับการเปลี่ยนชื่อ

Syntax

ต่อไปนี้เป็นไวยากรณ์สำหรับคำสั่งเปลี่ยนชื่อ -

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.

สามารถเปลี่ยนชื่อได้ในระดับเดียวกันเท่านั้น ในตัวอย่างข้างต้น WS-A, WS-B และ WS-C อยู่ในระดับเดียวกัน นิยามการเปลี่ยนชื่อต้องเป็นคำอธิบายข้อมูลถัดไปที่คุณต้องการเปลี่ยนชื่อ อย่าใช้การเปลี่ยนชื่อด้วยหมายเลขระดับ 01, 77 หรือ 66 ชื่อข้อมูลที่ใช้ในการเปลี่ยนชื่อต้องมาตามลำดับ ไม่สามารถเปลี่ยนชื่อรายการข้อมูลที่มีคำสั่งเกิดขึ้นได้

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 เพื่อดำเนินการโปรแกรม COBOL ข้างต้น -

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

เมื่อคุณคอมไพล์และรันโปรแกรมข้างต้นโปรแกรมจะให้ผลลัพธ์ดังต่อไปนี้ -

WS-RENAME : 56AABB

คำสั่งการใช้งาน

ประโยคการใช้งานระบุระบบปฏิบัติการที่จัดเก็บข้อมูลรูปแบบ ไม่สามารถใช้กับหมายเลขระดับ 66 หรือ 88 ได้หากมีการระบุคำสั่งการใช้งานไว้ในกลุ่มไอเท็มพื้นฐานทั้งหมดจะมีอนุประโยคการใช้งานเหมือนกัน ตัวเลือกต่าง ๆ ที่สามารถใช้ได้กับประโยคการใช้งานมีดังนี้ -

แสดง

รายการข้อมูลถูกจัดเก็บในรูปแบบ ASCII และแต่ละอักขระจะใช้เวลา 1 ไบต์ เป็นการใช้งานเริ่มต้น

ตัวอย่างต่อไปนี้คำนวณจำนวนไบต์ที่ต้องการ -

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.

คอมพิวเตอร์ / COMP

รายการข้อมูลถูกจัดเก็บในรูปแบบไบนารี ในที่นี้รายการข้อมูลต้องเป็นจำนวนเต็ม

ตัวอย่างต่อไปนี้คำนวณจำนวนไบต์ที่ต้องการ -

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.

คอม -1

รายการข้อมูลคล้ายกับจริงหรือลอยและแสดงเป็นตัวเลขทศนิยมตำแหน่งเดียวที่มีความแม่นยำสูง ภายในข้อมูลจะถูกจัดเก็บในรูปแบบเลขฐานสิบหก COMP-1 ไม่ยอมรับข้อ PIC ที่นี่ 1 คำมีค่าเท่ากับ 4 ไบต์

COMP-2

รายการข้อมูลคล้ายกับ Long หรือ Double และแสดงเป็นเลขทศนิยมที่มีความแม่นยำสองเท่า ภายในข้อมูลจะถูกจัดเก็บในรูปแบบเลขฐานสิบหก COMP-2 ไม่ระบุส่วนคำสั่ง PIC 2 คำนี้มีค่าเท่ากับ 8 ไบต์

COMP-3

รายการข้อมูลถูกจัดเก็บในรูปแบบทศนิยมที่บรรจุ แต่ละหลักใช้พื้นที่ครึ่งไบต์ (1 แทะ) และป้ายจะถูกเก็บไว้ที่แทะขวาสุด

ตัวอย่างต่อไปนี้คำนวณจำนวนไบต์ที่ต้องการ -

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.

สมุดลอก

สมุดลอก COBOL คือการเลือกรหัสที่กำหนดโครงสร้างข้อมูล หากมีการใช้โครงสร้างข้อมูลเฉพาะในหลายโปรแกรมแทนที่จะเขียนโครงสร้างข้อมูลเดิมอีกครั้งเราสามารถใช้สมุดลอกได้ เราใช้คำสั่ง COPY เพื่อรวม copybook ไว้ในโปรแกรม คำสั่ง COPY ใช้ในส่วน WorkingStorage

ตัวอย่างต่อไปนี้รวมถึงสมุดลอกภายในโปรแกรม COBOL -

DATA DIVISION.
WORKING-STORAGE SECTION.
COPY ABC.

นี่คือ ABC ชื่อสมุดลอก รายการข้อมูลต่อไปนี้ในสมุดลอก ABC สามารถใช้ภายในโปรแกรมได้

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'.

คำสั่งเงื่อนไขใช้เพื่อเปลี่ยนขั้นตอนการดำเนินการขึ้นอยู่กับเงื่อนไขบางประการที่ระบุโดยโปรแกรมเมอร์ ข้อความเงื่อนไขจะประเมินว่าเป็นจริงหรือเท็จเสมอ เงื่อนไขถูกใช้ในคำสั่ง IF ประเมินและดำเนินการ เงื่อนไขประเภทต่างๆมีดังนี้ -

  • คำชี้แจงเงื่อนไข IF
  • เงื่อนไขความสัมพันธ์
  • เงื่อนไขการลงชื่อ
  • สภาพชั้นเรียน
  • เงื่อนไข - ชื่อเงื่อนไข
  • สภาพติดลบ
  • สภาพรวม

คำชี้แจงเงื่อนไข IF

คำสั่ง IF ตรวจสอบเงื่อนไข หากเงื่อนไขเป็นจริงบล็อก IF จะถูกดำเนินการ และถ้าเงื่อนไขเป็นเท็จบล็อก ELSE จะถูกดำเนินการ

END-IFใช้เพื่อสิ้นสุดบล็อก IF ในการสิ้นสุดบล็อก IF สามารถใช้จุดแทน END-IF ได้ แต่ควรใช้ END-IF สำหรับ IF หลายบล็อกเสมอ

Nested-IF- หากบล็อกปรากฏภายในบล็อก IF อื่น ไม่มีการจำกัดความลึกของคำสั่ง IF ที่ซ้อนกัน

ไวยากรณ์

ต่อไปนี้เป็นไวยากรณ์ของคำสั่งเงื่อนไข 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 เพื่อดำเนินการโปรแกรม COBOL ข้างต้น -

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

เมื่อคุณคอมไพล์และรันโปรแกรมข้างต้นโปรแกรมจะให้ผลลัพธ์ดังต่อไปนี้ -

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

เงื่อนไขความสัมพันธ์

เงื่อนไขความสัมพันธ์เปรียบเทียบตัวถูกดำเนินการสองตัวซึ่งอาจเป็นนิพจน์ตัวระบุตัวอักษรหรือเลขคณิต การเปรียบเทียบพีชคณิตของฟิลด์ตัวเลขจะกระทำโดยไม่คำนึงถึงขนาดและส่วนคำสั่งการใช้งาน

For non-numeric operands

หากมีการเปรียบเทียบตัวถูกดำเนินการที่ไม่ใช่ตัวเลขสองตัวที่มีขนาดเท่ากันอักขระจะถูกเปรียบเทียบจากด้านซ้ายโดยมีตำแหน่งที่สอดคล้องกันจนกว่าจะถึงจุดสิ้นสุด ตัวถูกดำเนินการที่มีจำนวนอักขระมากกว่าจะถูกประกาศมากกว่า

หากมีการเปรียบเทียบตัวถูกดำเนินการที่ไม่ใช่ตัวเลขสองตัวที่มีขนาดไม่เท่ากันรายการข้อมูลที่สั้นกว่าจะถูกต่อท้ายด้วยช่องว่างที่ส่วนท้ายจนกว่าขนาดของตัวถูกดำเนินการจะเท่ากันจากนั้นจึงเปรียบเทียบตามกฎที่กล่าวไว้ในจุดก่อนหน้า

ไวยากรณ์

ด้านล่างนี้คือไวยากรณ์ของคำสั่งเงื่อนไขความสัมพันธ์ -

[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 เพื่อดำเนินการโปรแกรม COBOL ข้างต้น -

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

เมื่อคุณคอมไพล์และรันโปรแกรมข้างต้นจะให้ผลลัพธ์ดังต่อไปนี้ -

WS-NUM1 IS GREATER THAN WS-NUM2

เงื่อนไขการลงชื่อ

เงื่อนไขการลงชื่อใช้เพื่อตรวจสอบสัญลักษณ์ของตัวถูกดำเนินการที่เป็นตัวเลข กำหนดว่าค่าตัวเลขที่กำหนดมากกว่าน้อยกว่าหรือเท่ากับศูนย์

ไวยากรณ์

ต่อไปนี้เป็นไวยากรณ์ของคำสั่ง Sign condition -

[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 เพื่อดำเนินการโปรแกรม COBOL ข้างต้น -

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

เมื่อคุณคอมไพล์และรันโปรแกรมข้างต้นจะให้ผลลัพธ์ดังต่อไปนี้ -

WS-NUM1 IS NEGATIVE
WS-NUM2 IS POSITIVE

สภาพชั้นเรียน

เงื่อนไขคลาสใช้เพื่อตรวจสอบว่าตัวถูกดำเนินการมีเฉพาะข้อมูลตัวอักษรหรือตัวเลข ช่องว่างจะพิจารณาในรูปแบบตัวอักษรตัวอักษรล่างและตัวอักษรบน

ไวยากรณ์

ต่อไปนี้เป็นไวยากรณ์ของคำสั่งเงื่อนไขคลาส -

[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 เพื่อดำเนินการโปรแกรม COBOL ข้างต้น -

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

เมื่อคุณคอมไพล์และรันโปรแกรมข้างต้นโปรแกรมจะให้ผลลัพธ์ดังต่อไปนี้ -

WS-NUM1 IS ALPHABETIC
WS-NUM2 IS NUMERIC

เงื่อนไขชื่อเงื่อนไข

ชื่อเงื่อนไขคือชื่อที่ผู้ใช้กำหนดเอง ประกอบด้วยชุดของค่าที่ระบุโดยผู้ใช้ มันทำงานเหมือนตัวแปรบูลีน กำหนดด้วยหมายเลขระดับ 88 จะไม่มีประโยค PIC

ไวยากรณ์

ต่อไปนี้เป็นไวยากรณ์ของคำสั่งเงื่อนไขที่ผู้ใช้กำหนดเอง -

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 เพื่อดำเนินการโปรแกรม COBOL ข้างต้น -

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

เมื่อคุณคอมไพล์และรันโปรแกรมข้างต้นโปรแกรมจะให้ผลลัพธ์ดังต่อไปนี้ -

Passed with 065 marks

สภาพติดลบ

เงื่อนไขเชิงลบจะได้รับโดยใช้คำหลัก NOT หากเงื่อนไขเป็นจริงและเราไม่ได้กำหนดไว้ข้างหน้าค่าสุดท้ายจะเป็นเท็จ

ไวยากรณ์

ต่อไปนี้เป็นไวยากรณ์ของคำสั่งเงื่อนไขเชิงลบ -

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 เพื่อดำเนินการโปรแกรม COBOL ข้างต้น -

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

เมื่อคุณคอมไพล์และรันโปรแกรมข้างต้นโปรแกรมจะให้ผลลัพธ์ดังต่อไปนี้ -

ELSE-BLOCK

สภาพรวม

เงื่อนไขรวมมีสองเงื่อนไขหรือมากกว่าที่เชื่อมต่อโดยใช้ตัวดำเนินการเชิงตรรกะ AND หรือ OR

ไวยากรณ์

ต่อไปนี้เป็นไวยากรณ์ของคำสั่งเงื่อนไขรวม -

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 เพื่อดำเนินการโปรแกรม COBOL ข้างต้น -

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

เมื่อคุณคอมไพล์และรันโปรแกรมข้างต้นโปรแกรมจะให้ผลลัพธ์ดังต่อไปนี้ -

Both condition OK

ประเมินคำกริยา

คำกริยาการประเมินคือการแทนที่ชุดของคำสั่ง IF-ELSE สามารถใช้เพื่อประเมินเงื่อนไขได้มากกว่าหนึ่งเงื่อนไข คล้ายกับคำสั่ง SWITCH ในโปรแกรม 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 เพื่อดำเนินการโปรแกรม COBOL ข้างต้น -

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

เมื่อคุณคอมไพล์และรันโปรแกรมข้างต้นโปรแกรมจะให้ผลลัพธ์ดังต่อไปนี้ -

WS-A GREATER THAN 2

มีงานบางอย่างที่ต้องทำซ้ำแล้วซ้ำเล่าเช่นการอ่านแต่ละระเบียนของไฟล์จนจบ คำสั่งวนซ้ำที่ใช้ใน COBOL คือ -

  • ดำเนินการผ่าน
  • ดำเนินการจนถึง
  • ดำเนินการครั้ง
  • ดำเนินการเปลี่ยนแปลง

ดำเนินการผ่าน

Perform Thru ใช้เพื่อดำเนินการชุดของย่อหน้าโดยตั้งชื่อย่อหน้าแรกและนามสกุลตามลำดับ หลังจากเรียกใช้ย่อหน้าสุดท้ายแล้วตัวควบคุมจะถูกส่งกลับ

การดำเนินการในบรรทัด

คำสั่งภายใน PERFORM จะดำเนินการจนกว่าจะถึง END-PERFORM

ไวยากรณ์

ต่อไปนี้เป็นไวยากรณ์ของการดำเนินการในบรรทัด -

PERFORM 
   DISPLAY 'HELLO WORLD'
END-PERFORM.

การดำเนินการนอกบรรทัด

ที่นี่คำสั่งจะดำเนินการในหนึ่งย่อหน้าจากนั้นการควบคุมจะถูกโอนไปยังย่อหน้าหรือส่วนอื่น

ไวยากรณ์

ต่อไปนี้เป็นไวยากรณ์ของการดำเนินการนอกบรรทัด -

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 เพื่อดำเนินการโปรแกรม COBOL ข้างต้น

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

เมื่อคุณคอมไพล์และรันโปรแกรมข้างต้นโปรแกรมจะให้ผลลัพธ์ดังต่อไปนี้ -

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

ดำเนินการจนถึง

ใน 'ดำเนินการถึง' ย่อหน้าจะถูกดำเนินการจนกว่าเงื่อนไขที่กำหนดจะกลายเป็นจริง 'With test before' เป็นเงื่อนไขเริ่มต้นและบ่งชี้ว่าเงื่อนไขนั้นถูกตรวจสอบก่อนการดำเนินการของคำสั่งในย่อหน้า

ไวยากรณ์

ต่อไปนี้เป็นไวยากรณ์ของการดำเนินการจนถึง -

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 เพื่อดำเนินการโปรแกรม COBOL ข้างต้น -

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

เมื่อคุณคอมไพล์และรันโปรแกรมข้างต้นโปรแกรมจะให้ผลลัพธ์ดังต่อไปนี้ -

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

ดำเนินการครั้ง

ใน 'ดำเนินการครั้ง' ย่อหน้าจะดำเนินการตามจำนวนครั้งที่ระบุ

ไวยากรณ์

ต่อไปนี้เป็นไวยากรณ์ของเวลาดำเนินการ -

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 เพื่อดำเนินการโปรแกรม COBOL ข้างต้น -

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

เมื่อคุณคอมไพล์และรันโปรแกรมข้างต้นโปรแกรมจะให้ผลลัพธ์ดังต่อไปนี้ -

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

ดำเนินการเปลี่ยนแปลง

ในการดำเนินการที่แตกต่างกันย่อหน้าจะถูกดำเนินการจนกว่าเงื่อนไขในวลีจนกว่าจะกลายเป็นจริง

ไวยากรณ์

ต่อไปนี้เป็นไวยากรณ์ของการดำเนินการที่แตกต่างกัน -

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 เพื่อดำเนินการโปรแกรม COBOL ข้างต้น -

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

เมื่อคุณคอมไพล์และรันโปรแกรมข้างต้นโปรแกรมจะให้ผลลัพธ์ดังต่อไปนี้ -

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

ไปที่คำชี้แจง

คำสั่ง GO TO ใช้เพื่อเปลี่ยนขั้นตอนการดำเนินการในโปรแกรม ในคำสั่ง GO TO การถ่ายโอนจะไปในทิศทางไปข้างหน้าเท่านั้น ใช้เพื่อออกจากย่อหน้า ประเภทต่างๆของคำสั่ง GO TO ที่ใช้มีดังนี้ -

ไปที่โดยไม่มีเงื่อนไข

GO TO para-name.

ไปที่ตามเงื่อนไข

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

ถ้า 'x' เท่ากับ 1 การควบคุมจะถูกโอนไปยังย่อหน้าแรก และถ้า 'x' เท่ากับ 2 การควบคุมจะถูกโอนไปยังย่อหน้าที่สองและอื่น ๆ

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 เพื่อดำเนินการโปรแกรม COBOL ข้างต้น:

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

เมื่อคุณคอมไพล์และรันโปรแกรมข้างต้นโปรแกรมจะให้ผลลัพธ์ดังต่อไปนี้:

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

คำสั่งการจัดการสตริงใน COBOL ใช้เพื่อดำเนินการหลายฟังก์ชันบนสตริง ต่อไปนี้เป็นคำสั่งการจัดการสตริง -

  • Inspect
  • String
  • Unstring

ตรวจสอบ

คำกริยาตรวจสอบใช้เพื่อนับหรือแทนที่อักขระในสตริง การดำเนินการสตริงสามารถดำเนินการกับค่าตัวอักษรและตัวเลขตัวเลขหรือตัวอักษร ตรวจสอบการดำเนินการจะดำเนินการจากซ้ายไปขวา ตัวเลือกที่ใช้สำหรับการดำเนินการสตริงมีดังนี้ -

การนับ

ตัวเลือกการนับใช้เพื่อนับอักขระสตริง

Syntax

ต่อไปนี้เป็นไวยากรณ์ของตัวเลือก Tallying -

INSPECT input-string
TALLYING output-count FOR ALL CHARACTERS

พารามิเตอร์ที่ใช้คือ -

  • input-string - สตริงที่จะนับอักขระ
  • จำนวนเอาท์พุท - รายการข้อมูลเพื่อเก็บจำนวนอักขระ

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 เพื่อดำเนินการโปรแกรม COBOL ข้างต้น

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

เมื่อคุณคอมไพล์และรันโปรแกรมข้างต้นโปรแกรมจะให้ผลลัพธ์ดังต่อไปนี้ -

WS-CNT1 : 15
WS-CNT2 : 06

การเปลี่ยน

ตัวเลือกการแทนที่ใช้เพื่อแทนที่อักขระสตริง

Syntax

ต่อไปนี้เป็นไวยากรณ์ของตัวเลือกการเปลี่ยน -

INSPECT input-string REPLACING ALL char1 BY char2.

พารามิเตอร์ที่ใช้คือ -

  • input-string - สตริงที่อักขระที่จะถูกแทนที่จาก char1 เป็น 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 เพื่อดำเนินการโปรแกรม COBOL ข้างต้น

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

เมื่อคุณคอมไพล์และรันโปรแกรมข้างต้นโปรแกรมจะให้ผลลัพธ์ดังต่อไปนี้ -

OLD STRING : ABCDACDADEAAAFF
NEW STRING : XBCDXCDXDEXXXFF

สตริง

String verb ใช้เพื่อเชื่อมสตริงเข้าด้วยกัน การใช้คำสั่ง STRING สามารถรวมสตริงของอักขระสองตัวขึ้นไปเพื่อสร้างสตริงที่ยาวขึ้นได้ ประโยค "คั่นด้วย" เป็นภาคบังคับ

Syntax

ต่อไปนี้เป็นไวยากรณ์ของ String verb -

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.

ต่อไปนี้เป็นรายละเอียดของพารามิเตอร์ที่ใช้ -

  • ws-string1 และ ws-string2: อินพุตสตริงที่จะเชื่อมต่อกัน
  • ws-string: สตริงเอาต์พุต
  • ws-count: ใช้เพื่อนับความยาวของสตริงที่ต่อกันใหม่
  • ตัวคั่นระบุจุดสิ้นสุดของสตริง
  • Pointer และ Overflow เป็นทางเลือก

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 เพื่อดำเนินการโปรแกรม COBOL ข้างต้น -

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

เมื่อคุณคอมไพล์และรันโปรแกรมข้างต้นโปรแกรมจะให้ผลลัพธ์ดังต่อไปนี้ -

WS-STRING : WelcomeToTutorialspoint       
WS-COUNT : 25

Unstring

Unstring verb ใช้เพื่อแยกสตริงหนึ่งออกเป็นสตริงย่อยหลายสตริง คั่นด้วยประโยคเป็นภาคบังคับ

Syntax

ต่อไปนี้เป็นไวยากรณ์ของ 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 เพื่อดำเนินการโปรแกรม COBOL ข้างต้น -

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

เมื่อคุณคอมไพล์และรันโปรแกรมข้างต้นโปรแกรมจะให้ผลลัพธ์ดังต่อไปนี้ -

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

อาร์เรย์ใน COBOL เรียกว่าตาราง อาร์เรย์เป็นโครงสร้างข้อมูลเชิงเส้นและเป็นชุดข้อมูลแต่ละรายการที่มีประเภทเดียวกัน รายการข้อมูลของตารางถูกจัดเรียงภายใน

การประกาศตาราง

ตารางถูกประกาศในส่วนข้อมูล Occursอนุประโยคใช้เพื่อกำหนดตาราง คำสั่งที่เกิดขึ้นแสดงถึงการซ้ำของนิยามชื่อข้อมูล สามารถใช้ได้เฉพาะกับหมายเลขระดับที่เริ่มตั้งแต่ 02 ถึง 49 ห้ามใช้คำสั่งเกิดขึ้นกับนิยามใหม่ คำอธิบายของตารางหนึ่งมิติและสองมิติมีดังนี้ -

ตารางหนึ่งมิติ

ในตารางมิติเดียว occursประโยคถูกใช้เพียงครั้งเดียวในการประกาศ WSTABLE เป็นรายการกลุ่มที่มีตาราง WS-B ตั้งชื่อองค์ประกอบตารางที่เกิดขึ้น 10 ครั้ง

Syntax

ต่อไปนี้เป็นไวยากรณ์สำหรับกำหนดตารางมิติเดียว -

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 เพื่อดำเนินการโปรแกรม COBOL ข้างต้น -

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

เมื่อคุณคอมไพล์และรันโปรแกรมข้างต้นโปรแกรมจะให้ผลลัพธ์ดังต่อไปนี้ -

ONE-D TABLE : TUTORIALS TUTORIALS TUTORIALS TUTORIALS TUTORIALS

ตารางสองมิติ

ตารางสองมิติถูกสร้างขึ้นโดยองค์ประกอบข้อมูลทั้งสองมีความยาวตัวแปร สำหรับการอ้างอิงให้อ่านไวยากรณ์แล้วลองวิเคราะห์ตาราง อาร์เรย์แรก (WS-A) สามารถเกิดขึ้นได้ตั้งแต่ 1 ถึง 10 ครั้งและอาร์เรย์ภายใน (WS-C) สามารถเกิดขึ้นได้ตั้งแต่ 1 ถึง 5 ครั้ง สำหรับแต่ละรายการของ WS-A จะมีรายการ WS-C 5 รายการที่เกี่ยวข้อง

Syntax

ต่อไปนี้เป็นไวยากรณ์สำหรับกำหนดตารางสองมิติ -

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 เพื่อดำเนินการโปรแกรม COBOL ข้างต้น -

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

เมื่อคุณคอมไพล์และรันโปรแกรมข้างต้นโปรแกรมจะให้ผลลัพธ์ดังต่อไปนี้ -

TWO-D TABLE :  TUTORIALS POINT POINT TUTORIALS POINT POINT

Subscript

ตารางแต่ละองค์ประกอบสามารถเข้าถึงได้โดยใช้ตัวห้อย ค่าตัวติดตามสามารถอยู่ในช่วงตั้งแต่ 1 ถึงจำนวนครั้งที่ตารางเกิดขึ้น ตัวห้อยสามารถเป็นจำนวนบวกเท่าใดก็ได้ ไม่จำเป็นต้องมีการประกาศใด ๆ ในการแบ่งข้อมูล มันถูกสร้างขึ้นโดยอัตโนมัติด้วยคำสั่งที่เกิดขึ้น

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 เพื่อดำเนินการโปรแกรม COBOL ข้างต้น -

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

เมื่อคุณคอมไพล์และรันโปรแกรมข้างต้นโปรแกรมจะให้ผลลัพธ์ดังต่อไปนี้ -

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

ดัชนี

องค์ประกอบตารางยังสามารถเข้าถึงได้โดยใช้ดัชนี ดัชนีคือการกระจัดขององค์ประกอบจากจุดเริ่มต้นของตาราง มีการประกาศดัชนีด้วยคำสั่งเกิดขึ้นโดยใช้ INDEXED BY clause ค่าของดัชนีสามารถเปลี่ยนแปลงได้โดยใช้คำสั่ง SET และตัวเลือก PERFORM Varying

Syntax

ต่อไปนี้เป็นไวยากรณ์สำหรับการกำหนดดัชนีในตาราง -

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 เพื่อดำเนินการโปรแกรม COBOL ข้างต้น -

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

เมื่อคุณคอมไพล์และรันโปรแกรมข้างต้นโปรแกรมจะให้ผลลัพธ์ดังต่อไปนี้ -

ABC
DEF
GHI
JKL
MNO
PQR

ตั้งงบ

คำสั่ง Set ใช้เพื่อเปลี่ยนค่าดัชนี Set verb ใช้เพื่อเริ่มต้นเพิ่มหรือลดค่าดัชนี ใช้กับ Search และ Search All เพื่อค้นหาองค์ประกอบในตาราง

Syntax

ต่อไปนี้เป็นไวยากรณ์สำหรับการใช้คำสั่ง 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 เพื่อดำเนินการโปรแกรม COBOL ข้างต้น

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

เมื่อคุณคอมไพล์และรันโปรแกรมข้างต้นโปรแกรมจะให้ผลลัพธ์ดังต่อไปนี้ -

ABC
JKL

ค้นหา

การค้นหาเป็นวิธีการค้นหาเชิงเส้นซึ่งใช้เพื่อค้นหาองค์ประกอบภายในตาราง สามารถดำเนินการกับตารางที่เรียงลำดับและไม่เรียงลำดับ ใช้สำหรับตารางที่ประกาศโดย Index phrase เท่านั้น เริ่มต้นด้วยค่าเริ่มต้นของดัชนี หากไม่พบองค์ประกอบที่ค้นหาดัชนีจะเพิ่มขึ้นโดยอัตโนมัติโดย 1 และจะดำเนินต่อไปจนถึงท้ายตาราง

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 เพื่อดำเนินการโปรแกรม COBOL ข้างต้น

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

เมื่อคุณคอมไพล์และรันโปรแกรมข้างต้นโปรแกรมจะให้ผลลัพธ์ดังต่อไปนี้ -

LETTER M FOUND IN TABLE

ค้นหาทั้งหมด

Search All เป็นวิธีการค้นหาแบบไบนารีซึ่งใช้เพื่อค้นหาองค์ประกอบภายในตาราง ตารางจะต้องเรียงตามลำดับสำหรับตัวเลือกค้นหาทั้งหมด ดัชนีไม่ต้องการการเริ่มต้น ในการค้นหาแบบไบนารีตารางจะแบ่งออกเป็นสองส่วนและกำหนดว่าองค์ประกอบที่ค้นหามีอยู่ครึ่งหนึ่ง กระบวนการนี้จะทำซ้ำจนกว่าจะพบองค์ประกอบหรือถึงจุดสิ้นสุด

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 เพื่อดำเนินการโปรแกรม COBOL ข้างต้น -

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

เมื่อคุณคอมไพล์และรันโปรแกรมข้างต้นโปรแกรมจะให้ผลลัพธ์ดังต่อไปนี้ -

RECORD FOUND 
93
MNO

แนวคิดของไฟล์ใน COBOL แตกต่างจากใน C / C ++ ในขณะที่เรียนรู้พื้นฐานของ 'ไฟล์' ในภาษาโคบอลไม่ควรใช้แนวคิดของทั้งสองภาษาเป็นหลัก ไม่สามารถใช้ไฟล์ข้อความธรรมดาใน COBOL แทนได้PS (Physical Sequential) และ VSAMใช้ไฟล์ ไฟล์ PS จะกล่าวถึงในโมดูลนี้

เพื่อให้เข้าใจการจัดการไฟล์ใน COBOL เราต้องรู้คำศัพท์พื้นฐาน ข้อกำหนดเหล่านี้ใช้เพื่อทำความเข้าใจพื้นฐานของการจัดการไฟล์เท่านั้น คำศัพท์เชิงลึกเพิ่มเติมจะกล่าวถึงในบท 'คำกริยาการจัดการไฟล์' ต่อไปนี้เป็นเงื่อนไขพื้นฐาน -

  • Field
  • Record
  • บันทึกทางกายภาพ
  • บันทึกตรรกะ
  • File

ตัวอย่างต่อไปนี้ช่วยในการทำความเข้าใจคำศัพท์เหล่านี้ -

ฟิลด์

ฟิลด์ใช้เพื่อระบุข้อมูลที่จัดเก็บเกี่ยวกับองค์ประกอบ แสดงถึงองค์ประกอบเดียวดังที่แสดงในตัวอย่างข้างต้นเช่นรหัสนักเรียนชื่อเครื่องหมายคะแนนรวมและเปอร์เซ็นต์ จำนวนอักขระในฟิลด์ใด ๆ เรียกว่าขนาดฟิลด์ตัวอย่างเช่นชื่อนักเรียนสามารถมีได้ 10 อักขระ ฟิลด์สามารถมีแอตทริบิวต์ต่อไปนี้ -

  • Primary keysคือฟิลด์ที่ไม่ซ้ำกันสำหรับแต่ละเร็กคอร์ดและใช้เพื่อระบุเร็กคอร์ดเฉพาะ ตัวอย่างเช่นในนักเรียนทำเครื่องหมายไฟล์นักเรียนแต่ละคนจะมีรหัสนักเรียนที่ไม่ซ้ำกันซึ่งเป็นคีย์หลัก

  • Secondary keysเป็นช่องเฉพาะหรือไม่ซ้ำกันที่ใช้ในการค้นหาข้อมูลที่เกี่ยวข้อง ตัวอย่างเช่นในไฟล์เครื่องหมายนักเรียนชื่อเต็มของนักเรียนสามารถใช้เป็นคีย์รองได้เมื่อไม่ทราบรหัสนักเรียน

  • Descriptorsฟิลด์ใช้เพื่ออธิบายเอนทิตี ตัวอย่างเช่นในนักเรียนทำเครื่องหมายไฟล์เครื่องหมายและฟิลด์เปอร์เซ็นต์ที่เพิ่มความหมายให้กับบันทึกเป็นตัวบอกที่ทราบ

บันทึก

ระเบียนคือชุดของเขตข้อมูลที่ใช้เพื่ออธิบายเอนทิตี ฟิลด์อย่างน้อยหนึ่งฟิลด์รวมกันเป็นเรกคอร์ด ตัวอย่างเช่นในนักเรียนทำเครื่องหมายไฟล์รหัสนักเรียนชื่อเครื่องหมายคะแนนรวมและเปอร์เซ็นต์ในรูปแบบหนึ่งระเบียน ขนาดสะสมของเขตข้อมูลทั้งหมดในระเบียนเรียกว่าขนาดระเบียน บันทึกที่มีอยู่ในไฟล์อาจมีความยาวคงที่หรือความยาวผันแปรได้

Physical Record

Physical record is the information that exists on the external device. It is also known as a block.

Logical Record

Logical record is the information used by the program. In COBOL programs, only one record can be handled at any point of time and it is called as logical record.

File

File is a collection of related records. For example, the students marks file consists of records of all the students.

File organization indicates how the records are organized in a file. There are different types of organizations for files so as to increase their efficiency of accessing the records. Following are the types of file organization schemes −

  • Sequential file organization
  • Indexed sequential file organization
  • Relative file organization

The syntaxes in this module, mentioned along with their respective terms, only refer to their usage in the program. The complete programs using these syntaxes would be discussed in the chapter 'File handling Verbs'.

Sequential File Organization

A sequential file consists of records that are stored and accessed in sequential order. Following are the key attributes of sequential file organization −

  • Records can be read in sequential order. For reading the 10th record, all the previous 9 records should be read.

  • Records are written in sequential order. A new record cannot be inserted in between. A new record is always inserted at the end of the file.

  • After placing a record into a sequential file, it is not possible to delete, shorten, or lengthen a record.

  • Order of the records, once inserted, can never be changed.

  • Updation of record is possible. A record can be overwritten, if the new record length is same as the old record length.

  • Sequential output files are good option for printing.

Syntax

Following is the syntax of sequential file organization −

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

Indexed Sequential File Organization

An indexed sequential file consists of records that can be accessed sequentially. Direct access is also possible. It consists of two parts −

  • Data File contains records in sequential scheme.

  • Index File contains the primary key and its address in the data file.

Following are the key attributes of sequential file organization −

  • Records can be read in sequential order just like in sequential file organization.

  • Records can be accessed randomly if the primary key is known. Index file is used to get the address of a record and then the record is fetched from the data file.

  • Sorted index is maintained in this file system which relates the key value to the position of the record in the file.

  • Alternate index can also be created to fetch the records.

Syntax

Following is the syntax of indexed sequential file organization −

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

Relative File Organization

A relative file consists of records ordered by their relative address. Following are the key attributes of relative file organization −

  • Records can be read in sequential order just like in sequential and indexed file organization.

  • Records can be accessed using relative key. Relative key represents the record’s location relative to the address of the start of the file.

  • Records can be inserted using relative key. Relative address is calculated using relative key.

  • Relative file provides the fastest access to the records.

  • The main disadvantage of this file system is that if some intermediate records are missing, they will also occupy space.

Syntax

Following is the syntax of relative file organization −

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

Till now, file organization schemes have been discussed. For each file organization scheme, different access modes can be used. Following are the types of file access modes −

  • Sequential Access
  • Random Access
  • Dynamic Access

The syntaxes in this module, mentioned along with their respective terms, only refer to their usage in the program. The complete programs using these syntaxes would be discussed in the next chapter.

Sequential Access

When the access mode is sequential, the method of record retrieval changes as per the selected file organization.

  • For sequential files, records are accessed in the same order in which they were inserted.

  • For indexed files, the parameter used to fetch the records are the record key values.

  • For relative files, relative record keys are used to retrieve the records.

Syntax

Following is the syntax of sequential access mode −

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

Random Access

When the access mode is RANDOM, the method of record retrieval changes as per the selected file organization.

  • For indexed files, records are accessed according to the value placed in a key field which can be primary or alternate key. There can be one or more alternate indexes.

  • For relative files , records are retrieved through relative record keys.

Syntax

Following is the syntax of random access mode −

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

Dynamic Access

Dynamic access supports both sequential and random access in the same program. With dynamic access, one file definition is used to perform both sequential and random processing like accessing some records in sequential order and other records by their keys.

With relative and indexed files, the dynamic access mode allows you to switch back and forth between sequential access mode and random access mode while reading a file by using the NEXT phrase on the READ statement. NEXT and READ functionalities will be discussed in the next chapter.

Syntax

Following is the syntax of dynamic access mode −

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

File handling verbs are used to perform various operations on files. Following are the file handling verbs −

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

Open Verb

Open is the first file operation that must be performed. If Open is successful, then only further operations are possible on a file. Only after opening a file, the variables in the file structure are available for processing. FILE STATUS variable is updated after each file operation.

Syntax

OPEN "mode" file-name.

Here, file-name is string literal, which you will use to name your file. A file can be opened in the following modes −

Sr.No. Mode & Description
1

Input

Input mode is used for existing files. In this mode, we can only read the file, no other operations are allowed on the file.

2

Output

Output mode is used to insert records in files. If a sequential file is used and the file is holding some records, then the existing records will be deleted first and then new records will be inserted in the file. It will not happen so in case of an indexed file or a relative file.

3

Extend

Extend mode is used to append records in a sequential file. In this mode, records are inserted at the end. If file access mode is Random or Dynamic, then extend mode cannot be used.

4

I-O

Input-Output mode is used to read and rewrite the records of a file.

Read Verb

Read verb is used to read the file records. The function of read is to fetch records from a file. At each read verb, only one record can be read into the file structure. To perform a read operation, open the file in INPUT or I-O mode. At each read statement, the file pointer is incremented and hence the successive records are read.

Syntax

Following is the syntax to read the records when the file access mode is sequential −

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.

ต่อไปนี้เป็นพารามิเตอร์ที่ใช้ -

  • NEXT RECORD เป็นทางเลือกและจะระบุเมื่อไฟล์ลำดับที่จัดทำดัชนีกำลังถูกอ่านตามลำดับ

  • INTO clause เป็นทางเลือก ws-file-structure ถูกกำหนดไว้ใน WorkingStorage Section เพื่อรับค่าจากคำสั่ง READ

  • เงื่อนไข AT END จะกลายเป็น True เมื่อถึงจุดสิ้นสุดของไฟล์

Example- ตัวอย่างต่อไปนี้อ่านไฟล์ที่มีอยู่โดยใช้การจัดลำดับบรรทัด โปรแกรมนี้สามารถรวบรวมและดำเนินการโดยใช้ไฟล์Live Demo ตัวเลือกที่จะแสดงบันทึกทั้งหมดที่มีอยู่ในไฟล์

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.

สมมติว่าข้อมูลไฟล์อินพุตที่มีอยู่ในไฟล์ input.txt ไฟล์มีดังต่อไปนี้ -

20003 Mohtashim M.
20004 Nishant Malik
20005 Amitabh Bachhan

เมื่อคุณคอมไพล์และรันโปรแกรมข้างต้นโปรแกรมจะให้ผลลัพธ์ดังต่อไปนี้ -

20003 Mohtashim M.            
20004 Nishant Malik           
20005 Amitabh Bachhan

ไวยากรณ์

ต่อไปนี้เป็นไวยากรณ์ในการอ่านบันทึกเมื่อโหมดการเข้าถึงไฟล์เป็นแบบสุ่ม -

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- ตัวอย่างต่อไปนี้อ่านไฟล์ที่มีอยู่โดยใช้องค์กรที่จัดทำดัชนี โปรแกรมนี้สามารถรวบรวมและดำเนินการโดยใช้ไฟล์JCLบนเมนเฟรมซึ่งจะแสดงบันทึกทั้งหมดที่มีอยู่ในไฟล์ บนเซิร์ฟเวอร์เมนเฟรมเราไม่ใช้ไฟล์ข้อความ เราใช้ไฟล์ PS แทน

สมมติว่าไฟล์ที่อยู่ใน Mainframes มีเนื้อหาเหมือนกับไฟล์ input.txt ในตัวอย่างข้างต้น

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 เพื่อดำเนินการโปรแกรม COBOL ข้างต้น -

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

เมื่อคุณคอมไพล์และรันโปรแกรมข้างต้นโปรแกรมจะให้ผลลัพธ์ดังต่อไปนี้ -

20005 Amitabh Bachhan

เขียนคำกริยา

Write verb ใช้เพื่อแทรกระเบียนในไฟล์ เมื่อเขียนบันทึกแล้วจะไม่สามารถใช้งานได้ในบัฟเฟอร์บันทึกอีกต่อไป ก่อนที่จะแทรกเร็กคอร์ดลงในไฟล์ให้ย้ายค่าลงในบัฟเฟอร์ของเร็กคอร์ดจากนั้นทำการเขียนกริยา

สามารถใช้คำสั่งเขียนกับ FROMตัวเลือกในการเขียนบันทึกโดยตรงจากตัวแปรหน่วยเก็บข้อมูลที่ใช้งานได้ From เป็นประโยคที่ไม่บังคับ หากโหมดการเข้าถึงเป็นแบบลำดับจากนั้นในการเขียนบันทึกไฟล์จะต้องเปิดในโหมดเอาต์พุตหรือโหมดขยาย หากโหมดการเข้าถึงเป็นแบบสุ่มหรือไดนามิกหากต้องการเขียนบันทึกไฟล์จะต้องเปิดในโหมดเอาต์พุตหรือโหมด IO

ไวยากรณ์

ต่อไปนี้เป็นไวยากรณ์ในการอ่านบันทึกเมื่อการจัดระเบียบไฟล์เป็นลำดับ -

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

ต่อไปนี้เป็นไวยากรณ์ในการอ่านเร็กคอร์ดเมื่อมีการจัดทำดัชนีองค์กรหรือสัมพันธ์ -

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

Example - ตัวอย่างต่อไปนี้แสดงวิธีการแทรกระเบียนใหม่ในไฟล์ใหม่เมื่อองค์กรเรียงตามลำดับ

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 เพื่อดำเนินการโปรแกรม COBOL ข้างต้น -

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

เมื่อคุณคอมไพล์และรันโปรแกรมข้างต้นโปรแกรมจะเพิ่มเร็กคอร์ดใหม่ลงในไฟล์เอาต์พุต

1000 Tim         10

เขียนกริยาใหม่

Rewrite verb ใช้เพื่ออัปเดตระเบียน ควรเปิดไฟล์ในโหมด IO สำหรับการดำเนินการเขียนซ้ำ สามารถใช้ได้หลังจากการดำเนินการอ่านสำเร็จเท่านั้น Rewrite verb เขียนทับเร็กคอร์ดล่าสุดที่อ่าน

ไวยากรณ์

ต่อไปนี้เป็นไวยากรณ์ในการอ่านบันทึกเมื่อการจัดระเบียบไฟล์เป็นลำดับ -

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

ต่อไปนี้เป็นไวยากรณ์ในการอ่านเร็กคอร์ดเมื่อมีการจัดทำดัชนีองค์กรหรือสัมพันธ์ -

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

Example - ตัวอย่างต่อไปนี้แสดงวิธีการอัปเดตบันทึกที่มีอยู่ซึ่งเราได้แทรกไว้ในขั้นตอนการเขียนก่อนหน้านี้ -

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 เพื่อดำเนินการโปรแกรม COBOL ข้างต้น -

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

เมื่อคุณรวบรวมและดำเนินการโปรแกรมข้างต้นโปรแกรมจะอัปเดตบันทึก -

1000 Tim Dumais  10

ลบคำกริยา

ลบคำกริยาสามารถทำได้เฉพาะกับไฟล์ที่จัดทำดัชนีและไฟล์สัมพัทธ์ ไฟล์ต้องเปิดในโหมด IO ในการจัดระเบียบไฟล์ตามลำดับไม่สามารถลบบันทึกได้ บันทึกที่อ่านล่าสุดโดยคำสั่ง Read จะถูกลบในกรณีของโหมดการเข้าถึงตามลำดับ ในโหมดการเข้าถึงโดยสุ่มให้ระบุคีย์บันทึกจากนั้นดำเนินการลบ

ไวยากรณ์

ต่อไปนี้เป็นไวยากรณ์ในการลบบันทึก -

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

Example - เพื่อลบบันทึกที่มีอยู่ -

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 เพื่อดำเนินการโปรแกรม COBOL ข้างต้น -

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

เมื่อคุณคอมไพล์และรันโปรแกรมข้างต้นโปรแกรมจะให้ผลลัพธ์ดังต่อไปนี้ -

Record Deleted

เริ่มคำกริยา

คำกริยาเริ่มสามารถดำเนินการได้กับไฟล์ที่จัดทำดัชนีและไฟล์สัมพัทธ์ ใช้เพื่อวางตัวชี้ไฟล์ที่ระเบียนเฉพาะ โหมดการเข้าถึงต้องเป็นแบบลำดับหรือแบบไดนามิก ต้องเปิดไฟล์ใน IO หรือโหมดอินพุต

ไวยากรณ์

ต่อไปนี้เป็นไวยากรณ์เพื่อวางตัวชี้ไว้ที่ระเบียนเฉพาะ -

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

ปิดคำกริยา

คำกริยาปิดใช้เพื่อปิดไฟล์ หลังจากดำเนินการปิดตัวแปรในโครงสร้างไฟล์จะไม่พร้อมใช้งานสำหรับการประมวลผล การเชื่อมโยงระหว่างโปรแกรมและไฟล์หายไป

ไวยากรณ์

ต่อไปนี้เป็นไวยากรณ์ในการปิดไฟล์ -

CLOSE file-name.

รูทีนย่อย Cobol เป็นโปรแกรมที่สามารถคอมไพล์ได้โดยอิสระ แต่ไม่สามารถดำเนินการได้อย่างอิสระ รูทีนย่อยมีสองประเภท:internal subroutines ชอบ Perform งบและ external รูทีนย่อยเช่น CALL verb

เรียกกริยา

คำกริยาเรียกใช้เพื่อถ่ายโอนการควบคุมจากโปรแกรมหนึ่งไปยังอีกโปรแกรมหนึ่ง โปรแกรมที่มีคำกริยา CALL คือCalling Program และโปรแกรมที่ถูกเรียกนั้นเรียกว่า Called Program. การเรียกใช้การเรียกใช้โปรแกรมจะหยุดลงจนกว่าโปรแกรมที่เรียกนั้นจะเสร็จสิ้นการดำเนินการ คำสั่ง Exit Program ใช้ในโปรแกรมที่เรียกว่าเพื่อโอนการควบคุมกลับ

เรียกว่า Program Constraints

ต่อไปนี้เป็นข้อกำหนดของโปรแกรมที่เรียกว่า -

  • Linkage sectionจะต้องกำหนดไว้ในโปรแกรมที่เรียกว่า ประกอบด้วยองค์ประกอบข้อมูลที่ส่งผ่านในโปรแกรม รายการข้อมูลไม่ควรมี Value clause คำสั่ง PIC ต้องเข้ากันได้กับตัวแปรที่ส่งผ่านโปรแกรมเรียก

  • Procedure division using มีรายการตัวแปรที่ส่งผ่านมาจากโปรแกรมการเรียกและลำดับจะต้องเหมือนกับที่กล่าวไว้ในคำกริยาการโทร

  • Exit programคำสั่งถูกใช้ในโปรแกรมที่เรียกว่าเพื่อถ่ายโอนการควบคุมกลับ ต้องเป็นคำสั่งสุดท้ายในโปรแกรมที่เรียกว่า

พารามิเตอร์สามารถส่งผ่านระหว่างโปรแกรมได้สองวิธี -

  • โดยอ้างอิง
  • ตามเนื้อหา

โทรตามข้อมูลอ้างอิง

หากมีการแก้ไขค่าของตัวแปรในโปรแกรมที่เรียกว่าค่าใหม่จะแสดงในโปรแกรมเรียก ถ้าBY ไม่ได้ระบุอนุประโยคดังนั้นตัวแปรจะถูกส่งผ่านโดยการอ้างอิงเสมอ

ไวยากรณ์

ต่อไปนี้เป็นไวยากรณ์ของการเรียกรูทีนย่อยโดยการอ้างอิง -

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

Example

ตัวอย่างต่อไปนี้คือโปรแกรมการโทรหลักและ UTIL คือโปรแกรมที่เรียกว่า -

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.

เรียกว่าโปรแกรม

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 เพื่อดำเนินการโปรแกรม COBOL ข้างต้น -

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

เมื่อคุณคอมไพล์และรันโปรแกรมข้างต้นโปรแกรมจะให้ผลลัพธ์ดังต่อไปนี้ -

In Called Program
Student Id : 1111
Student Name : Tim

โทรตามเนื้อหา

หากมีการแก้ไขค่าของตัวแปรในโปรแกรมที่เรียกค่าใหม่จะไม่สะท้อนในโปรแกรมเรียก

ไวยากรณ์

ต่อไปนี้เป็นไวยากรณ์ของการเรียกรูทีนย่อยตามเนื้อหา -

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

Example

ตัวอย่างต่อไปนี้คือโปรแกรมการโทรหลักและ UTIL คือโปรแกรมที่เรียกว่า -

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.

เรียกว่าโปรแกรม

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 เพื่อดำเนินการโปรแกรม COBOL ข้างต้น -

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

เมื่อคุณคอมไพล์และรันโปรแกรมข้างต้นโปรแกรมจะให้ผลลัพธ์ดังต่อไปนี้ -

In Called Program
Student Id : 1000
Student Name : Tim

ประเภทของการโทร

การโทรมีสองประเภท -

  • Static Callเกิดขึ้นเมื่อโปรแกรมถูกคอมไพล์ด้วยอ็อพชันคอมไพเลอร์ NODYNAM โปรแกรมที่เรียกว่าสแตติกจะถูกโหลดลงในหน่วยเก็บข้อมูลในเวลาคอมไพล์

  • Dynamic Callเกิดขึ้นเมื่อโปรแกรมถูกคอมไพล์ด้วยอ็อพชันคอมไพเลอร์ DYNAM และ NODLL โปรแกรมที่เรียกว่าไดนามิกถูกโหลดลงในหน่วยเก็บข้อมูลขณะรันไทม์

การจัดเรียงข้อมูลในไฟล์หรือการรวมไฟล์ตั้งแต่สองไฟล์ขึ้นไปเป็นสิ่งจำเป็นโดยทั่วไปในแอปพลิเคชันที่มุ่งเน้นธุรกิจเกือบทั้งหมด การเรียงลำดับใช้สำหรับการจัดเรียงเร็กคอร์ดทั้งจากน้อยไปมากหรือจากมากไปหาน้อยเพื่อให้สามารถดำเนินการตามลำดับได้ มีสองเทคนิคที่ใช้ในการจัดเรียงไฟล์ในภาษาโคบอล -

  • External sortใช้เพื่อจัดเรียงไฟล์โดยใช้ยูทิลิตี้ SORT ใน JCL เราได้พูดถึงเรื่องนี้ในบท JCL ณ ตอนนี้เราจะเน้นไปที่การจัดเรียงภายใน

  • Internal sort ใช้เพื่อจัดเรียงไฟล์ภายในโปรแกรม COBOL SORT คำกริยาใช้ในการจัดเรียงไฟล์

เรียงกริยา

ไฟล์สามไฟล์ถูกใช้ในกระบวนการจัดเรียงในภาษาโคบอล -

  • Input file คือไฟล์ที่เราต้องเรียงลำดับจากน้อยไปมากหรือมากไปหาน้อย

  • Work fileใช้เพื่อเก็บบันทึกในขณะที่กระบวนการจัดเรียงกำลังดำเนินอยู่ บันทึกไฟล์อินพุตจะถูกโอนไปยังไฟล์งานสำหรับกระบวนการเรียงลำดับ ไฟล์นี้ควรกำหนดไว้ใน File-Section ภายใต้รายการ SD

  • Output fileคือไฟล์ที่เราได้รับหลังจากขั้นตอนการเรียงลำดับ เป็นผลลัพธ์สุดท้ายของคำกริยาเรียงลำดับ

ไวยากรณ์

ต่อไปนี้เป็นไวยากรณ์ในการจัดเรียงไฟล์ -

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

SORT ดำเนินการดังต่อไปนี้ -

  • เปิดไฟล์งานในโหมด IO อินพุตไฟล์ในโหมด INPUT และไฟล์เอาต์พุตในโหมด OUTPUT

  • ถ่ายโอนระเบียนที่มีอยู่ในไฟล์อินพุตไปยังไฟล์งาน

  • เรียงลำดับไฟล์เรียงตามลำดับจากน้อยไปหามาก / มากไปหาน้อยตามคีย์ใหม่

  • ถ่ายโอนเร็กคอร์ดที่เรียงลำดับจากไฟล์งานไปยังไฟล์เอาต์พุต

  • ปิดไฟล์อินพุตและเอาต์พุตไฟล์และลบไฟล์งาน

Example

ในตัวอย่างต่อไปนี้ INPUT คือไฟล์อินพุตที่ต้องเรียงลำดับจากน้อยไปมาก -

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 เพื่อดำเนินการโปรแกรม COBOL ข้างต้น -

//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

เมื่อคุณคอมไพล์และรันโปรแกรมข้างต้นโปรแกรมจะให้ผลลัพธ์ดังต่อไปนี้ -

Sort Successful

ผสานกริยา

ไฟล์ที่เรียงลำดับเหมือนกันตั้งแต่สองไฟล์ขึ้นไปจะถูกรวมเข้าด้วยกันโดยใช้คำสั่ง Merge ไฟล์ที่ใช้ในกระบวนการผสาน -

  • ไฟล์อินพุต - อินพุต -1, อินพุต -2
  • ไฟล์งาน
  • ไฟล์เอาต์พุต

ไวยากรณ์

ต่อไปนี้เป็นไวยากรณ์ในการรวมไฟล์ตั้งแต่สองไฟล์ขึ้นไป -

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

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

ผสานดำเนินการดังต่อไปนี้ -

  • เปิดไฟล์งานในโหมด IO อินพุตไฟล์ในโหมด INPUT และไฟล์เอาต์พุตในโหมด OUTPUT

  • ถ่ายโอนระเบียนที่มีอยู่ในไฟล์อินพุตไปยังไฟล์งาน

  • เรียงลำดับไฟล์เรียงตามลำดับจากน้อยไปหามาก / มากไปหาน้อยตามคีย์ใหม่

  • ถ่ายโอนเร็กคอร์ดที่เรียงลำดับจากไฟล์งานไปยังไฟล์เอาต์พุต

  • ปิดไฟล์อินพุตและเอาต์พุตไฟล์และลบไฟล์งาน

Example

ในตัวอย่างต่อไปนี้ INPUT1 และ INPUT2 เป็นไฟล์อินพุตที่จะรวมจากน้อยไปหามาก -

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 เพื่อดำเนินการโปรแกรม COBOL ข้างต้น -

//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

เมื่อคุณคอมไพล์และรันโปรแกรมข้างต้นโปรแกรมจะให้ผลลัพธ์ดังต่อไปนี้ -

Merge Successful

ณ ตอนนี้เราได้เรียนรู้การใช้ไฟล์ในภาษาโคบอล ตอนนี้เราจะพูดถึงว่าโปรแกรม COBOL โต้ตอบกับ DB2 อย่างไร มันเกี่ยวข้องกับเงื่อนไขต่อไปนี้ -

  • SQL ในตัว
  • การเขียนโปรแกรมแอปพลิเคชัน DB2
  • ตัวแปรโฮสต์
  • SQLCA
  • แบบสอบถาม SQL
  • Cursors

SQL ในตัว

คำสั่ง Embedded SQL ถูกใช้ในโปรแกรม COBOL เพื่อดำเนินการ SQL มาตรฐาน คำสั่ง Embedded SQL ถูกประมวลผลล่วงหน้าโดยตัวประมวลผล SQL ก่อนที่จะคอมไพล์โปรแกรมแอ็พพลิเคชัน COBOL เรียกว่าHost Language. แอปพลิเคชัน COBOL-DB2 เป็นแอปพลิเคชันที่มีทั้ง COBOL และ DB2

คำสั่ง SQL ในตัวทำงานเหมือนกับคำสั่ง SQL ปกติที่มีการเปลี่ยนแปลงเล็กน้อย ตัวอย่างเช่นผลลัพธ์ของแบบสอบถามจะถูกส่งไปยังชุดตัวแปรที่กำหนดไว้ล่วงหน้าซึ่งเรียกว่าHost Variables. คำสั่ง INTO เพิ่มเติมจะอยู่ในคำสั่ง SELECT

การเขียนโปรแกรมแอปพลิเคชัน DB2

ต่อไปนี้เป็นกฎที่ต้องปฏิบัติในขณะเขียนโปรแกรม COBOL-DB2 -

  • คำสั่ง SQL ทั้งหมดต้องคั่นระหว่าง EXEC SQL และ ENDEXEC..

  • คำสั่ง SQL ต้องถูกเข้ารหัสในพื้นที่ B

  • ตารางทั้งหมดที่ใช้ในโปรแกรมต้องถูกประกาศในส่วน WorkingStorage ซึ่งทำได้โดยใช้ไฟล์INCLUDE คำให้การ.

  • คำสั่ง SQL ทั้งหมดนอกเหนือจาก INCLUDE และ DECLARE TABLE จะต้องปรากฏในส่วนกระบวนงาน

ตัวแปรโฮสต์

ตัวแปรโฮสต์ใช้สำหรับรับข้อมูลจากตารางหรือแทรกข้อมูลในตาราง ต้องประกาศตัวแปรโฮสต์สำหรับค่าทั้งหมดที่จะส่งผ่านระหว่างโปรแกรมและ DB2 มีประกาศไว้ใน Working-Storage Section

ตัวแปรโฮสต์ไม่สามารถเป็นไอเท็มกลุ่มได้ แต่อาจรวมกลุ่มกันในโครงสร้างโฮสต์ พวกเขาไม่สามารถRenamed หรือ Redefined. การใช้ตัวแปรโฮสต์กับคำสั่ง SQL นำหน้าด้วยcolon (:)..

ไวยากรณ์

ต่อไปนี้เป็นไวยากรณ์สำหรับประกาศตัวแปรโฮสต์และรวมตารางในส่วน Working-Storage -

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 เป็นพื้นที่การสื่อสาร SQL ซึ่ง DB2 ส่งข้อมูลป้อนกลับของการดำเนินการ SQL ไปยังโปรแกรม จะบอกโปรแกรมว่าการดำเนินการสำเร็จหรือไม่ มีตัวแปรที่กำหนดไว้ล่วงหน้าจำนวนหนึ่งภายใต้ SQLCA เช่นSQLCODEซึ่งมีรหัสข้อผิดพลาด ค่า '000' ใน SQLCODE ระบุการดำเนินการที่สำเร็จ

ไวยากรณ์

ต่อไปนี้เป็นไวยากรณ์สำหรับประกาศ SQLCA ในส่วน Working-Storage -

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

แบบสอบถาม SQL

สมมติว่าเรามีตารางหนึ่งชื่อเป็น 'นักเรียน' ที่มีรหัสนักเรียนชื่อนักเรียนและที่อยู่นักเรียน

ตาราง STUDENT ประกอบด้วยข้อมูลต่อไปนี้ -

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

ตัวอย่างต่อไปนี้แสดงการใช้งาน SELECT แบบสอบถามในโปรแกรม 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 เพื่อดำเนินการโปรแกรม COBOL ข้างต้น -

//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
/*

เมื่อคุณคอมไพล์และรันโปรแกรมข้างต้นโปรแกรมจะให้ผลลัพธ์ดังต่อไปนี้ -

1004 Chulbul Pandey		Lucknow

ตัวอย่างต่อไปนี้แสดงการใช้งาน INSERT แบบสอบถามในโปรแกรม 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 เพื่อดำเนินการโปรแกรม COBOL ข้างต้น -

//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
/*

เมื่อคุณคอมไพล์และรันโปรแกรมข้างต้นโปรแกรมจะให้ผลลัพธ์ดังต่อไปนี้ -

Record Inserted Successfully
1005 TutorialsPoint		Hyderabad

ตัวอย่างต่อไปนี้แสดงการใช้งาน UPDATE แบบสอบถามในโปรแกรม 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 เพื่อดำเนินการโปรแกรม COBOL ข้างต้น -

//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
/*

เมื่อคุณคอมไพล์และรันโปรแกรมข้างต้นโปรแกรมจะให้ผลลัพธ์ดังต่อไปนี้ -

Record Updated Successfully

ดังต่อไปนี้ example แสดงการใช้งานของ DELETE แบบสอบถามในโปรแกรม 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 เพื่อดำเนินการโปรแกรม COBOL ข้างต้น -

//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
/*

เมื่อคุณคอมไพล์และรันโปรแกรมข้างต้นโปรแกรมจะให้ผลลัพธ์ดังต่อไปนี้ -

Record Deleted Successfully

เคอร์เซอร์

เคอร์เซอร์ใช้เพื่อจัดการกับการเลือกหลายแถวในแต่ละครั้ง โครงสร้างเหล่านี้เป็นโครงสร้างข้อมูลที่เก็บผลลัพธ์ทั้งหมดของแบบสอบถาม สามารถกำหนดได้ในส่วน Working-Storage หรือแผนกขั้นตอน ต่อไปนี้คือการดำเนินการที่เกี่ยวข้องกับเคอร์เซอร์ -

  • Declare
  • Open
  • Close
  • Fetch

ประกาศเคอร์เซอร์

การประกาศเคอร์เซอร์สามารถทำได้ในส่วนการจัดเก็บการทำงานหรือกองกระบวนงาน คำสั่งแรกคือคำสั่ง DECLARE ซึ่งเป็นคำสั่งที่ไม่สามารถปฏิบัติการได้

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

เปิด

ก่อนใช้เคอร์เซอร์ต้องทำคำสั่ง Open คำสั่ง Open เตรียม SELECT สำหรับการดำเนินการ

EXEC SQL
   OPEN STUDCUR
END-EXEC.

ปิด

คำสั่งปิดจะปล่อยหน่วยความจำทั้งหมดที่เคอร์เซอร์ครอบครอง จำเป็นต้องปิดเคอร์เซอร์ก่อนสิ้นสุดโปรแกรม

EXEC SQL
   CLOSE STUDCUR
END-EXEC.

ดึงข้อมูล

คำสั่ง Fetch ระบุเคอร์เซอร์และใส่ค่าในคำสั่ง INTO คำสั่ง Fetch ถูกเข้ารหัสแบบวนซ้ำเมื่อเราได้รับทีละแถว

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

ตัวอย่างต่อไปนี้แสดงการใช้เคอร์เซอร์เพื่อดึงข้อมูลทั้งหมดจากตาราง 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 เพื่อดำเนินการโปรแกรม COBOL ข้างต้น -

//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
/*

เมื่อคุณคอมไพล์และรันโปรแกรมข้างต้นโปรแกรมจะให้ผลลัพธ์ดังต่อไปนี้ -

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