COBOL - Hızlı Kılavuz

COBOL'a Giriş

COBOL yüksek seviyeli bir dildir. COBOL'un çalışma şeklini anlamak gerekir. Bilgisayarlar yalnızca makine kodunu, 0'lar ve 1'lerin ikili akışını anlar. COBOL kodu, bir kullanılarak makine koduna dönüştürülmelidir.compiler. Program kaynağını bir derleyici aracılığıyla çalıştırın. Derleyici önce herhangi bir sözdizimi hatası olup olmadığını kontrol eder ve ardından bunu makine diline dönüştürür. Derleyici olarak bilinen bir çıktı dosyası oluşturur.load module. Bu çıktı dosyası, 0'lar ve 1'ler biçiminde çalıştırılabilir kod içerir.

COBOL'un Evrimi

1950'lerde, dünyanın batı kesiminde işletmeler büyüdüğünde, kullanım kolaylığı için çeşitli süreçleri otomatikleştirme ihtiyacı vardı ve bu, ticari veri işleme için tasarlanmış üst düzey bir programlama dilini doğurdu.

  • 1959'da COBOL, CODASYL (Veri Sistemleri Dili Konferansı) tarafından geliştirilmiştir.

  • Bir sonraki sürüm olan COBOL-61, bazı revizyonlarla 1961'de piyasaya sürüldü.

  • 1968'de COBOL, ticari kullanım için standart bir dil olarak ANSI tarafından onaylandı (COBOL-68).

  • Sırasıyla COBOL-74 ve COBOL-85 adlı sonraki sürümleri geliştirmek için 1974 ve 1985'te tekrar revize edildi.

  • 2002 yılında, kapsüllenmiş nesneleri COBOL programlamanın normal bir parçası olarak kullanabilen Nesne Yönelimli COBOL piyasaya sürüldü.

COBOL'un Önemi

  • COBOL, yaygın olarak kullanılan ilk üst düzey programlama diliydi. Kullanıcı dostu olan İngilizce benzeri bir dildir. Tüm talimatlar basit İngilizce kelimelerle kodlanabilir.

  • COBOL, kendi kendini belgeleyen bir dil olarak da kullanılır.

  • COBOL, büyük veri işlemenin üstesinden gelebilir.

  • COBOL, önceki sürümleriyle uyumludur.

  • COBOL'un etkili hata mesajları vardır ve bu nedenle hataların çözümü daha kolaydır.

COBOL'un özellikleri

Standart dil

COBOL, IBM AS / 400, kişisel bilgisayarlar vb. Makinelerde derlenip çalıştırılabilen standart bir dildir.

İş Odaklılık

COBOL, finans alanı, savunma alanı vb. İle ilgili iş odaklı uygulamalar için tasarlanmıştır. Gelişmiş dosya işleme yetenekleri sayesinde çok büyük hacimli verileri işleyebilir.

Sağlam Dil

COBOL, sayısız hata ayıklama ve test aracı neredeyse tüm bilgisayar platformları için mevcut olduğundan sağlam bir dildir.

Yapılandırılmış Dil

Mantıksal kontrol yapıları COBOL'de mevcuttur, bu da okumayı ve değiştirmeyi kolaylaştırır. COBOL'un farklı bölümleri vardır, bu nedenle hata ayıklaması kolaydır.

COBOL'u Windows / Linux'a yükleme

Windows için, basit COBOL programları yazmak ve öğrenmek için kullanılabilen birçok Ücretsiz Mainframe Emülatör vardır.

Böyle bir emülatör, aşağıda verilen birkaç basit adımı izleyerek Windows'a kolayca yüklenebilen Hercules'dür -

  • Hercules'ün ana sitesinde bulunan Hercules emülatörünü indirin ve kurun: www.hercules-390.eu

  • Paketi Windows makinesine yükledikten sonra, aşağıdaki gibi bir klasör oluşturacaktır: C:/hercules/mvs/cobol.

  • Komut İstemi'ni (CMD) çalıştırın ve CMD'de C: / hercules / mvs / cobol dizinine ulaşın.

  • JCL ve COBOL programları yazmak ve yürütmek için çeşitli komutlarla ilgili eksiksiz kılavuz şu adreste bulunabilir:

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

Hercules, en yeni 64-bit z / Mimarisine ek olarak ana bilgisayar System / 370 ve ESA / 390 mimarilerinin açık kaynaklı bir yazılım uygulamasıdır. Hercules, Linux, Windows, Solaris, FreeBSD ve Mac OS X altında çalışır.

Bir kullanıcı bir ana bilgisayar sunucusuna ince istemci, kukla terminal, Sanal İstemci Sistemi (VCS) veya Sanal Masaüstü Sistemi (VDS) gibi çeşitli yollarla bağlanabilir. Her geçerli kullanıcıya, Z / OS arayüzüne (TSO / E veya ISPF) girmesi için bir oturum açma kimliği verilir.

COBOL Programlarının Derlenmesi

JCL kullanarak toplu modda bir COBOL programını yürütmek için, programın derlenmesi gerekir ve tüm alt programlarla bir yük modülü oluşturulur. JCL, yürütme sırasında gerçek programı değil, yükleme modülünü kullanır. Yükleme kitaplıkları birleştirilir ve çalıştırma sırasında JCL'ye verilir.JCLLIB veya STEPLIB.

Bir COBOL programını derlemek için kullanılabilen birçok ana bilgisayar derleyici aracı vardır. Bazı kurumsal şirketler, aşağıdaki gibi Değişiklik Yönetimi araçlarını kullanır:Endevor, programın her sürümünü derleyen ve saklayan. Bu, programda yapılan değişikliklerin izlenmesinde yararlıdır.

//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, bir IBM COBOL derleyici yardımcı programıdır. Derleyici seçenekleri PARM parametresi kullanılarak geçirilir. Yukarıdaki örnekte, RMODE, derleyiciye programda göreceli adresleme modunu kullanması talimatını verir. COBOL programı SYSIN parametresi kullanılarak geçilir. Copybook, program tarafından SYSLIB'de kullanılan kütüphanedir.

COBOL Programlarını Yürütme

Aşağıda, MYPROG programının MYDATA.URMI.INPUT girdi dosyası kullanılarak yürütüldüğü ve makaraya yazılan iki çıktı dosyası ürettiği bir JCL örneği verilmiştir.

//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'un yükleme modülü MYDATA.URMI.LOADLIB'de bulunur. Yukarıdaki JCL'nin yalnızca DB2 olmayan bir COBOL modülü için kullanılabileceğini unutmamak önemlidir.

COBOL-DB2 programlarının yürütülmesi

Bir COBOL-DB2 programını çalıştırmak için, JCL ve programda özel bir IBM yardımcı programı kullanılır; DB2 bölgesi ve gerekli parametreler yardımcı programa girdi olarak geçirilir.

Bir COBOL-DB2 programını çalıştırırken izlenen adımlar aşağıdaki gibidir -

  • Bir COBOL-DB2 programı derlendiğinde, yükleme modülüyle birlikte bir DBRM (Veritabanı İstek Modülü) yaratılır. DBRM, sözdiziminin doğru olup olmadığı kontrol edilmiş COBOL programlarının SQL deyimlerini içerir.

  • DBRM, COBOL'un çalışacağı DB2 bölgesine (ortamına) bağlıdır. Bu, bir JCL'de IKJEFT01 yardımcı programı kullanılarak yapılabilir.

  • Bağlama adımından sonra, COBOL-DB2 programı, IKJEFT01 (tekrar) kullanılarak yük kitaplığı ve JCL'nin girdisi olarak DBRM kitaplığı ile çalıştırılır.

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

Yukarıdaki örnekte, MYCOBB, IKJEFT01 kullanılarak çalıştırılan COBOL-DB2 programıdır. Program adı, DB2 Alt Sistem Kimliği (SSID) ve DB2 Plan adının SYSTSIN DD deyimi içinde aktarıldığını lütfen unutmayın. DBRM kitaplığı STEPLIB'de belirtilmiştir.

Bir COBOL program yapısı, aşağıdaki resimde gösterildiği gibi bölümlerden oluşur -

Bu bölümlerin kısa bir tanıtımı aşağıda verilmiştir -

  • Sectionsprogram mantığının mantıksal alt bölümüdür. Bir bölüm, bir paragraflar koleksiyonudur.

  • Paragraphsbir bölümün veya bölümün alt bölümüdür. Kullanıcı tanımlı veya önceden tanımlanmış bir ad ve ardından nokta gelir ve sıfır veya daha fazla cümleden / girişten oluşur.

  • Sentencesbir veya daha fazla ifadenin birleşimidir. Cümleler yalnızca Prosedür bölümünde görünür. Bir cümle bir nokta ile bitmelidir.

  • Statements bazı işlemler gerçekleştiren anlamlı COBOL deyimleridir.

  • Characters hiyerarşideki en düşük olanlardır ve bölünemezler.

Yukarıda belirtilen terimleri aşağıdaki örnekte COBOL programıyla ilişkilendirebilirsiniz -

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

Bölümler

Bir COBOL programı dört bölümden oluşur.

Kimlik Bölümü

Her COBOL programının ilk ve tek zorunlu bölümüdür. Programcı ve derleyici, programı tanımlamak için bu bölümü kullanır. Bu bölümde, PROGRAM-ID tek zorunlu paragraftır. PROGRAM-ID, 1 ila 30 karakter içerebilen program adını belirtir.

Aşağıdaki örneği deneyin: Live Demo çevrimiçi seçenek.

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

Aşağıda verilen JCL Yukarıdaki COBOL programını yürütmek için.

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

Yukarıdaki programı derleyip yürüttüğünüzde, aşağıdaki sonucu verir -

Welcome to Tutorialspoint

Çevre Bölümü

Ortam bölümü, programa giriş ve çıkış dosyalarını belirtmek için kullanılır. İki bölümden oluşur -

  • Configuration sectionprogramın yazıldığı ve çalıştırıldığı sistem hakkında bilgi sağlar. İki paragraftan oluşur -

    • Kaynak bilgisayar - Programı derlemek için kullanılan sistem.

    • Nesne bilgisayarı - Programı yürütmek için kullanılan sistem.

  • Input-Output sectionprogramda kullanılacak dosyalar hakkında bilgi sağlar. İki paragraftan oluşur -

    • Dosya denetimi - Programda kullanılan harici veri kümeleri hakkında bilgi sağlar.

    • IO kontrolü - Programda kullanılan dosyaların bilgilerini sağlar.

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.

Veri Bölümü

Veri bölünmesi, programda kullanılan değişkenleri tanımlamak için kullanılır. Dört bölümden oluşur -

  • File section dosyanın kayıt yapısını tanımlamak için kullanılır.

  • Working-Storage section programda kullanılan geçici değişkenleri ve dosya yapılarını bildirmek için kullanılır.

  • Local-Storage sectionWorking-Storage bölümüne benzer. Tek fark, değişkenlerin bir program çalıştırmaya her başladığında tahsis edilecek ve başlatılacak olmasıdır.

  • Linkage section harici bir programdan alınan veri adlarını tanımlamak için kullanılır.

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 Yukarıdaki COBOL programını yürütmek için aşağıdaki gibidir -

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

Yukarıdaki programı derleyip yürüttüğünüzde, aşağıdaki sonucu verir -

Executing COBOL program using JCL

Prosedür Bölümü

Prosedür bölümü, programın mantığını dahil etmek için kullanılır. Veri bölümünde tanımlanan değişkenleri kullanan çalıştırılabilir ifadelerden oluşur. Bu bölümde paragraf ve bölüm adları kullanıcı tanımlıdır.

Prosedür bölümünde en az bir ifade bulunmalıdır. Bu bölümdeki infazı sona erdirmek için son açıklama:STOP RUN çağrı programlarında kullanılan veya EXIT PROGRAM çağrılan programlarda kullanılan.

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 yukarıdaki COBOL programını yürütmek için -

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

Yukarıdaki programı derleyip yürüttüğünüzde, aşağıdaki sonucu verir -

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

Karakter seti

'Karakterler' hiyerarşide en düşük seviyededir ve daha fazla bölünemezler. COBOL Karakter Seti, aşağıda gösterilen 78 karakter içerir -

Sr.No. Karakter açıklaması
1

A-Z

Alfabe (Büyük Harf)

2

a-z

Alfabe (Küçük Harf)

3

0-9

Sayısal

4

 

Uzay

5

+

Artı işareti

6

-

Eksi İşareti veya Kısa Çizgi

7

*

Yıldız işareti

8

/

İleri Eğik Çizgi

9

$

Para Birimi İşareti

10

,

Virgül

11

;

Noktalı virgül

12

.

Ondalık Nokta veya Dönem

13

"

Alıntı işaretleri

14

(

Sol Parantez

15

)

Sağ Parantez

16

>

Büyüktür

17

<

Daha az

18

:

Kolon

19

'

Kesme işareti

20

=

Eşittir İşareti

Kodlama Sayfası

COBOL kaynak programı, derleyiciler tarafından kabul edilebilir bir formatta yazılmalıdır. COBOL programları, COBOL kodlama sayfalarına yazılır. Bir kodlama sayfasının her satırında 80 karakter konumu vardır.

Karakter konumları aşağıdaki beş alanda gruplandırılmıştır -

Pozisyonlar Alan Açıklama
1-6 Sütun Numaraları Satır numaraları için ayrılmıştır.
7 Gösterge Açıklamaları belirten Yıldız (*), devamı gösteren Kısa Çizgi (-) ve form beslemesini gösteren Eğik çizgi (/) olabilir.
8-11 Alan A Tüm COBOL bölümleri, bölümleri, paragrafları ve bazı özel girişler Alan A'da başlamalıdır.
12-72 Alan B Tüm COBOL ifadeleri B alanında başlamalıdır.
73-80 Kimlik Alanı Programcı tarafından ihtiyaç duyulduğunda kullanılabilir.

Misal

Aşağıdaki örnekte bir COBOL kodlama sayfası gösterilmektedir -

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 yukarıdaki COBOL programını yürütmek için -

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

Yukarıdaki programı derleyip yürüttüğünüzde, aşağıdaki sonucu verir -

Coding Sheet

Karakter Dizeleri

Karakter dizileri, tek tek karakterlerin birleştirilmesiyle oluşturulur. Bir karakter dizisi bir

  • Comment,
  • Değişmez değer veya
  • COBOL kelimesi.

Tüm karakter dizileri ile bitmelidir separators. Karakter dizilerini ayırmak için bir ayırıcı kullanılır.

Sık kullanılan ayırıcılar - Boşluk, Virgül, Nokta, Kesme İşareti, Sol / Sağ Parantez ve Tırnak işareti.

Yorum Yap

Yorum, bir programın yürütülmesini etkilemeyen bir karakter dizesidir. Herhangi bir karakter kombinasyonu olabilir.

İki tür yorum vardır -

Yorum Satırı

Herhangi bir sütuna yorum satırı yazılabilir. Derleyici, sözdizimi için bir açıklama satırını kontrol etmez ve bunu dokümantasyon için ele alır.

Yorum Girişi

Yorum girişleri, bir Tanımlama Bölümünün isteğe bağlı paragraflarında yer alanlardır. Alan B'ye yazılırlar ve programcılar bunu referans olarak kullanır.

Vurgulanan metin Bold aşağıdaki örnekte açıklamalı girişlerdir -

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 programının üzerinde çalıştırmak için -

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

Yukarıdaki programı derleyip yürüttüğünüzde, aşağıdaki sonucu verir -

Comment Line

Değişmez

Değişmez değer, bir programda doğrudan kodlanmış bir sabittir. Aşağıdaki örnekte, "Merhaba Dünya" birebirdir.

PROCEDURE DIVISION.
DISPLAY 'Hello World'.

Aşağıda tartışıldığı gibi iki tür değişmez bilgi vardır -

Alfanümerik Değişmez

Alfasayısal Değişmezler tırnak işaretleri veya kesme işareti içine alınır. Uzunluk 160 karaktere kadar olabilir. Bir kesme işareti veya bir alıntı, yalnızca eşleştirilmişse gerçek bilginin bir parçası olabilir. Hazır bilginin başlangıcı ve bitişi, kesme işareti veya alıntı şeklinde aynı olmalıdır.

Example

Aşağıdaki örnek, geçerli ve geçersiz Alfasayısal Değişmezleri gösterir -

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

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

Sayısal Değişmez Değer

Sayısal Değişmez Değer, 0 ile 9 arasındaki rakamların, +, - veya ondalık noktaların birleşimidir. Uzunluk 18 karaktere kadar olabilir. İşaret en sağdaki karakter olamaz. Ondalık nokta sonunda görünmemelidir.

Example

Aşağıdaki örnek, geçerli ve geçersiz Sayısal Değişmezleri gösterir -

Valid:
   100
   +10.9
   -1.9

Invalid:
   1,00
   10.
   10.9-

COBOL Kelimesi

COBOL Word, ayrılmış bir kelime veya kullanıcı tanımlı bir kelime olabilen bir karakter dizisidir. Uzunluk 30 karaktere kadar olabilir.

Kullanıcı tanımlı

Kullanıcı tanımlı sözcükler dosyaları, verileri, kayıtları, paragraf adlarını ve bölümleri adlandırmak için kullanılır. Kullanıcı tanımlı sözcükler oluşturulurken alfabelere, rakamlara ve tirelere izin verilir. COBOL için ayrılmış kelimeleri kullanamazsınız.

Ayrılmış kelimeler

Ayrılmış sözcükler, COBOL'de önceden tanımlanmış sözcüklerdir. Sık kullandığımız farklı ayrılmış kelime türleri aşağıdaki gibidir:

  • Keywords EKLE, KABUL ET, TAŞI vb.

  • Special characters +, -, *, <, <=, vb. gibi kelimeler

  • Figurative constants SIFIR, BOŞLUK vb. gibi sabit değerlerdir. Figüratif sabitlerin tüm sabit değerleri aşağıdaki tabloda belirtilmiştir.

Figüratif Sabitler

Sr.No. Figüratif Sabitler ve Açıklama
1

HIGH-VALUES

Azalan sırada en yüksek konumda olacak bir veya daha fazla karakter.

2

LOW-VALUES

İkili gösterimde bir veya daha fazla karakterin sıfırları var.

3

ZERO/ZEROES

Değişkenin boyutuna bağlı olarak bir veya daha fazla sıfır.

4

SPACES

Bir veya daha fazla boşluk.

5

QUOTES

Tek veya çift tırnak.

6

ALL literal

Veri öğesini Literal ile doldurur.

Veri Bölme, bir programda kullanılan değişkenleri tanımlamak için kullanılır. COBOL'deki verileri tanımlamak için aşağıdaki terimlerin anlaşılması gerekir -

  • Veri Adı
  • Seviye Numarası
  • Resim Maddesi
  • Değer İfadesi
01            TOTAL-STUDENTS            PIC9(5)            VALUE '125'.
|                    |                    |                    |
|                    |                    |                    |
|                    |                    |                    | 
Level Number     Data Name           Picture Clause       Value Clause

Veri Adı

Veri adları, Prosedür Bölümünde kullanılmadan önce Veri Bölümünde tanımlanmalıdır. Kullanıcı tanımlı bir ada sahip olmaları gerekir; ayrılmış sözcükler kullanılamaz. Veri adları, gerçek verilerin depolandığı bellek konumlarına referans verir. Temel veya grup türü olabilirler.

Misal

Aşağıdaki örnek, geçerli ve geçersiz veri adlarını gösterir -

Valid:
   WS-NAME
   TOTAL-STUDENTS
   A100
   100B

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

Seviye Numarası

Seviye numarası, bir kayıttaki veri seviyesini belirtmek için kullanılır. Temel öğeler ve grup öğeleri arasında ayrım yapmak için kullanılırlar. Temel öğeler, grup öğeleri oluşturmak için birlikte gruplanabilir.

Sr.No. Seviye Numarası ve Açıklama
1

01

Açıklama girişini kaydet

2

02 to 49

Grup ve Temel öğeler

3

66

Madde öğelerini yeniden adlandırın

4

77

Alt bölümlere ayrılamayan öğeler

5

88

Koşul adı girişi

  • Elementary itemsdaha fazla bölünemez. Seviye numarası, Veri adı, Resim cümlesi ve Değer cümlesi (isteğe bağlı) temel bir öğeyi tanımlamak için kullanılır.

  • Group itemsbir veya daha fazla temel öğeden oluşur. Seviye numarası, Veri adı ve Değer cümlesi (isteğe bağlı) bir grup öğesini tanımlamak için kullanılır. Grup seviyesi numarası her zaman 01'dir.

Misal

Aşağıdaki örnek, Grup ve Temel öğeleri gösterir -

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

Resim Maddesi

Resim cümlesi aşağıdaki öğeleri tanımlamak için kullanılır -

  • Data typesayısal, alfabetik veya alfasayısal olabilir. Sayısal tür yalnızca 0 - 9 arasındaki rakamlardan oluşur. Alfabetik tür, A - Z arasındaki harflerden ve boşluklardan oluşur. Alfasayısal tür, rakamlardan, harflerden ve özel karakterlerden oluşur.

  • Signsayısal verilerle kullanılabilir. + Veya - olabilir.

  • Decimal point positionsayısal verilerle kullanılabilir. Varsayılan konum, ondalık noktanın konumudur ve verilere dahil edilmez.

  • Length veri öğesi tarafından kullanılan bayt sayısını tanımlar.

Resim cümlesinde kullanılan semboller -

Sr.No. Sembol ve Açıklama
1

9

Sayısal

2

A

Alfabetik

3

X

Alfanümerik

4

V

Örtülü Ondalık

5

S

İşaret

6

P

Varsayılan Ondalık

Misal

Aşağıdaki örnek, PIC cümlesinin kullanımını gösterir -

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 yukarıdaki COBOL programını yürütmek için -

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

Yukarıdaki programı derleyip yürüttüğünüzde, aşağıdaki sonucu verir -

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

Değer İfadesi

Değer cümlesi, veri öğelerini başlatmak için kullanılan isteğe bağlı bir cümledir. Değerler sayısal değişmez, alfanümerik değişmez veya mecazi sabit olabilir. Hem grup hem de temel öğelerle kullanılabilir.

Misal

Aşağıdaki örnek, VALUE cümlesinin kullanımını gösterir -

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 yukarıdaki COBOL programını yürütmek için -

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

Yukarıdaki programı derleyip yürüttüğünüzde, aşağıdaki sonucu verir -

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

COBOL fiilleri, veri işleme için prosedür bölümünde kullanılır. Bir ifade her zaman bir COBOL fiiliyle başlar. Farklı türden eylemlere sahip birkaç COBOL fiili vardır.

Giriş / Çıkış Fiilleri

Giriş / Çıkış fiilleri, kullanıcıdan veri almak ve COBOL programlarının çıktısını görüntülemek için kullanılır. Bu işlem için aşağıdaki iki fiil kullanılır -

Fiili Kabul Et

Kabul fiili, işletim sisteminden veya doğrudan kullanıcıdan tarih, saat ve gün gibi verileri almak için kullanılır. Bir program kullanıcıdan veri kabul ediyorsa, JCL'den geçirilmesi gerekir. İşletim sisteminden veri alırken, FROM seçeneği aşağıdaki örnekte gösterildiği gibi dahil edilir -

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

Fiili Göster

Ekran fiili, bir COBOL programının çıktısını görüntülemek için kullanılır.

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 yukarıdaki COBOL programını yürütmek için -

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

Yukarıdaki programı derleyip yürüttüğünüzde, aşağıdaki sonucu verir -

Name : TutorialsPoint
Date : 200623

Fiili Başlat

Başlatma fiili, bir grup öğesini veya temel bir öğeyi başlatmak için kullanılır. RENAME yan tümcesine sahip veri adları başlatılamaz. Sayısal veri öğeleri SIFIRLAR ile değiştirilir. Alfasayısal veya alfabetik veri öğeleri SPACES ile değiştirilir. DEĞİŞTİRME terimini eklersek, veri öğeleri verilen değiştirme değerine aşağıdaki örnekte gösterildiği gibi başlatılabilir -

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 yukarıdaki COBOL programını yürütmek için -

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

Yukarıdaki programı derleyip yürüttüğünüzde, aşağıdaki sonucu verir -

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

Fiili Taşı

Fiili taşı, verileri kaynak verilerden hedef verilere kopyalamak için kullanılır. Hem temel hem de grup veri öğelerinde kullanılabilir. Grup verisi öğeleri için, HAREKET ETKİSİ / DÜZELT kullanılır. Try it seçeneğinde, MOVE CORR çalışmıyor; ancak bir ana bilgisayar sunucusunda çalışacaktır.

Bir dizeden veri taşımak için, MOVE (x: l) kullanılır, burada x başlangıç ​​konumu ve l uzunluktur. Hedef veri öğesi PIC yan tümcesi kaynak veri öğesi PIC yan tümcesinden daha azsa veriler kesilecektir. Hedef veri öğesi PIC yan tümcesi kaynak veri öğesi PIC yan tümcesinden fazlaysa, ekstra baytlara ZEROS veya SPACES eklenir. Aşağıdaki örnek bunu netleştirir.

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 Yukarıdaki COBOL programını yürütmek için.

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

Yukarıdaki programı derleyip yürüttüğünüzde, aşağıdaki sonucu verir -

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

Yasal Hareketler

Aşağıdaki tablo yasal hamleler hakkında bilgi verir -

Alfabetik Alfanümerik Sayısal
Alfabetik Mümkün Mümkün Mümkün değil
Alfanümerik Mümkün Mümkün Mümkün
Sayısal Mümkün değil Mümkün Mümkün

Fiil Ekle

Fiil ekle, iki veya daha fazla sayı eklemek ve sonucu hedef işlenende saklamak için kullanılır.

Sözdizimi

Aşağıda, İki veya daha fazla numara eklemek için sözdizimi verilmiştir -

ADD A B TO C D

ADD A B C TO D GIVING E

ADD CORR WS-GROUP1 TO WS-GROUP2

Sözdiziminde-1, A, B, C eklenir ve sonuç C'de saklanır (C = A + B + C). A, B, D eklenir ve sonuç D'de saklanır (D = A + B + D).

Sözdiziminde-2, A, B, C, D eklenir ve sonuç E'de saklanır (E = A + B + C + D).

Sözdizimi-3'te, WS-GROUP1 ve WS-GROUP2 içindeki alt grup öğeleri eklenir ve sonuç WS-GROUP2'de saklanır.

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 yukarıdaki COBOL programını yürütmek için -

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

Yukarıdaki programı derleyip yürüttüğünüzde, aşağıdaki sonucu verir -

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

Fiil Çıkarma

Çıkarma fiili çıkarma işlemleri için kullanılır.

Sözdizimi

Aşağıda, Çıkarma işlemleri için sözdizimi verilmiştir -

SUBTRACT A B FROM C D

SUBTRACT A B C FROM D GIVING E

SUBTRACT CORR WS-GROUP1 TO WS-GROUP2

Sözdizimi-1'de, A ve B eklenir ve C'den çıkarılır. Sonuç C'de saklanır (C = C- (A + B)). A ve B eklenir ve D'den çıkarılır. Sonuç D'de saklanır (D = D- (A + B)).

Sözdiziminde-2, A, B, C eklenir ve D'den çıkarılır. Sonuç E'de saklanır (E = D- (A + B + C))

Sözdizimi-3'te, WS-GROUP1 ve WS-GROUP2 içindeki alt grup öğeleri çıkarılır ve sonuç WS-GROUP2'de saklanır.

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 yukarıdaki COBOL programını yürütmek için -

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

Yukarıdaki programı derleyip yürüttüğünüzde, aşağıdaki sonucu verir -

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

Fiili Çarp

Çarpma fiili, çarpma işlemleri için kullanılır.

Sözdizimi

Aşağıda, iki veya daha fazla sayıyı çarpmak için kullanılan sözdizimi verilmiştir -

MULTIPLY A BY B C

MULTIPLY A BY B GIVING E

Sözdizimi-1'de, A ve B çarpılır ve sonuç B'de saklanır (B = A * B). A ve C çarpılır ve sonuç C'de saklanır (C = A * C).

Sözdizimi-2'de, A ve B çarpılır ve sonuç E'de saklanır (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 yukarıdaki COBOL programını yürütmek için -

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

Yukarıdaki programı derleyip yürüttüğünüzde, aşağıdaki sonucu verir -

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

Fiili Böl

Bölme fiili, bölme işlemleri için kullanılır.

Sözdizimi

Aşağıda, bölme işlemleri için sözdizimi verilmiştir -

DIVIDE A INTO B

DIVIDE A BY B GIVING C REMAINDER R

Sözdizimi-1'de B, A'ya bölünür ve sonuç B'de saklanır (B = B / A).

Sözdizimi-2'de, A, B'ye bölünür ve sonuç C'de (C = A / B) ve geri kalanı R'de saklanı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 yukarıdaki COBOL programını yürütmek için -

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

Yukarıdaki programı derleyip yürüttüğünüzde, aşağıdaki sonucu verir -

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

Hesaplama İfadesi

Hesaplama ifadesi, COBOL'de aritmetik ifadeler yazmak için kullanılır. Bu, Toplama, Çıkarma, Çarpma ve Bölme işlevlerinin yerine geçer.

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 Yukarıdaki COBOL programını yürütmek için.

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

Yukarıdaki programı derleyip yürüttüğünüzde, aşağıdaki sonucu verir -

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

COBOL düzeni, her alanın kullanımının ve içinde bulunan değerlerin açıklamasıdır. COBOL'de kullanılan veri açıklaması girişleri aşağıdadır -

  • Maddeyi Yeniden Tanımlıyor
  • Clause'yi yeniden adlandırır
  • Kullanım Maddesi
  • Copybooks

Maddeyi Yeniden Tanımlıyor

Yeniden tanımlar yan tümcesi, farklı veri açıklamasına sahip bir depolamayı tanımlamak için kullanılır. Bir veya daha fazla veri öğesi aynı anda kullanılmazsa, aynı depolama başka bir veri öğesi için kullanılabilir. Dolayısıyla aynı depolama, farklı veri öğeleriyle belirtilebilir.

Sözdizimi

Redefines cümlesinin sözdizimi aşağıdadır -

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

Kullanılan parametrelerin ayrıntıları aşağıdadır -

  • WS-ESKİ Yeniden Tanımlanan Öğe
  • WS-NEW1 ve WS-NEW2 Öğeyi Yeniden Tanımlıyor

Yeniden tanımlanan ve yeniden tanımlayan öğenin seviye numaraları aynı olmalı ve 66 veya 88 seviye numarası olamaz. Yeniden tanımlayan bir öğe ile VALUE yan tümcesi kullanmayın. Dosya Bölümünde, 01 seviye numaralı bir yeniden tanımlayan madde kullanmayın. Tanımı yeniden tanımlar, yeniden tanımlamak istediğiniz bir sonraki veri açıklaması olmalıdır. Yeniden tanımlayan bir öğe her zaman yeniden tanımlanmış bir öğeyle aynı değere sahip olacaktır.

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 yukarıdaki COBOL programını yürütmek için -

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

Yukarıdaki programı derleyip çalıştırdığınızda, aşağıdaki sonucu verir -

WS-DATE1 : 20140831
WS-DATE2 : 20140831

Clause'yi yeniden adlandırır

Renames cümlesi, mevcut veri öğelerine farklı adlar vermek için kullanılır. Veri adlarını yeniden gruplamak ve bunlara yeni bir ad vermek için kullanılır. Yeni veri adları, gruplar veya temel öğeler arasında yeniden adlandırılabilir. Seviye numarası 66, yeniden adlandırma için ayrılmıştır.

Syntax

Renames yan tümcesi için sözdizimi aşağıdadır -

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.

Yeniden adlandırma yalnızca aynı düzeyde mümkündür. Yukarıdaki örnekte, WS-A, WS-B ve WS-C aynı seviyededir. Yeniden adlandırma tanımı, yeniden adlandırmak istediğiniz sonraki veri açıklaması olmalıdır. 01, 77 veya 66 seviye numarası ile Yeniden Adlandırmalar kullanmayın. Yeniden adlandırmalar için kullanılan veri adları sırayla gelmelidir. Oluş yan tümcesi olan veri öğeleri yeniden adlandırılamaz.

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 yukarıdaki COBOL programını yürütmek için -

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

Yukarıdaki programı derleyip yürüttüğünüzde, aşağıdaki sonucu verir -

WS-RENAME : 56AABB

Kullanım Maddesi

Kullanım cümlesi, format verilerinin depolandığı işletim sistemini belirtir. Seviye 66 veya 88 ile kullanılamaz. Bir grupta kullanım cümlesi belirtilmişse, tüm temel öğeler aynı kullanım maddesine sahip olacaktır. Kullanım maddesinde bulunan farklı seçenekler aşağıdaki gibidir -

Görüntüle

Veri öğesi ASCII formatında saklanır ve her karakter 1 bayt alır. Varsayılan kullanımdır.

Aşağıdaki örnek, gerekli bayt sayısını hesaplar -

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.

HESAPLAMALI / BİLGİSAYAR

Veri öğesi ikili biçimde saklanır. Burada veri öğeleri tam sayı olmalıdır.

Aşağıdaki örnek, gerekli bayt sayısını hesaplar -

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

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

COMP-1

Veri öğesi Gerçek veya Kayan'a benzer ve tek bir hassas kayan noktalı sayı olarak temsil edilir. Veriler dahili olarak onaltılık formatta saklanır. COMP-1, PIC maddesini kabul etmez. Burada 1 kelime 4 bayta eşittir.

COMP-2

Veri öğesi Uzun veya Çift'e benzer ve çift duyarlıklı kayan noktalı sayı olarak temsil edilir. Veriler dahili olarak onaltılık formatta saklanır. COMP-2, PIC hükmünü belirtmez. Burada 2 kelime 8 bayta eşittir.

COMP-3

Veri öğesi, paketlenmiş ondalık formatta saklanır. Her rakam yarım bayt (1 yarım bayt) kaplar ve işaret en sağdaki yarım baytta saklanır.

Aşağıdaki örnek, gerekli bayt sayısını hesaplar -

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.

Defterler

COBOL copybook, veri yapılarını tanımlayan bir kod seçimidir. Birçok programda belirli bir veri yapısı kullanılıyorsa, aynı veri yapısını tekrar yazmak yerine kopya defterlerini kullanabiliriz. COPY deyimini bir programa bir kopya defteri eklemek için kullanıyoruz. COPY deyimi, WorkingStorage Bölümünde kullanılır.

Aşağıdaki örnek, bir COBOL programı içindeki bir kopyasını içerir -

DATA DIVISION.
WORKING-STORAGE SECTION.
COPY ABC.

Burada ABC, kopya kitabının adıdır. ABC kopyasında bulunan aşağıdaki veri öğeleri bir program içinde kullanılabilir.

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

Koşul deyimleri, programcı tarafından belirtilen belirli koşullara bağlı olarak yürütme akışını değiştirmek için kullanılır. Koşullu ifadeler her zaman doğru veya yanlış olarak değerlendirilir. Koşullar, IF, Evaluate ve Perform ifadelerinde kullanılır. Farklı koşul türleri aşağıdaki gibidir -

  • IF Durum Beyanı
  • İlişki Durumu
  • İşaret Durumu
  • Sınıf Durumu
  • Koşul-Ad Koşul
  • Olumsuz Durum
  • Birleşik Durum

IF Durum Beyanı

IF ifadesi koşulları kontrol eder. Bir koşul doğruysa, IF bloğu yürütülür; ve koşul yanlışsa, ELSE bloğu çalıştırılır.

END-IFIF bloğunu sonlandırmak için kullanılır. IF bloğunu sonlandırmak için END-IF yerine bir nokta kullanılabilir. Ancak, birden fazla IF bloğu için END-IF kullanılması her zaman tercih edilir.

Nested-IF- Başka bir IF bloğunun içinde görünen IF blokları. İç içe geçmiş EĞER ifadelerinin derinliği için bir sınır yoktur.

Sözdizimi

Aşağıda, IF koşul ifadelerinin sözdizimi verilmiştir -

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 yukarıdaki COBOL programını yürütmek için -

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

Yukarıdaki programı derleyip yürüttüğünüzde, aşağıdaki sonucu verir -

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

İlişki Durumu

İlişki koşulu, her ikisi de bir tanımlayıcı, değişmez veya aritmetik ifade olabilen iki işleneni karşılaştırır. Sayısal alanların cebirsel karşılaştırması, boyut ve kullanım maddesine bakılmaksızın yapılır.

For non-numeric operands

Eşit büyüklükte iki sayısal olmayan işlenen karşılaştırılırsa, karakterler soldan sona ulaşılana kadar karşılık gelen konumlarla karşılaştırılır. Daha fazla sayıda karakter içeren işlenen daha büyük olarak bildirilir.

Eşit olmayan boyutta iki sayısal olmayan işlenen karşılaştırılırsa, daha kısa veri öğesi, işlenenlerin boyutu eşit olana kadar sonunda boşluklarla eklenir ve daha sonra önceki noktada belirtilen kurallara göre karşılaştırılır.

Sözdizimi

Aşağıda, İlişki koşulu ifadelerinin sözdizimi verilmiştir -

[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 yukarıdaki COBOL programını yürütmek için -

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

Yukarıdaki programı derleyip çalıştırdığınızda, aşağıdaki sonucu verir -

WS-NUM1 IS GREATER THAN WS-NUM2

İşaret Durumu

İşaret koşulu, sayısal bir işlenenin işaretini kontrol etmek için kullanılır. Belirli bir sayısal değerin SIFIR'dan büyük, küçük veya buna eşit olup olmadığını belirler.

Sözdizimi

İşaret koşulu ifadelerinin sözdizimi aşağıdadır -

[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 yukarıdaki COBOL programını yürütmek için -

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

Yukarıdaki programı derleyip çalıştırdığınızda, aşağıdaki sonucu verir -

WS-NUM1 IS NEGATIVE
WS-NUM2 IS POSITIVE

Sınıf Durumu

Sınıf koşulu, bir işlenenin yalnızca alfabe veya sayısal veri içerip içermediğini kontrol etmek için kullanılır. Alanlar ALFABETİK, ALFABETİK-ALT ve ALFABETİK-ÜST olarak kabul edilir.

Sözdizimi

Sınıf koşulu ifadelerinin sözdizimi aşağıdadır -

[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 yukarıdaki COBOL programını yürütmek için -

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

Yukarıdaki programı derleyip yürüttüğünüzde, aşağıdaki sonucu verir -

WS-NUM1 IS ALPHABETIC
WS-NUM2 IS NUMERIC

Koşul-adı Koşul

Koşul adı, kullanıcı tanımlı bir addır. Kullanıcı tarafından belirtilen bir dizi değeri içerir. Boole değişkenleri gibi davranır. Seviye 88 ile tanımlanırlar. PIC yan tümcesi olmayacaktır.

Sözdizimi

Kullanıcı tanımlı koşul ifadelerinin sözdizimi aşağıdadır -

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 yukarıdaki COBOL programını yürütmek için -

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

Yukarıdaki programı derleyip yürüttüğünüzde, aşağıdaki sonucu verir -

Passed with 065 marks

Olumsuz Durum

Olumsuz koşul, NOT anahtar sözcüğü kullanılarak verilir. Bir koşul doğruysa ve önüne DEĞİL vermişsek, son değeri yanlış olacaktır.

Sözdizimi

Olumsuz koşul ifadelerinin sözdizimi aşağıdadır -

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 yukarıdaki COBOL programını yürütmek için -

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

Yukarıdaki programı derleyip yürüttüğünüzde, aşağıdaki sonucu verir -

ELSE-BLOCK

Birleşik Durum

Birleşik bir koşul, AND veya OR mantıksal operatörleri kullanılarak birbirine bağlanan iki veya daha fazla koşul içerir.

Sözdizimi

Aşağıda, birleşik koşul ifadelerinin sözdizimi verilmiştir -

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 yukarıdaki COBOL programını yürütmek için -

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

Yukarıdaki programı derleyip yürüttüğünüzde, aşağıdaki sonucu verir -

Both condition OK

Fiili Değerlendir

Değerlendir fiili, IF-ELSE ifadesinin yerine geçer. Birden fazla durumu değerlendirmek için kullanılabilir. C programlarındaki SWITCH deyimine benzer.

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 yukarıdaki COBOL programını yürütmek için -

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

Yukarıdaki programı derleyip yürüttüğünüzde, aşağıdaki sonucu verir -

WS-A GREATER THAN 2

Bir dosyanın her kaydını sonuna kadar okumak gibi tekrar tekrar yapılması gereken bazı görevler vardır. COBOL'de kullanılan döngü ifadeleri şunlardır:

  • Thru Gerçekleştir
  • Kadar Gerçekleştir
  • Gerçek Zamanlar
  • Değişken Yap

Thru Gerçekleştir

Perform Thru, dizideki ilk ve son paragraf adlarını vererek bir dizi paragrafı yürütmek için kullanılır. Son paragrafı yürüttükten sonra kontrol geri döndürülür.

Hat İçi Gerçekleştirme

PERFORM içindeki ifadeler, SON PERFORM'a ulaşılıncaya kadar yürütülecektir.

Sözdizimi

Satır içi performans söz dizimi aşağıdadır -

PERFORM 
   DISPLAY 'HELLO WORLD'
END-PERFORM.

Hat dışı Performans

Burada, bir paragrafta bir ifade çalıştırılır ve ardından kontrol başka bir paragrafa veya bölüme aktarılır.

Sözdizimi

Hat dışı performans sözdizimi aşağıdadır -

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 Yukarıdaki COBOL programını yürütmek için.

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

Yukarıdaki programı derleyip yürüttüğünüzde, aşağıdaki sonucu verir -

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

Kadar Gerçekleştir

'Şu tarihe kadar gerçekleştir' seçeneğinde, verilen koşul gerçekleşene kadar bir paragraf yürütülür. 'Önceden test ile' varsayılan koşuldur ve bir paragraftaki ifadelerin yürütülmesinden önce koşulun kontrol edildiğini belirtir.

Sözdizimi

Aşağıdakilere kadar performans sözdizimi verilmiştir -

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 yukarıdaki COBOL programını yürütmek için -

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

Yukarıdaki programı derleyip yürüttüğünüzde, aşağıdaki sonucu verir -

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

Gerçek Zamanlar

'Gerçekleştirme sürelerinde', bir paragraf belirtilen sayıda çalıştırılacaktır.

Sözdizimi

Aşağıda, gerçekleştirme sürelerinin sözdizimi verilmiştir -

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 yukarıdaki COBOL programını yürütmek için -

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

Yukarıdaki programı derleyip yürüttüğünüzde, aşağıdaki sonucu verir -

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

Değişken Yap

Değişken gerçekleştirmede, tümcecik gerçekleşene kadar bir paragraf yürütülür.

Sözdizimi

Farklı performans sözdizimi aşağıdadır -

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 yukarıdaki COBOL programını yürütmek için -

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

Yukarıdaki programı derleyip yürüttüğünüzde, aşağıdaki sonucu verir -

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

İfadeye Git

GO TO deyimi, bir programdaki yürütme akışını değiştirmek için kullanılır. GO TO ifadelerinde, aktarım yalnızca ileri yönde gider. Bir paragraftan çıkmak için kullanılır. Kullanılan farklı GO TO deyimi türleri aşağıdaki gibidir -

Koşulsuz GİT

GO TO para-name.

Koşullu GİT

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

'X' 1'e eşitse, kontrol ilk paragrafa aktarılacaktır; ve 'x' 2'ye eşitse, kontrol ikinci paragrafa aktarılır ve böyle devam eder.

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 yukarıdaki COBOL programını yürütmek için:

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

Yukarıdaki programı derleyip çalıştırdığınızda, aşağıdaki sonucu verir:

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

COBOL'deki dize işleme deyimleri, dizeler üzerinde birden çok işlevsel işlem yapmak için kullanılır. Aşağıda dize işleme ifadeleri verilmiştir -

  • Inspect
  • String
  • Unstring

İncele

İnceleme fiili, bir dizedeki karakterleri saymak veya değiştirmek için kullanılır. Dize işlemleri alfasayısal, sayısal veya alfabetik değerlerde gerçekleştirilebilir. İnceleme işlemleri soldan sağa gerçekleştirilir. Dize işlemleri için kullanılan seçenekler aşağıdaki gibidir -

Tallying

Tallying seçeneği, dize karakterlerini saymak için kullanılır.

Syntax

Tallying seçeneğinin sözdizimi aşağıdadır -

INSPECT input-string
TALLYING output-count FOR ALL CHARACTERS

Kullanılan parametreler -

  • input-string - Karakterleri sayılacak dize.
  • output-count - Karakter sayısını tutmak için veri öğesi.

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 Yukarıdaki COBOL programını yürütmek için.

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

Yukarıdaki programı derleyip yürüttüğünüzde, aşağıdaki sonucu verir -

WS-CNT1 : 15
WS-CNT2 : 06

Değiştiriliyor

Dize karakterlerini değiştirmek için değiştirme seçeneği kullanılır.

Syntax

Aşağıda, Değiştirme seçeneğinin sözdizimi verilmiştir -

INSPECT input-string REPLACING ALL char1 BY char2.

Kullanılan parametre -

  • input-string - Karakterleri, char1'den char2'ye değiştirilecek dize.

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 Yukarıdaki COBOL programını yürütmek için.

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

Yukarıdaki programı derleyip yürüttüğünüzde, aşağıdaki sonucu verir -

OLD STRING : ABCDACDADEAAAFF
NEW STRING : XBCDXCDXDEXXXFF

Dize

Dize fiili dizeleri birleştirmek için kullanılır. STRING deyimini kullanarak, iki veya daha fazla karakter dizisi, daha uzun bir dize oluşturmak için birleştirilebilir. 'Sınırlandırılmış' ibaresi zorunludur.

Syntax

String fiilinin sözdizimi aşağıdadır -

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.

Kullanılan parametrelerin ayrıntıları aşağıdadır -

  • ws-string1 ve ws-string2: Birleştirilecek giriş dizeleri
  • ws-string: Çıktı dizesi
  • ws-count: Yeni birleştirilmiş dizenin uzunluğunu saymak için kullanılır
  • Sınırlandırılmış, dizenin sonunu belirtir
  • İşaretçi ve Taşma isteğe bağlıdır

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 yukarıdaki COBOL programını yürütmek için -

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

Yukarıdaki programı derleyip yürüttüğünüzde, aşağıdaki sonucu verir -

WS-STRING : WelcomeToTutorialspoint       
WS-COUNT : 25

İp çözme

Dize çözme fiili, bir dizeyi birden çok alt dizeye bölmek için kullanılır. Sınırlandırılmış madde zorunludur.

Syntax

Dizgi çözme fiilinin sözdizimi aşağıdadır -

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 yukarıdaki COBOL programını yürütmek için -

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

Yukarıdaki programı derleyip yürüttüğünüzde, aşağıdaki sonucu verir -

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

COBOL'deki diziler tablolar olarak bilinir. Bir dizi, doğrusal bir veri yapısıdır ve aynı türden ayrı ayrı veri öğelerinin bir koleksiyonudur. Bir tablonun veri öğeleri dahili olarak sıralanır.

Tablo Beyanı

Tablo Veri Bölümünde açıklanmıştır. Occurscümlesi bir tabloyu tanımlamak için kullanılır. Occurs cümlesi, veri adı tanımının tekrarını gösterir. Sadece 02'den 49'a kadar olan seviye numaraları ile kullanılabilir. Oluş cümlesi Redefines ile kullanılmaz. Tek boyutlu ve iki boyutlu tablonun açıklaması aşağıdaki gibidir -

Tek Boyutlu Tablo

Tek boyutlu bir tabloda, occurscümlesi bildirimde yalnızca bir kez kullanılır. WSTABLE, tabloyu içeren grup öğesidir. WS-B, 10 kez oluşan tablo öğelerini adlandırır.

Syntax

Aşağıda, tek boyutlu bir tabloyu tanımlamak için sözdizimi verilmiştir -

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 yukarıdaki COBOL programını yürütmek için -

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

Yukarıdaki programı derleyip yürüttüğünüzde, aşağıdaki sonucu verir -

ONE-D TABLE : TUTORIALS TUTORIALS TUTORIALS TUTORIALS TUTORIALS

İki Boyutlu Tablo

Her iki veri elemanının değişken uzunlukta olduğu iki boyutlu bir tablo oluşturulur. Başvuru için sözdizimini gözden geçirin ve ardından tabloyu analiz etmeye çalışın. İlk dizi (WS-A) 1 ila 10 kez oluşabilir ve iç dizi (WS-C) 1 ila 5 kez oluşabilir. WS-A'nın her girişi için, karşılık gelen 5 WS-C girişi olacaktır.

Syntax

İki boyutlu bir tabloyu tanımlamak için sözdizimi aşağıdadır -

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 yukarıdaki COBOL programını yürütmek için -

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

Yukarıdaki programı derleyip yürüttüğünüzde, aşağıdaki sonucu verir -

TWO-D TABLE :  TUTORIALS POINT POINT TUTORIALS POINT POINT

Alt simge

Tablo tek tek elemanlarına alt simge kullanılarak erişilebilir. Alt simge değerleri 1 ile tablonun oluşma sayısı arasında değişebilir. Alt simge herhangi bir pozitif sayı olabilir. Veri bölümünde herhangi bir beyan gerektirmez. Otomatik olarak oluşur cümlesi ile oluşturulur.

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 yukarıdaki COBOL programını yürütmek için -

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

Yukarıdaki programı derleyip yürüttüğünüzde, aşağıdaki sonucu verir -

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

Dizin

Tablo öğelerine indeks kullanılarak da erişilebilir. Bir indeks, tablonun başından itibaren öğenin yer değiştirmesidir. INDEXED BY yan tümcesi kullanılarak Occurs yan tümcesi ile bir dizin bildirilir. Dizinin değeri SET deyimi ve PERFORM Varying seçeneği kullanılarak değiştirilebilir.

Syntax

Bir tablodaki Dizini tanımlamak için sözdizimi aşağıdadır -

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 yukarıdaki COBOL programını yürütmek için -

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

Yukarıdaki programı derleyip yürüttüğünüzde, aşağıdaki sonucu verir -

ABC
DEF
GHI
JKL
MNO
PQR

Set İfadesi

Dizin değerini değiştirmek için set ifadesi kullanılır. Set fiili, dizin değerini başlatmak, artırmak veya azaltmak için kullanılır. Tablodaki öğeleri bulmak için Ara ve Tümünü Ara ile birlikte kullanılır.

Syntax

Aşağıda bir Set deyimi kullanmak için sözdizimi verilmiştir -

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 Yukarıdaki COBOL programını yürütmek için.

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

Yukarıdaki programı derleyip yürüttüğünüzde, aşağıdaki sonucu verir -

ABC
JKL

Arama

Arama, tablonun içindeki öğeleri bulmak için kullanılan doğrusal bir arama yöntemidir. Sıralı ve sıralanmamış tablo üzerinde yapılabilir. Yalnızca Index deyimiyle belirtilen tablolar için kullanılır. Endeksin başlangıç ​​değeri ile başlar. Aranan eleman bulunamazsa, indeks otomatik olarak 1 artırılır ve tablonun sonuna kadar devam eder.

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 Yukarıdaki COBOL programını yürütmek için.

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

Yukarıdaki programı derleyip yürüttüğünüzde, aşağıdaki sonucu verir -

LETTER M FOUND IN TABLE

Tümünü ara

Tümünü Ara, tablonun içindeki öğeleri bulmak için kullanılan ikili bir arama yöntemidir. Tümünü Ara seçeneği için tablo sıralı olmalıdır. Dizin, başlatma gerektirmez. İkili aramada, tablo ikiye bölünür ve aranan elemanın hangi yarısında bulunduğunu belirler. Bu işlem, eleman bulunana veya sona ulaşılana kadar tekrar eder.

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 yukarıdaki COBOL programını yürütmek için -

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

Yukarıdaki programı derleyip yürüttüğünüzde, aşağıdaki sonucu verir -

RECORD FOUND 
93
MNO

COBOL'deki dosya kavramı, C / C ++ 'dan farklıdır. COBOL'de 'Dosya'nın temellerini öğrenirken, her iki dilin kavramları ilişkilendirilmemelidir. Bunun yerine COBOL'de basit metin dosyaları kullanılamazPS (Physical Sequential) ve VSAMdosyalar kullanılır. PS dosyaları bu modülde tartışılacaktır.

COBOL'de dosya işlemeyi anlamak için, temel terimlerin bilinmesi gerekir. Bu terimler yalnızca dosya işlemenin temellerini anlamaya hizmet eder. Daha derinlemesine terminoloji, 'Dosya İşleme Fiilleri' bölümünde tartışılacaktır. Temel terimler aşağıdadır -

  • Field
  • Record
  • Fiziksel Kayıt
  • Mantıksal Kayıt
  • File

Aşağıdaki örnek, bu terimleri anlamanıza yardımcı olur -

Alan

Alan, bir öğe hakkında depolanan verileri belirtmek için kullanılır. Yukarıdaki örnekte gösterildiği gibi öğrenci kimliği, adı, puanları, toplam puanları ve yüzde gibi tek bir öğeyi temsil eder. Herhangi bir alandaki karakter sayısı alan boyutu olarak bilinir, örneğin öğrenci adı 10 karaktere sahip olabilir. Alanlar aşağıdaki özelliklere sahip olabilir -

  • Primary keysher kayıt için benzersiz olan ve belirli bir kaydı tanımlamak için kullanılan alanlardır. Örneğin, öğrencilerin işaretler dosyasında, her öğrencinin birincil anahtarı oluşturan benzersiz bir öğrenci kimliği olacaktır.

  • Secondary keysilgili verileri aramak için kullanılan benzersiz veya benzersiz olmayan alanlardır. Örneğin, öğrenci işaretleri dosyasında, öğrenci kimliği bilinmediğinde öğrencinin tam adı ikincil anahtar olarak kullanılabilir.

  • Descriptorsalanlar bir varlığı tanımlamak için kullanılır. Örneğin, öğrencilerde kayda anlam katan dosya, işaretler ve yüzde alanları bilinen tanımlayıcılardır.

Kayıt

Kayıt, bir varlığı tanımlamak için kullanılan alanlar koleksiyonudur. Bir veya daha fazla alan birlikte bir kayıt oluşturur. Örneğin, öğrencilerde dosya, öğrenci kimliği, adı, notları, toplam puanları ve yüzde işaretlerini tek bir kayıt oluşturur. Bir kayıttaki tüm alanların kümülatif boyutu, kayıt boyutu olarak bilinir. Bir dosyada bulunan kayıtlar sabit uzunlukta veya değişken uzunlukta olabilir.

Fiziksel Kayıt

Fiziksel kayıt, harici cihazda bulunan bilgilerdir. Blok olarak da bilinir.

Mantıksal Kayıt

Mantıksal kayıt, program tarafından kullanılan bilgidir. COBOL programlarında, herhangi bir anda yalnızca bir kayıt işlenebilir ve bu, mantıksal kayıt olarak adlandırılır.

Dosya

Dosya, ilgili kayıtların bir koleksiyonudur. Örneğin, öğrencilerin işaretler dosyası tüm öğrencilerin kayıtlarından oluşmaktadır.

Dosya organizasyonu, kayıtların bir dosyada nasıl düzenlendiğini gösterir. Kayıtlara erişim verimliliğini artırmak için farklı dosya organizasyonları vardır. Dosya düzenleme şemalarının türleri aşağıdadır -

  • Sıralı dosya organizasyonu
  • Dizine alınmış sıralı dosya organizasyonu
  • Göreceli dosya organizasyonu

Bu modüldeki ilgili terimlerle birlikte bahsedilen sözdizimleri yalnızca programdaki kullanımlarına atıfta bulunmaktadır. Bu sözdizimlerini kullanan programların tamamı 'Dosya işleme Fiilleri' bölümünde ele alınacaktır.

Sıralı Dosya Organizasyonu

Sıralı bir dosya, sırayla saklanan ve erişilen kayıtlardan oluşur. Sıralı dosya organizasyonunun temel nitelikleri aşağıdadır -

  • Kayıtlar sırayla okunabilir. 10 okuma için inci rekor, tüm önceki 9 kayıtlar okunmalı.

  • Kayıtlar sırayla yazılır. Arasına yeni bir kayıt eklenemez. Dosyanın sonuna her zaman yeni bir kayıt eklenir.

  • Bir kaydı sıralı bir dosyaya yerleştirdikten sonra, bir kaydı silmek, kısaltmak veya uzatmak mümkün değildir.

  • Bir kez girilen kayıtların sırası asla değiştirilemez.

  • Kaydın güncellenmesi mümkündür. Yeni kayıt uzunluğu eski kayıt uzunluğuyla aynıysa bir kaydın üzerine yazılabilir.

  • Sıralı çıktı dosyaları, yazdırma için iyi bir seçenektir.

Sözdizimi

Sıralı dosya organizasyonunun sözdizimi aşağıdadır -

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

Dizine Alınmış Sıralı Dosya Organizasyonu

Dizine alınmış sıralı bir dosya, sırayla erişilebilen kayıtlardan oluşur. Doğrudan erişim de mümkündür. İki bölümden oluşur -

  • Data File sıralı düzende kayıtlar içerir.

  • Index File veri dosyasında birincil anahtarı ve adresini içerir.

Sıralı dosya organizasyonunun temel nitelikleri aşağıdadır -

  • Kayıtlar, sıralı dosya organizasyonunda olduğu gibi sıralı olarak okunabilir.

  • Birincil anahtar biliniyorsa kayıtlara rastgele erişilebilir. İndeks dosyası, bir kaydın adresini almak için kullanılır ve ardından kayıt, veri dosyasından alınır.

  • Anahtar değerini kaydın dosyadaki konumu ile ilişkilendiren bu dosya sisteminde sıralı dizin tutulur.

  • Kayıtları getirmek için alternatif dizin de oluşturulabilir.

Sözdizimi

Dizine alınmış sıralı dosya organizasyonunun sözdizimi aşağıdadır -

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

Göreli Dosya Organizasyonu

Bir göreceli dosya, kendilerine göre sıralanan kayıtlardan oluşur. relative address. Aşağıda göreceli dosya organizasyonunun temel özellikleri verilmiştir -

  • Kayıtlar, sıralı ve indeksli dosya organizasyonunda olduğu gibi sıralı sırada okunabilir.

  • Kayıtlara göreceli anahtar kullanılarak erişilebilir. Göreceli anahtar, dosyanın başlangıç ​​adresine göre kaydın konumunu temsil eder.

  • Kayıtlar göreceli anahtar kullanılarak eklenebilir. Göreceli adres, göreceli anahtar kullanılarak hesaplanır.

  • Göreli dosya, kayıtlara en hızlı erişimi sağlar.

  • Bu dosya sisteminin ana dezavantajı, bazı ara kayıtların eksik olması durumunda, yer kaplayacak olmalarıdır.

Sözdizimi

Aşağıda göreceli dosya organizasyonunun sözdizimi verilmiştir -

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

Şimdiye kadar dosya organizasyon şemaları tartışıldı. Her dosya düzenleme şeması için farklı erişim modları kullanılabilir. Dosya erişim modu türleri aşağıdadır -

  • Sıralı Erişim
  • Rasgele erişim
  • Dinamik Erişim

Bu modüldeki ilgili terimlerle birlikte bahsedilen sözdizimleri yalnızca programdaki kullanımlarına atıfta bulunmaktadır. Bu sözdizimlerini kullanan tüm programlar bir sonraki bölümde tartışılacaktır.

Sıralı Erişim

Erişim modu sıralı olduğunda, kayıt alma yöntemi seçilen dosya organizasyonuna göre değişir.

  • İçin sequential files, kayıtlara eklendikleri sırayla erişilir.

  • İçin indexed fileskayıtları getirmek için kullanılan parametre kayıt anahtarı değerleridir.

  • İçin relative fileskayıtları almak için göreceli kayıt anahtarları kullanılır.

Sözdizimi

Sıralı erişim modunun sözdizimi aşağıdadır -

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

Rasgele erişim

Erişim modu RASGELE olduğunda, kayıt alma yöntemi seçilen dosya organizasyonuna göre değişir.

  • İçin indexed fileskayıtlara, birincil veya alternatif anahtar olabilen bir anahtar alanına yerleştirilen değere göre erişilir. Bir veya daha fazla alternatif dizin olabilir.

  • İçin relative files , kayıtlar ilgili kayıt anahtarları aracılığıyla alınır.

Sözdizimi

Aşağıda rastgele erişim modunun sözdizimi verilmiştir -

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

Dinamik Erişim

Dinamik erişim, aynı programda hem sıralı hem de rasgele erişimi destekler. Dinamik erişimle, bazı kayıtlara sıralı sırayla ve diğer kayıtlara anahtarlarıyla erişmek gibi hem sıralı hem de rastgele işlemleri gerçekleştirmek için bir dosya tanımı kullanılır.

Göreli ve dizinlenmiş dosyalarla dinamik erişim modu, READ deyimindeki NEXT ifadesini kullanarak bir dosyayı okurken sıralı erişim modu ve rasgele erişim modu arasında geçiş yapmanıza olanak tanır. SONRAKİ ve OKU işlevleri bir sonraki bölümde tartışılacaktır.

Sözdizimi

Dinamik erişim modunun sözdizimi aşağıdadır -

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

Dosya işleme fiilleri, dosyalarda çeşitli işlemleri gerçekleştirmek için kullanılır. Dosya işleme fiilleri aşağıdadır -

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

Açık Fiil

Aç, gerçekleştirilmesi gereken ilk dosya işlemidir. Aç başarılı olursa, bir dosya üzerinde yalnızca daha fazla işlem yapılabilir. Dosya yapısındaki değişkenler ancak bir dosyayı açtıktan sonra işlenebilir.FILE STATUS değişken her dosya işleminden sonra güncellenir.

Sözdizimi

OPEN "mode" file-name.

Burada, dosya-adı, dosyanızı adlandırmak için kullanacağınız bir dizedir. Aşağıdaki modlarda bir dosya açılabilir -

Sr.No. Mod ve Açıklama
1

Input

Giriş modu, mevcut dosyalar için kullanılır. Bu modda sadece dosyayı okuyabiliriz, dosya üzerinde başka hiçbir işleme izin verilmez.

2

Output

Çıktı modu, dosyalara kayıt eklemek için kullanılır. Eğer birsequential filekullanılır ve dosya bazı kayıtları tutuyorsa, önce mevcut kayıtlar silinecek ve ardından dosyaya yeni kayıtlar eklenecektir. Böyle bir durumda olmayacakindexed file veya a relative file.

3

Extend

Genişletme modu, kayıtları eklemek için kullanılır. sequential file. Bu modda, kayıtlar sonuna eklenir. Dosya erişim modu iseRandom veya Dynamic, ardından genişletme modu kullanılamaz.

4

I-O

Giriş-Çıkış modu, bir dosyanın kayıtlarını okumak ve yeniden yazmak için kullanılır.

Fiil Oku

Fiili oku dosya kayıtlarını okumak için kullanılır. Okumanın işlevi, kayıtları bir dosyadan almaktır. Her bir okuma fiilinde, dosya yapısına yalnızca bir kayıt okunabilir. Bir okuma işlemi gerçekleştirmek için dosyayı INPUT veya IO modunda açın. Her bir okuma deyiminde, dosya işaretçisi artırılır ve dolayısıyla ardışık kayıtlar okunur.

Sözdizimi

Dosya erişim modu sıralı olduğunda kayıtları okumak için sözdizimi aşağıdadır -

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.

Kullanılan parametreler aşağıdadır -

  • NEXT RECORD isteğe bağlıdır ve dizine alınmış sıralı bir dosya sıralı olarak okunduğunda belirtilir.

  • INTO cümlesi isteğe bağlıdır. ws-file-structure, READ ifadesinden değerleri almak için WorkingStorage Bölümünde tanımlanmıştır.

  • SONUNDA durumu dosyanın sonuna ulaşıldığında True olur.

Example- Aşağıdaki örnek, satır sıralı organizasyonu kullanan mevcut bir dosyayı okur. Bu program kullanılarak derlenebilir ve çalıştırılabilirLive Demo dosyada bulunan tüm kayıtları göstereceği seçenek.

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.

Diyelim ki giriş dosyası verileri input.txt dosya aşağıdakileri içerir -

20003 Mohtashim M.
20004 Nishant Malik
20005 Amitabh Bachhan

Yukarıdaki programı derleyip yürüttüğünüzde, aşağıdaki sonucu verir -

20003 Mohtashim M.            
20004 Nishant Malik           
20005 Amitabh Bachhan

Sözdizimi

Dosya erişim modu rastgele olduğunda bir kaydı okumak için sözdizimi aşağıdadır -

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- Aşağıdaki örnek, dizine alınmış organizasyonu kullanan mevcut bir dosyayı okur. Bu program kullanılarak derlenebilir ve çalıştırılabilirJCLDosyada bulunan tüm kayıtları görüntüleyeceği Ana Bilgisayarlarda. Mainframes sunucusunda metin dosyaları kullanmıyoruz; bunun yerine PS dosyalarını kullanıyoruz.

Mainframes üzerinde bulunan dosyanın yukarıdaki örnekteki input.txt dosyası ile aynı içeriğe sahip olduğunu varsayalım.

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 yukarıdaki COBOL programını yürütmek için -

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

Yukarıdaki programı derleyip yürüttüğünüzde, aşağıdaki sonucu verir -

20005 Amitabh Bachhan

Fiil Yaz

Yazma fiili, bir dosyaya kayıt eklemek için kullanılır. Kayıt bir kez yazıldıktan sonra artık kayıt arabelleğinde kullanılamaz. Kayıtları dosyaya eklemeden önce, değerleri kayıt arabelleğine taşıyın ve ardından yazma fiili gerçekleştirin.

Yazma ifadesi ile kullanılabilir FROMdoğrudan çalışan depolama değişkenlerinden kayıt yazma seçeneği. From, isteğe bağlı bir cümledir. Erişim modu sıralıysa, bir kayıt yazmak için dosyanın Çıkış modunda veya Genişletme modunda açılması gerekir. Erişim modu rastgele veya dinamikse, bir kayıt yazmak için dosyanın Çıkış modunda veya GÇ modunda açılması gerekir.

Sözdizimi

Dosya organizasyonu sıralı olduğunda bir kaydı okumak için sözdizimi aşağıdadır -

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

Dosya organizasyonu dizine eklendiğinde veya göreceli olduğunda bir kaydı okumak için sözdizimi aşağıdadır -

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

Example - Aşağıdaki örnek, organizasyon sıralı olduğunda yeni bir dosyaya nasıl yeni kayıt ekleneceğini gösterir.

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 yukarıdaki COBOL programını yürütmek için -

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

Yukarıdaki programı derleyip çalıştırdığınızda, çıktı dosyasına yeni bir kayıt ekleyecektir.

1000 Tim         10

Fiili Yeniden Yaz

Yeniden yazma fiili kayıtları güncellemek için kullanılır. Yeniden yazma işlemleri için dosya IO modunda açılmalıdır. Yalnızca başarılı bir Okuma işleminden sonra kullanılabilir. Yeniden yazma fiili, okunan son kaydın üzerine yazar.

Sözdizimi

Dosya organizasyonu sıralı olduğunda bir kaydı okumak için sözdizimi aşağıdadır -

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

Dosya organizasyonu dizine eklendiğinde veya göreceli olduğunda bir kaydı okumak için sözdizimi aşağıdadır -

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

Example - Aşağıdaki örnek, önceki Yazma adımına eklediğimiz mevcut bir kaydın nasıl güncelleneceğini gösterir -

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 yukarıdaki COBOL programını yürütmek için -

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

Yukarıdaki programı derleyip çalıştırdığınızda, kaydı güncelleyecektir -

1000 Tim Dumais  10

Fiili Sil

Fiili silme işlemi yalnızca indekslenmiş ve göreceli dosyalarda yapılabilir. Dosya, IO modunda açılmalıdır. Sıralı dosya organizasyonunda kayıtlar silinemez. Sıralı erişim modu durumunda Read deyimi tarafından en son okunan kayıt silinir. Rastgele erişim modunda, kayıt anahtarını belirtin ve ardından Silme işlemini gerçekleştirin.

Sözdizimi

Bir kaydı silmek için sözdizimi aşağıdadır -

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

Example - mevcut bir kaydı silmek için -

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 yukarıdaki COBOL programını yürütmek için -

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

Yukarıdaki programı derleyip yürüttüğünüzde, aşağıdaki sonucu verir -

Record Deleted

Fiili Başlat

Başlangıç ​​fiili yalnızca dizine alınmış ve göreli dosyalarda gerçekleştirilebilir. Dosya işaretçisini belirli bir kayda yerleştirmek için kullanılır. Erişim modu sıralı veya dinamik olmalıdır. Dosya GÇ veya Giriş modunda açılmalıdır.

Sözdizimi

İşaretçiyi belirli bir kayda yerleştirmek için sözdizimi aşağıdadır -

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

Fiili Kapat

Kapat fiil, bir dosyayı kapatmak için kullanılır. Kapat işlemini gerçekleştirdikten sonra, dosya yapısındaki değişkenler işlenemeyecektir. Program ve dosya arasındaki bağlantı kaybolur.

Sözdizimi

Bir dosyayı kapatmak için sözdizimi aşağıdadır -

CLOSE file-name.

Cobol alt yordamı, bağımsız olarak derlenebilen ancak bağımsız olarak yürütülemeyen bir programdır. İki tür alt program vardır:internal subroutines sevmek Perform ifadeler ve external CALL fiili gibi alt yordamlar.

Çağrı Fiili

Çağrı fiili, kontrolü bir programdan başka bir programa aktarmak için kullanılır. CALL fiilini içeren program,Calling Program ve çağrılan program olarak bilinir Called Program. Çağrılan program yürütme, çağrılan program yürütmeyi bitirene kadar duracaktır. Çıkış Programı ifadesi, Çağrılan programda kontrolü geri aktarmak için kullanılır.

Program Kısıtlamaları olarak adlandırılan

Aşağıda adlandırılan program gereksinimleri verilmiştir -

  • Linkage sectionçağrılan programda tanımlanmalıdır. Programda aktarılan veri öğelerinden oluşur. Veri öğelerinde Değer cümlesi olmamalıdır. PIC yan tümcesi, çağıran programdan geçen değişkenlerle uyumlu olmalıdır.

  • Procedure division using çağıran programdan aktarılan değişkenlerin bir listesine sahiptir ve sıra, Çağrı fiilinde belirtilenle aynı olmalıdır.

  • Exit programdeyimi, çağrılan programda denetimi geri aktarmak için kullanılır. Çağrılan programdaki son ifade olmalıdır.

Parametreler iki şekilde programlar arasında geçirilebilir -

  • Referans olarak
  • İçeriğe Göre

Referansla Ara

Çağrılan programdaki değişkenlerin değerleri değiştirilirse, yeni değerleri çağıran programa yansıtılır. EğerBY yan tümce belirtilmezse, değişkenler her zaman başvuru ile iletilir.

Sözdizimi

Alt yordamı başvuruya göre çağırmanın sözdizimi aşağıdadır -

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

Example

Aşağıdaki örnek, MAIN çağıran programdır ve UTIL, çağrılan programdır -

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.

Çağrılan Program

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 yukarıdaki COBOL programını yürütmek için -

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

Yukarıdaki programı derleyip yürüttüğünüzde, aşağıdaki sonucu verir -

In Called Program
Student Id : 1111
Student Name : Tim

İçeriğe Göre Çağrı

Çağrılan programdaki değişkenlerin değerleri değiştirilirse, yeni değerleri çağıran programa yansıtılmaz.

Sözdizimi

Alt rutini içeriğe göre çağırmanın sözdizimi aşağıdadır -

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

Example

Aşağıdaki örnek, MAIN çağıran programdır ve UTIL, çağrılan programdır -

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.

Çağrılan Program

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 yukarıdaki COBOL programını yürütmek için -

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

Yukarıdaki programı derleyip yürüttüğünüzde, aşağıdaki sonucu verir -

In Called Program
Student Id : 1000
Student Name : Tim

Çağrı Türleri

İki tür arama vardır -

  • Static Callbir program NODYNAM derleyici seçeneği ile derlendiğinde oluşur. Statik adı verilen bir program, derleme zamanında depoya yüklenir.

  • Dynamic Callbir program DYNAM ve NODLL derleyici seçeneği ile derlendiğinde oluşur. Çalışma zamanında depoya dinamik olarak adlandırılan bir program yüklenir.

Bir dosyadaki verilerin sıralanması veya iki veya daha fazla dosyanın birleştirilmesi, neredeyse tüm iş odaklı uygulamalarda ortak bir gerekliliktir. Sıralama, kayıtları artan veya azalan sırada düzenlemek için kullanılır, böylece sıralı işlem gerçekleştirilebilir. COBOL'da dosyaları sıralamak için kullanılan iki teknik vardır -

  • External sortJCL'deki SORT yardımcı programını kullanarak dosyaları sıralamak için kullanılır. Bunu JCL bölümünde tartıştık. Şu andan itibaren iç sıralamaya odaklanacağız.

  • Internal sort COBOL programı içindeki dosyaları sıralamak için kullanılır. SORT fiil, bir dosyayı sıralamak için kullanılır.

Fiili Sırala

COBOL'da sıralama işleminde üç dosya kullanılır -

  • Input file artan veya azalan düzende sıralamak zorunda olduğumuz dosyadır.

  • Work filesıralama işlemi devam ederken kayıtları tutmak için kullanılır. Girdi dosyası kayıtları, sıralama işlemi için iş dosyasına aktarılır. Bu dosya, SD girişi altındaki Dosya Bölümünde tanımlanmalıdır.

  • Output filesıralama işleminden sonra aldığımız dosyadır. Sıralama fiilinin son çıktısıdır.

Sözdizimi

Bir dosyayı sıralamak için sözdizimi aşağıdadır -

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

SIRALA aşağıdaki işlemleri gerçekleştirir -

  • Çalışma dosyasını IO modunda, girdi dosyasını INPUT modunda ve çıktı dosyasını OUTPUT modunda açar.

  • Girdi dosyasında bulunan kayıtları çalışma dosyasına aktarır.

  • SIRALA-DOSYASINI rec-anahtarına göre artan / azalan sırada sıralar.

  • Sıralanan kayıtları çalışma dosyasından çıktı dosyasına aktarır.

  • Girdi dosyasını ve çıktı dosyasını kapatır ve çalışma dosyasını siler.

Example

Aşağıdaki örnekte, INPUT, artan sırada sıralanması gereken girdi dosyasıdır -

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 yukarıdaki COBOL programını yürütmek için -

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

Yukarıdaki programı derleyip yürüttüğünüzde, aşağıdaki sonucu verir -

Sort Successful

Fiili Birleştir

İki veya daha fazla aynı sıralı dosya, Merge deyimi kullanılarak birleştirilir. Birleştirme işleminde kullanılan dosyalar -

  • Giriş Dosyaları - Giriş-1, Giriş-2
  • Çalışma Dosyası
  • Çıktı dosyası

Sözdizimi

İki veya daha fazla dosyayı birleştirmek için sözdizimi aşağıdadır -

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

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

Birleştirme aşağıdaki işlemleri gerçekleştirir -

  • Çalışma dosyasını IO modunda, girdi dosyalarını INPUT modunda ve çıktı dosyasını OUTPUT modunda açar.

  • Girdi dosyalarında bulunan kayıtları çalışma dosyasına aktarır.

  • SIRALA-DOSYASINI rec-anahtarına göre artan / azalan sırada sıralar.

  • Sıralanan kayıtları çalışma dosyasından çıktı dosyasına aktarır.

  • Girdi dosyasını ve çıktı dosyasını kapatır ve çalışma dosyasını siler.

Example

Aşağıdaki örnekte, INPUT1 ve INPUT2, artan sırada birleştirilecek girdi dosyalarıdır -

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 yukarıdaki COBOL programını yürütmek için -

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

Yukarıdaki programı derleyip yürüttüğünüzde, aşağıdaki sonucu verir -

Merge Successful

Şu an itibariyle, COBOL'de dosyaların kullanımını öğrendik. Şimdi, bir COBOL programının DB2 ile nasıl etkileşime girdiğini tartışacağız. Aşağıdaki terimleri içerir -

  • Gömülü SQL
  • DB2 Uygulama Programlama
  • Konak Değişkenleri
  • SQLCA
  • SQL Sorguları
  • Cursors

Gömülü SQL

Gömülü SQL ifadeleri, standart SQL işlemlerini gerçekleştirmek için COBOL programlarında kullanılır. Gömülü SQL deyimleri, uygulama programı derlenmeden önce SQL işlemcisi tarafından işlenir. COBOL şu şekilde bilinir:Host Language. COBOL-DB2 uygulamaları, hem COBOL hem de DB2'yi içeren uygulamalardır.

Gömülü SQL ifadeleri, bazı küçük değişikliklerle normal SQL ifadeleri gibi çalışır. Örneğin, bir sorgunun çıktısı, önceden tanımlanmış bir değişkenler kümesine yönlendirilir.Host Variables. SELECT deyimine ek bir INTO yan tümcesi yerleştirilir.

DB2 Uygulama Programlama

Bir COBOL-DB2 programını kodlarken uyulması gereken kurallar şunlardır:

  • Tüm SQL ifadeleri arasında sınırlandırılmalıdır EXEC SQL ve ENDEXEC..

  • SQL ifadeleri Alan B'de kodlanmalıdır.

  • Bir programda kullanılan tüm tablolar WorkingStorage Bölümünde bildirilmelidir. Bu,INCLUDE Beyan.

  • INCLUDE ve DECLARE TABLE dışındaki tüm SQL ifadeleri Prosedür Bölümünde görünmelidir.

Konak Değişkenleri

Ana bilgisayar değişkenleri, bir tablodan veri almak veya bir tabloya veri eklemek için kullanılır. Program ve DB2 arasında geçirilecek tüm değerler için anasistem değişkenleri bildirilmelidir. Çalışma-Depolama Bölümünde ilan edilirler.

Ana bilgisayar değişkenleri grup öğeleri olamaz, ancak ana bilgisayar yapısında birlikte gruplanabilirler. OlamazlarRenamed veya Redefined. Ana bilgisayar değişkenlerini SQL ifadeleriyle kullanarak, bunların önüne bircolon (:)..

Sözdizimi

Aşağıda, ana bilgisayar değişkenlerini bildirmek ve Working-Storage bölümündeki tabloları dahil etmek için sözdizimi verilmiştir -

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, DB2'nin SQL yürütmesinin geri bildirimini programa aktardığı bir SQL iletişim alanıdır. Programa bir uygulamanın başarılı olup olmadığını söyler. SQLCA altında olduğu gibi önceden tanımlanmış bir dizi değişken vardır.SQLCODEhata kodunu içeren. SQLCODE'daki '000' değeri, başarılı bir yürütmeyi belirtir.

Sözdizimi

Aşağıda, Çalışma-Depolama bölümünde bir SQLCA bildirmek için sözdizimi verilmiştir -

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

SQL Sorguları

Student-Id, Student-Name ve Student-Address içeren 'Student' adında bir tablomuz olduğunu varsayalım.

ÖĞRENCİ tablosu aşağıdaki verileri içerir -

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

Aşağıdaki örnek, SELECT COBOL programında sorgu -

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 yukarıdaki COBOL programını yürütmek için -

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

Yukarıdaki programı derleyip yürüttüğünüzde, aşağıdaki sonucu verir -

1004 Chulbul Pandey		Lucknow

Aşağıdaki örnek, INSERT COBOL programında sorgu -

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 yukarıdaki COBOL programını yürütmek için -

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

Yukarıdaki programı derleyip yürüttüğünüzde, aşağıdaki sonucu verir -

Record Inserted Successfully
1005 TutorialsPoint		Hyderabad

Aşağıdaki örnek, UPDATE COBOL programında sorgu -

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 yukarıdaki COBOL programını yürütmek için -

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

Yukarıdaki programı derleyip yürüttüğünüzde, aşağıdaki sonucu verir -

Record Updated Successfully

Aşağıdaki example kullanımını gösterir DELETE COBOL programında sorgu -

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 yukarıdaki COBOL programını yürütmek için -

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

Yukarıdaki programı derleyip yürüttüğünüzde, aşağıdaki sonucu verir -

Record Deleted Successfully

İmleçler

İmleçler, aynı anda birden çok satır seçimini işlemek için kullanılır. Bir sorgunun tüm sonuçlarını tutan veri yapılarıdır. Çalışma-Depolama Bölümünde veya Prosedür Bölümünde tanımlanabilirler. İmleç ile ilişkili işlemler aşağıdadır -

  • Declare
  • Open
  • Close
  • Fetch

İmleci Bildir

İmleç beyanı, Çalışma-Depolama Bölümünde veya Prosedür Bölümünde yapılabilir. İlk ifade, yürütülemez bir ifade olan DECLARE ifadesidir.

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

Açık

Bir imleç kullanmadan önce, Open deyimi gerçekleştirilmelidir. Open deyimi SELECT'i yürütme için hazırlar.

EXEC SQL
   OPEN STUDCUR
END-EXEC.

Kapat

Close deyimi, imlecin kapladığı tüm belleği serbest bırakır. Bir programı sonlandırmadan önce bir imleci kapatmak zorunludur.

EXEC SQL
   CLOSE STUDCUR
END-EXEC.

Getir

Fetch deyimi imleci tanımlar ve değeri INTO yan tümcesine koyar. Bir Fetch ifadesi, her seferinde bir satır aldığımız için döngü içinde kodlanır.

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

Aşağıdaki örnek, ÖĞRENCİ tablosundaki tüm kayıtları almak için imleç kullanımını gösterir -

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 yukarıdaki COBOL programını yürütmek için -

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

Yukarıdaki programı derleyip yürüttüğünüzde, aşağıdaki sonucu verir -

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