COBOL - Kurzanleitung
Einführung in COBOL
COBOL ist eine Hochsprache. Man muss verstehen, wie COBOL funktioniert. Computer verstehen nur Maschinencode, einen binären Strom von Nullen und Einsen. COBOL-Code muss mit a in Maschinencode konvertiert werdencompiler. Führen Sie die Programmquelle über einen Compiler aus. Der Compiler prüft zunächst auf Syntaxfehler und konvertiert diese dann in die Maschinensprache. Der Compiler erstellt eine Ausgabedatei, die als bekannt istload module. Diese Ausgabedatei enthält ausführbaren Code in Form von Nullen und Einsen.
Entwicklung von COBOL
In den 1950er Jahren, als die Unternehmen im westlichen Teil der Welt wuchsen, mussten verschiedene Prozesse automatisiert werden, um die Bedienung zu vereinfachen, und so entstand eine Programmiersprache auf hoher Ebene, die für die Verarbeitung von Geschäftsdaten gedacht war.
1959 wurde COBOL von CODASYL (Conference on Data Systems Language) entwickelt.
Die nächste Version, COBOL-61, wurde 1961 mit einigen Überarbeitungen veröffentlicht.
1968 wurde COBOL von ANSI als Standardsprache für den kommerziellen Gebrauch (COBOL-68) zugelassen.
Es wurde 1974 und 1985 erneut überarbeitet, um nachfolgende Versionen mit den Namen COBOL-74 bzw. COBOL-85 zu entwickeln.
Im Jahr 2002 wurde Object-Oriented COBOL veröffentlicht, das gekapselte Objekte als normalen Bestandteil der COBOL-Programmierung verwenden kann.
Bedeutung von COBOL
COBOL war die erste weit verbreitete Programmiersprache auf hoher Ebene. Es ist eine englischsprachige Sprache, die benutzerfreundlich ist. Alle Anweisungen können in einfachen englischen Wörtern codiert werden.
COBOL wird auch als selbstdokumentierende Sprache verwendet.
COBOL kann große Datenverarbeitungen verarbeiten.
COBOL ist mit seinen Vorgängerversionen kompatibel.
COBOL hat effektive Fehlermeldungen und so ist die Behebung von Fehlern einfacher.
Eigenschaften von COBOL
Standardsprache
COBOL ist eine Standardsprache, die auf Computern wie IBM AS / 400, PCs usw. kompiliert und ausgeführt werden kann.
Geschäftsorientiert
COBOL wurde für geschäftsorientierte Anwendungen im Zusammenhang mit Finanzdomänen, Verteidigungsdomänen usw. entwickelt. Aufgrund seiner erweiterten Funktionen zur Dateiverwaltung kann COBOL große Datenmengen verarbeiten.
Robuste Sprache
COBOL ist eine robuste Sprache, da die zahlreichen Debugging- und Testtools für fast alle Computerplattformen verfügbar sind.
Strukturierte Sprache
In COBOL sind logische Kontrollstrukturen verfügbar, die das Lesen und Ändern erleichtern. COBOL hat verschiedene Abteilungen, so dass es einfach zu debuggen ist.
COBOL unter Windows / Linux installieren
Für Windows stehen viele kostenlose Mainframe-Emulatoren zur Verfügung, mit denen einfache COBOL-Programme geschrieben und erlernt werden können.
Ein solcher Emulator ist Hercules, der unter Windows einfach installiert werden kann, indem einige einfache Schritte wie unten angegeben ausgeführt werden:
Laden Sie den Hercules-Emulator herunter und installieren Sie ihn, der auf der Homepage von Hercules verfügbar ist: www.hercules-390.eu
Sobald Sie das Paket auf einem Windows-Computer installiert haben, wird ein Ordner wie erstellt C:/hercules/mvs/cobol.
Führen Sie die Eingabeaufforderung (CMD) aus und erreichen Sie das Verzeichnis C: / hercules / mvs / cobol auf CMD.
Die vollständige Anleitung zu verschiedenen Befehlen zum Schreiben und Ausführen von JCL- und COBOL-Programmen finden Sie unter:
www.jaymoseley.com/hercules/installmvs/instmvs2.htm
Hercules ist eine Open-Source-Softwareimplementierung der Mainframe-System / 370- und ESA / 390-Architekturen sowie der neuesten 64-Bit-z / -Architektur. Hercules läuft unter Linux, Windows, Solaris, FreeBSD und Mac OS X.
Ein Benutzer kann auf verschiedene Arten eine Verbindung zu einem Mainframe-Server herstellen, z. B. Thin Client, Dummy-Terminal, VCS (Virtual Client System) oder VDS (Virtual Desktop System). Jeder gültige Benutzer erhält eine Login-ID zur Eingabe in die Z / OS-Schnittstelle (TSO / E oder ISPF).
Kompilieren von COBOL-Programmen
Um ein COBOL-Programm im Batch-Modus mit JCL auszuführen, muss das Programm kompiliert und ein Lademodul mit allen Unterprogrammen erstellt werden. Die JCL verwendet zum Zeitpunkt der Ausführung das Lademodul und nicht das eigentliche Programm. Die Ladebibliotheken werden verkettet und zum Zeitpunkt der Ausführung mit an die JCL übergebenJCLLIB oder STEPLIB.
Zum Kompilieren eines COBOL-Programms stehen viele Mainframe-Compiler-Dienstprogramme zur Verfügung. Einige Unternehmen verwenden Change Management-Tools wieEndevor, die jede Version des Programms kompiliert und speichert. Dies ist nützlich, um die am Programm vorgenommenen Änderungen zu verfolgen.
//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 ist ein IBM COBOL-Compiler-Dienstprogramm. Die Compileroptionen werden mit dem Parameter PARM übergeben. Im obigen Beispiel weist RMODE den Compiler an, den relativen Adressierungsmodus im Programm zu verwenden. Das COBOL-Programm wird mit dem Parameter SYSIN übergeben. Copybook ist die Bibliothek, die vom Programm in SYSLIB verwendet wird.
COBOL-Programme ausführen
Im Folgenden finden Sie ein JCL-Beispiel, bei dem das Programm MYPROG unter Verwendung der Eingabedatei MYDATA.URMI.INPUT ausgeführt wird und zwei Ausgabedateien erzeugt, die in die Spool geschrieben werden.
//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
/*
Das Lademodul von MYPROG befindet sich in MYDATA.URMI.LOADLIB. Dies ist wichtig zu beachten, dass die obige JCL nur für ein Nicht-DB2-COBOL-Modul verwendet werden kann.
Ausführen von COBOL-DB2-Programmen
Zum Ausführen eines COBOL-DB2-Programms wird in der JCL und im Programm ein spezielles IBM-Dienstprogramm verwendet. Die DB2-Region und die erforderlichen Parameter werden als Eingabe an das Dienstprogramm übergeben.
Die Schritte zum Ausführen eines COBOL-DB2-Programms lauten wie folgt:
Wenn ein COBOL-DB2-Programm kompiliert wird, wird zusammen mit dem Lademodul ein DBRM (Database Request Module) erstellt. Der DBRM enthält die SQL-Anweisungen der COBOL-Programme, deren Syntax auf Richtigkeit überprüft wurde.
Das DBRM ist an die DB2-Region (Umgebung) gebunden, in der das COBOL ausgeführt wird. Dies kann mit dem Dienstprogramm IKJEFT01 in einer JCL erfolgen.
Nach dem Bindeschritt wird das COBOL-DB2-Programm unter Verwendung von IKJEFT01 (erneut) mit der Ladebibliothek und der DBRM-Bibliothek als Eingabe für die JCL ausgeführt.
//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
/*
Im obigen Beispiel ist MYCOBB das COBOL-DB2-Programm, das mit IKJEFT01 ausgeführt wird. Beachten Sie, dass der Programmname, die DB2-Subsystem-ID (SSID) und der DB2-Planname in der SYSTSIN DD-Anweisung übergeben werden. Die DBRM-Bibliothek ist in der STEPLIB angegeben.
Eine COBOL-Programmstruktur besteht aus Abteilungen, wie in der folgenden Abbildung dargestellt:
Eine kurze Einführung in diese Bereiche finden Sie weiter unten -
Sectionssind die logische Unterteilung der Programmlogik. Ein Abschnitt ist eine Sammlung von Absätzen.
Paragraphssind die Unterteilung eines Abschnitts oder einer Abteilung. Es ist entweder ein benutzerdefinierter oder ein vordefinierter Name, gefolgt von einem Punkt, und besteht aus null oder mehr Sätzen / Einträgen.
Sentencessind die Kombination einer oder mehrerer Aussagen. Sätze erscheinen nur in der Abteilung Verfahren. Ein Satz muss mit einem Punkt enden.
Statements sind aussagekräftige COBOL-Anweisungen, die eine gewisse Verarbeitung durchführen.
Characters sind die niedrigsten in der Hierarchie und können nicht teilbar sein.
Sie können die oben genannten Begriffe im folgenden Beispiel mit dem COBOL-Programm verknüpfen -
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 -----|
.
Abteilungen
Ein COBOL-Programm besteht aus vier Abteilungen.
Identifikationsabteilung
Es ist die erste und einzige obligatorische Aufteilung jedes COBOL-Programms. Der Programmierer und der Compiler verwenden diese Unterteilung, um das Programm zu identifizieren. In dieser Abteilung ist PROGRAM-ID der einzige obligatorische Absatz. PROGRAM-ID gibt den Programmnamen an, der aus 1 bis 30 Zeichen bestehen kann.
Versuchen Sie das folgende Beispiel mit dem Live Demo Option online.
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
PROCEDURE DIVISION.
DISPLAY 'Welcome to Tutorialspoint'.
STOP RUN.
Unten ist die angegeben JCL um das obige COBOL-Programm auszuführen.
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
Wenn Sie das obige Programm kompilieren und ausführen, wird das folgende Ergebnis erzielt:
Welcome to Tutorialspoint
Umweltabteilung
Die Umgebungsteilung wird verwendet, um Eingabe- und Ausgabedateien für das Programm anzugeben. Es besteht aus zwei Abschnitten -
Configuration sectionliefert Informationen über das System, auf dem das Programm geschrieben und ausgeführt wird. Es besteht aus zwei Absätzen -
Quellcomputer - System zum Kompilieren des Programms.
Objektcomputer - System zur Ausführung des Programms.
Input-Output sectionbietet Informationen zu den im Programm zu verwendenden Dateien. Es besteht aus zwei Absätzen -
Dateisteuerung - Enthält Informationen zu externen Datensätzen, die im Programm verwendet werden.
E / A-Steuerung - Enthält Informationen zu den im Programm verwendeten Dateien.
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.
Datenabteilung
Die Datenteilung wird verwendet, um die im Programm verwendeten Variablen zu definieren. Es besteht aus vier Abschnitten -
File section wird verwendet, um die Datensatzstruktur der Datei zu definieren.
Working-Storage section wird verwendet, um temporäre Variablen und Dateistrukturen zu deklarieren, die im Programm verwendet werden.
Local-Storage sectionähnelt dem Abschnitt Arbeitsspeicher. Der einzige Unterschied besteht darin, dass die Variablen jedes Mal zugewiesen und initialisiert werden, wenn ein Programm mit der Ausführung beginnt.
Linkage section wird verwendet, um die Datennamen zu beschreiben, die von einem externen Programm empfangen werden.
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.
Das JCL Das obige COBOL-Programm auszuführen ist wie folgt:
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
//INPUT DD DSN = ABC.EFG.XYZ,DISP = SHR
Wenn Sie das obige Programm kompilieren und ausführen, wird das folgende Ergebnis erzielt:
Executing COBOL program using JCL
Verfahrensabteilung
Die Prozedurteilung wird verwendet, um die Logik des Programms einzuschließen. Es besteht aus ausführbaren Anweisungen unter Verwendung von Variablen, die in der Datenaufteilung definiert sind. In dieser Abteilung sind Absatz- und Abschnittsnamen benutzerdefiniert.
In der Prozedurabteilung muss mindestens eine Anweisung vorhanden sein. Die letzte Anweisung, um die Ausführung in dieser Abteilung zu beenden, ist entwederSTOP RUN welches in den aufrufenden Programmen oder verwendet wird EXIT PROGRAM welches in den aufgerufenen Programmen verwendet wird.
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 um das obige COBOL-Programm auszuführen -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
Wenn Sie das obige Programm kompilieren und ausführen, wird das folgende Ergebnis erzielt:
Hello World
My name is : TutorialsPoint
My ID is : 12345
Zeichensatz
'Zeichen' sind in der Hierarchie am niedrigsten und können nicht weiter unterteilt werden. Der COBOL-Zeichensatz enthält 78 Zeichen, die unten gezeigt werden -
Sr.Nr. | Charakterbeschreibung |
---|---|
1 | A-Z Alphabete (Großbuchstaben) |
2 | a-z Alphabete (Kleinbuchstaben) |
3 | 0-9 Numerisch |
4 |
Raum |
5 | + Pluszeichen |
6 | - Minuszeichen oder Bindestrich |
7 | * Sternchen |
8 | / Schrägstrich |
9 | $ Währungszeichen |
10 | , Komma |
11 | ; Semikolon |
12 | . Dezimalpunkt oder Punkt |
13 | " Anführungszeichen |
14 | ( Linke Klammer |
15 | ) Rechte Klammer |
16 | > Größer als |
17 | < Weniger als |
18 | : Doppelpunkt |
19 | ' Apostroph |
20 | = Gleichheitszeichen |
Codierungsblatt
Das Quellprogramm von COBOL muss in einem für die Compiler akzeptablen Format geschrieben sein. COBOL-Programme werden auf COBOL-Codierungsblättern geschrieben. In jeder Zeile eines Codierungsblatts befinden sich 80 Zeichenpositionen.
Die Zeichenpositionen sind in die folgenden fünf Felder unterteilt:
Positionen | Feld | Beschreibung |
---|---|---|
1-6 | Spaltennummern | Reserviert für Zeilennummern. |
7 | Indikator | Es kann ein Sternchen (*) für Kommentare, ein Bindestrich (-) für die Fortsetzung und ein Schrägstrich (/) für den Formularvorschub geben. |
8-11 | Bereich A. | Alle COBOL-Abteilungen, Abschnitte, Absätze und einige spezielle Einträge müssen in Bereich A beginnen. |
12-72 | Bereich B. | Alle COBOL-Anweisungen müssen in Bereich B beginnen. |
73-80 | Identifikationsbereich | Es kann vom Programmierer nach Bedarf verwendet werden. |
Beispiel
Das folgende Beispiel zeigt ein COBOL-Codierungsblatt -
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 um das obige COBOL-Programm auszuführen -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
Wenn Sie das obige Programm kompilieren und ausführen, wird das folgende Ergebnis erzielt:
Coding Sheet
Zeichenketten
Zeichenketten werden durch Kombinieren einzelner Zeichen gebildet. Eine Zeichenkette kann a sein
- Comment,
- Wörtlich oder
- COBOL Wort.
Alle Zeichenketten müssen mit beendet werden separators. Ein Trennzeichen wird verwendet, um Zeichenfolgen zu trennen.
Häufig verwendete Trennzeichen - Leerzeichen, Komma, Punkt, Apostroph, linke / rechte Klammer und Anführungszeichen.
Kommentar
Ein Kommentar ist eine Zeichenfolge, die die Ausführung eines Programms nicht beeinflusst. Es kann eine beliebige Kombination von Zeichen sein.
Es gibt zwei Arten von Kommentaren -
Kommentarzeile
Eine Kommentarzeile kann in eine beliebige Spalte geschrieben werden. Der Compiler überprüft eine Kommentarzeile nicht auf Syntax und behandelt sie zur Dokumentation.
Kommentareintrag
Kommentareinträge sind diejenigen, die in den optionalen Absätzen einer Identifikationsabteilung enthalten sind. Sie sind in Bereich B geschrieben und werden von Programmierern als Referenz verwendet.
Der in hervorgehobene Text Bold sind die kommentierten Einträge im folgenden Beispiel -
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 über COBOL-Programm ausführen -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
Wenn Sie das obige Programm kompilieren und ausführen, wird das folgende Ergebnis erzielt:
Comment Line
Wörtlich
Literal ist eine Konstante, die in einem Programm direkt fest codiert ist. Im folgenden Beispiel ist "Hallo Welt" ein Literal.
PROCEDURE DIVISION.
DISPLAY 'Hello World'.
Es gibt zwei Arten von Literalen, wie unten erläutert -
Alphanumerisches Literal
Alphanumerische Literale sind in Anführungszeichen oder Apostroph eingeschlossen. Die Länge kann bis zu 160 Zeichen betragen. Ein Apostroph oder ein Zitat kann nur dann Teil eines Literal sein, wenn es gepaart ist. Anfang und Ende des Literal sollten gleich sein, entweder Apostroph oder Zitat.
Example
Das folgende Beispiel zeigt gültige und ungültige alphanumerische Literale -
Valid:
‘This is valid’
"This is valid"
‘This isn’’t invalid’
Invalid:
‘This is invalid”
‘This isn’t valid’
Numerisches Literal
Ein numerisches Literal ist eine Kombination von Ziffern von 0 bis 9, +, - oder Dezimalpunkt. Die Länge kann bis zu 18 Zeichen betragen. Das Zeichen kann nicht das Zeichen ganz rechts sein. Der Dezimalpunkt sollte nicht am Ende erscheinen.
Example
Das folgende Beispiel zeigt gültige und ungültige numerische Literale -
Valid:
100
+10.9
-1.9
Invalid:
1,00
10.
10.9-
COBOL Word
COBOL Word ist eine Zeichenfolge, die ein reserviertes Wort oder ein benutzerdefiniertes Wort sein kann. Die Länge kann bis zu 30 Zeichen betragen.
Benutzerdefinierten
Benutzerdefinierte Wörter werden zum Benennen von Dateien, Daten, Datensätzen, Absatznamen und Abschnitten verwendet. Alphabete, Ziffern und Bindestriche sind beim Bilden von benutzerdefinierten Wörtern zulässig. Sie können keine von COBOL reservierten Wörter verwenden.
Reservierte Wörter
Reservierte Wörter sind in COBOL vordefinierte Wörter. Verschiedene Arten von reservierten Wörtern, die wir häufig verwenden, sind wie folgt:
Keywords wie HINZUFÜGEN, AKZEPTIEREN, BEWEGEN usw.
Special characters Wörter wie +, -, *, <, <= usw.
Figurative constants sind konstante Werte wie ZERO, SPACES usw. Alle konstanten Werte der bildlichen Konstanten sind in der folgenden Tabelle aufgeführt.
Figurative Konstanten
Sr.Nr. | Figurative Konstanten & Beschreibung |
---|---|
1 | HIGH-VALUES Ein oder mehrere Zeichen, die sich in absteigender Reihenfolge an der höchsten Position befinden. |
2 | LOW-VALUES Ein oder mehrere Zeichen haben Nullen in der Binärdarstellung. |
3 | ZERO/ZEROES Eine oder mehrere Nullen, abhängig von der Größe der Variablen. |
4 | SPACES Ein oder mehrere Leerzeichen. |
5 | QUOTES Einfache oder doppelte Anführungszeichen. |
6 | ALL literal Füllt das Datenelement mit Literal. |
Die Datenaufteilung wird verwendet, um die in einem Programm verwendeten Variablen zu definieren. Um Daten in COBOL zu beschreiben, müssen die folgenden Begriffe verstanden werden:
- Datenname
- Level Nummer
- Bildklausel
- Wertklausel
01 TOTAL-STUDENTS PIC9(5) VALUE '125'.
| | | |
| | | |
| | | |
Level Number Data Name Picture Clause Value Clause
Datenname
Datennamen müssen in der Datenabteilung definiert werden, bevor sie in der Prozedurabteilung verwendet werden. Sie müssen einen benutzerdefinierten Namen haben. reservierte Wörter können nicht verwendet werden. Datennamen beziehen sich auf die Speicherorte, an denen die tatsächlichen Daten gespeichert sind. Sie können elementar oder gruppentypisch sein.
Beispiel
Das folgende Beispiel zeigt gültige und ungültige Datennamen -
Valid:
WS-NAME
TOTAL-STUDENTS
A100
100B
Invalid:
MOVE (Reserved Words)
COMPUTE (Reserved Words)
100 (No Alphabet)
100+B (+ is not allowed)
Level Nummer
Die Ebenennummer wird verwendet, um die Datenebene in einem Datensatz anzugeben. Sie werden verwendet, um zwischen Elementarelementen und Gruppenelementen zu unterscheiden. Elementare Elemente können zu Gruppenelementen zusammengefasst werden.
Sr.Nr. | Levelnummer & Beschreibung |
---|---|
1 | 01 Datensatzbeschreibungseintrag |
2 | 02 to 49 Gruppen- und Grundelemente |
3 | 66 Klauselelemente umbenennen |
4 | 77 Elemente, die nicht unterteilt werden können |
5 | 88 Eingabe des Bedingungsnamens |
Elementary itemskann nicht weiter geteilt werden. Ebenennummer, Datenname, Bildklausel und Wertklausel (optional) werden zur Beschreibung eines Elementarelements verwendet.
Group itemsbestehen aus einem oder mehreren elementaren Elementen. Ebenennummer, Datenname und Wertklausel (optional) werden zur Beschreibung eines Gruppenelements verwendet. Die Nummer auf Gruppenebene ist immer 01.
Beispiel
Das folgende Beispiel zeigt Gruppen- und Elementarelemente -
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
Bildklausel
Die Picture-Klausel wird verwendet, um die folgenden Elemente zu definieren:
Data typekann numerisch, alphabetisch oder alphanumerisch sein. Der numerische Typ besteht nur aus den Ziffern 0 bis 9. Der alphabetische Typ besteht aus den Buchstaben A bis Z und Leerzeichen. Der alphanumerische Typ besteht aus Ziffern, Buchstaben und Sonderzeichen.
Signkann mit numerischen Daten verwendet werden. Es kann entweder + oder - sein.
Decimal point positionkann mit numerischen Daten verwendet werden. Die angenommene Position ist die Position des Dezimalpunkts und nicht in den Daten enthalten.
Length Definiert die Anzahl der vom Datenelement verwendeten Bytes.
In einer Picture-Klausel verwendete Symbole -
Sr.Nr. | Symbol & Beschreibung |
---|---|
1 | 9 Numerisch |
2 | A Alphabetisch |
3 | X Alphanumerisch |
4 | V Implizite Dezimalzahl |
5 | S Zeichen |
6 | P Angenommene Dezimalzahl |
Beispiel
Das folgende Beispiel zeigt die Verwendung der PIC-Klausel -
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 um das obige COBOL-Programm auszuführen -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
Wenn Sie das obige Programm kompilieren und ausführen, wird das folgende Ergebnis erzielt:
WS-NUM1 : +000.00
WS-NUM2 : .000000
WS-NUM3 : -123.45
WS-NAME : ABCDEF
WS-ID : A121$
Wertklausel
Die Value-Klausel ist eine optionale Klausel, mit der die Datenelemente initialisiert werden. Die Werte können ein numerisches Literal, ein alphanumerisches Literal oder eine figurative Konstante sein. Es kann sowohl mit Gruppen- als auch mit Elementarelementen verwendet werden.
Beispiel
Das folgende Beispiel zeigt die Verwendung der VALUE-Klausel -
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 um das obige COBOL-Programm auszuführen -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
Wenn Sie das obige Programm kompilieren und ausführen, wird das folgende Ergebnis erzielt:
WS-NUM1 : 03.5
WS-NAME : ABCD
WS-ID : 00
COBOL-Verben werden in der Prozedurabteilung zur Datenverarbeitung verwendet. Eine Anweisung beginnt immer mit einem COBOL-Verb. Es gibt mehrere COBOL-Verben mit unterschiedlichen Arten von Aktionen.
Eingabe- / Ausgabeverben
Eingabe- / Ausgabeverben werden verwendet, um Daten vom Benutzer abzurufen und die Ausgabe von COBOL-Programmen anzuzeigen. Die folgenden zwei Verben werden für diesen Prozess verwendet -
Verb akzeptieren
Das Verb "Akzeptieren" wird verwendet, um Daten wie Datum, Uhrzeit und Tag vom Betriebssystem oder direkt vom Benutzer abzurufen. Wenn ein Programm Daten vom Benutzer akzeptiert, muss diese über die JCL weitergeleitet werden. Beim Abrufen von Daten vom Betriebssystem ist die FROM-Option enthalten, wie im folgenden Beispiel gezeigt:
ACCEPT WS-STUDENT-NAME.
ACCEPT WS-DATE FROM SYSTEM-DATE.
Verb anzeigen
Anzeigeverb wird verwendet, um die Ausgabe eines COBOL-Programms anzuzeigen.
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 um das obige COBOL-Programm auszuführen -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
//INPUT DD DSN=PROGRAM.DIRECTORY,DISP=SHR
//SYSIN DD *
TutorialsPoint
/*
Wenn Sie das obige Programm kompilieren und ausführen, wird das folgende Ergebnis erzielt:
Name : TutorialsPoint
Date : 200623
Verb initialisieren
Das Initialisierungsverb wird verwendet, um ein Gruppenelement oder ein Elementarelement zu initialisieren. Datennamen mit der RENAME-Klausel können nicht initialisiert werden. Numerische Datenelemente werden durch NULL ersetzt. Alphanumerische oder alphabetische Datenelemente werden durch SPACES ersetzt. Wenn wir den Begriff ERSETZEN einschließen, können Datenelemente auf den angegebenen Ersetzungswert initialisiert werden, wie im folgenden Beispiel gezeigt -
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 um das obige COBOL-Programm auszuführen -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
Wenn Sie das obige Programm kompilieren und ausführen, wird das folgende Ergebnis erzielt:
My name is :
My ID is : 12345
Address : 000 000000
House Number : 000
Country :
Pincode : 000000
Verb verschieben
Das Verschieben-Verb wird verwendet, um Daten von Quelldaten in Zieldaten zu kopieren. Es kann sowohl für Elementar- als auch für Gruppendatenelemente verwendet werden. Für Gruppendatenelemente wird MOVE CORRESPONDING / CORR verwendet. Bei der Try-it-Option funktioniert MOVE CORR nicht. Auf einem Mainframe-Server funktioniert dies jedoch.
Zum Verschieben von Daten aus einer Zeichenfolge wird MOVE (x: l) verwendet, wobei x die Startposition und l die Länge ist. Daten werden abgeschnitten, wenn die PIC-Klausel des Zieldatenelements kleiner als die PIC-Klausel des Quelldatenelements ist. Wenn die PIC-Klausel des Zieldatenelements mehr als die PIC-Klausel des Quelldatenelements ist, werden ZEROS oder SPACES in den zusätzlichen Bytes hinzugefügt. Das folgende Beispiel macht es deutlich.
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 um das obige COBOL-Programm auszuführen.
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
Wenn Sie das obige Programm kompilieren und ausführen, wird das folgende Ergebnis erzielt:
WS-NUM1 : 123456789
WS-NUM2 : 123456789
WS-NUM3 : 56789
WS-NUM4 : 345678
WS-ADDRESS : 123INDIA112233
WS-ADDRESS1 : 123INDIA112233
Rechtliche Schritte
Die folgende Tabelle enthält Informationen zu den rechtlichen Schritten -
Alphabetisch | Alphanumerisch | Numerisch | |
---|---|---|---|
Alphabetisch | Möglich | Möglich | Nicht möglich |
Alphanumerisch | Möglich | Möglich | Möglich |
Numerisch | Nicht möglich | Möglich | Möglich |
Verb hinzufügen
Verb hinzufügen wird verwendet, um zwei oder mehr Zahlen hinzuzufügen und das Ergebnis im Zieloperanden zu speichern.
Syntax
Im Folgenden wird die Syntax zum Hinzufügen von zwei oder mehr Zahlen angegeben.
ADD A B TO C D
ADD A B C TO D GIVING E
ADD CORR WS-GROUP1 TO WS-GROUP2
In Syntax-1 werden A, B, C hinzugefügt und das Ergebnis in C gespeichert (C = A + B + C). A, B, D werden addiert und das Ergebnis in D gespeichert (D = A + B + D).
In Syntax-2 werden A, B, C, D hinzugefügt und das Ergebnis in E gespeichert (E = A + B + C + D).
In Syntax-3 werden Untergruppenelemente in WS-GROUP1 und WS-GROUP2 hinzugefügt und das Ergebnis in WS-GROUP2 gespeichert.
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 um das obige COBOL-Programm auszuführen -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
Wenn Sie das obige Programm kompilieren und ausführen, wird das folgende Ergebnis erzielt:
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
Verb subtrahieren
Das Subtrahierverb wird für Subtraktionsoperationen verwendet.
Syntax
Unten ist die Syntax für Subtraktionsoperationen angegeben -
SUBTRACT A B FROM C D
SUBTRACT A B C FROM D GIVING E
SUBTRACT CORR WS-GROUP1 TO WS-GROUP2
In Syntax-1 werden A und B addiert und von C subtrahiert. Das Ergebnis wird in C gespeichert (C = C- (A + B)). A und B werden addiert und von D subtrahiert. Das Ergebnis wird in D gespeichert (D = D- (A + B)).
In Syntax-2 werden A, B, C addiert und von D subtrahiert. Das Ergebnis wird in E gespeichert (E = D- (A + B + C)).
In Syntax-3 werden Untergruppenelemente in WS-GROUP1 und WS-GROUP2 subtrahiert und das Ergebnis in WS-GROUP2 gespeichert.
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 um das obige COBOL-Programm auszuführen -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
Wenn Sie das obige Programm kompilieren und ausführen, wird das folgende Ergebnis erzielt:
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
Verb multiplizieren
Das Multiplikationsverb wird für Multiplikationsoperationen verwendet.
Syntax
Unten ist die Syntax angegeben, um zwei oder mehr Zahlen zu multiplizieren -
MULTIPLY A BY B C
MULTIPLY A BY B GIVING E
In Syntax-1 werden A und B multipliziert und das Ergebnis in B gespeichert (B = A * B). A und C werden multipliziert und das Ergebnis in C gespeichert (C = A * C).
In Syntax-2 werden A und B multipliziert und das Ergebnis in E gespeichert (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 um das obige COBOL-Programm auszuführen -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
Wenn Sie das obige Programm kompilieren und ausführen, wird das folgende Ergebnis erzielt:
WS-NUM1 : 000000010
WS-NUM2 : 000000100
WS-NUM3 : 000000100
WS-NUMA : 000000010
WS-NUMB : 000000010
WS-NUMC : 000000100
Verb teilen
Divide Verb wird für Divisionsoperationen verwendet.
Syntax
Unten ist die Syntax für Divisionsoperationen angegeben -
DIVIDE A INTO B
DIVIDE A BY B GIVING C REMAINDER R
In Syntax-1 wird B durch A geteilt und das Ergebnis in B gespeichert (B = B / A).
In Syntax-2 wird A durch B geteilt und das Ergebnis in C (C = A / B) und der Rest in R gespeichert.
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 um das obige COBOL-Programm auszuführen -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
Wenn Sie das obige Programm kompilieren und ausführen, wird das folgende Ergebnis erzielt:
WS-NUM1 : 000000005
WS-NUM2 : 000000050
WS-NUMA : 000000100
WS-NUMB : 000000015
WS-NUMC : 000000006
WS-REM : 000000010
Anweisung berechnen
Die Compute-Anweisung wird verwendet, um arithmetische Ausdrücke in COBOL zu schreiben. Dies ist ein Ersatz für Addieren, Subtrahieren, Multiplizieren und Teilen.
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 um das obige COBOL-Programm auszuführen.
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
Wenn Sie das obige Programm kompilieren und ausführen, wird das folgende Ergebnis erzielt:
WS-NUM1 : 000000010
WS-NUM2 : 000000010
WS-NUM3 : 000000010
WS-NUMA : 000000050
WS-NUMB : 000000010
WS-NUMC : 000000105
Das COBOL-Layout beschreibt die Verwendung jedes Felds und die darin enthaltenen Werte. Es folgen die in COBOL verwendeten Datenbeschreibungseinträge -
- Definiert Klausel neu
- Benennt Klausel um
- Verwendungsklausel
- Copybooks
Definiert Klausel neu
Die Redefines-Klausel wird verwendet, um einen Speicher mit unterschiedlicher Datenbeschreibung zu definieren. Wenn ein oder mehrere Datenelemente nicht gleichzeitig verwendet werden, kann derselbe Speicher für ein anderes Datenelement verwendet werden. So kann derselbe Speicher mit verschiedenen Datenelementen referenziert werden.
Syntax
Es folgt die Syntax für die Redefines-Klausel -
01 WS-OLD PIC X(10).
01 WS-NEW1 REDEFINES WS-OLD PIC 9(8).
01 WS-NEW2 REDEFINES WS-OLD PIC A(10).
Nachfolgend finden Sie die Details der verwendeten Parameter -
- WS-OLD ist neu definiertes Element
- WS-NEW1 und WS-NEW2 definieren Artikel neu
Die Ebenennummern von neu definiertem Gegenstand und neu definiertem Gegenstand müssen identisch sein und dürfen nicht 66 oder 88 Ebenennummern sein. Verwenden Sie die VALUE-Klausel nicht mit einem neu definierten Element. Verwenden Sie im Dateibereich keine Neudefinitionsklausel mit der Nummer 01. Die Definition neu definieren muss die nächste Datenbeschreibung sein, die Sie neu definieren möchten. Ein neu definierter Artikel hat immer den gleichen Wert wie ein neu definierter Artikel.
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 um das obige COBOL-Programm auszuführen -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
Wenn Sie das obige Programm kompilieren und ausführen, erhalten Sie das folgende Ergebnis:
WS-DATE1 : 20140831
WS-DATE2 : 20140831
Benennt Klausel um
Die Umbenennungsklausel wird verwendet, um vorhandenen Datenelementen unterschiedliche Namen zu geben. Es wird verwendet, um die Datennamen neu zu gruppieren und ihnen einen neuen Namen zu geben. Die neuen Datennamen können gruppen- oder elementarübergreifend umbenannt werden. Level Nummer 66 ist für Umbenennungen reserviert.
Syntax
Es folgt die Syntax für die Renames-Klausel -
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.
Das Umbenennen ist nur auf derselben Ebene möglich. Im obigen Beispiel befinden sich WS-A, WS-B und WS-C auf derselben Ebene. Die Umbenennungsdefinition muss die nächste Datenbeschreibung sein, die Sie umbenennen möchten. Verwenden Sie keine Umbenennungen mit der Nummer 01, 77 oder 66. Die für die Umbenennung verwendeten Datennamen müssen nacheinander angegeben werden. Datenelemente mit Vorkommensklausel können nicht umbenannt werden.
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 um das obige COBOL-Programm auszuführen -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
Wenn Sie das obige Programm kompilieren und ausführen, wird das folgende Ergebnis erzielt:
WS-RENAME : 56AABB
Verwendungsklausel
Die Verwendungsklausel gibt das Betriebssystem an, in dem die Formatdaten gespeichert sind. Es kann nicht mit den Levelnummern 66 oder 88 verwendet werden. Wenn für eine Gruppe eine Verwendungsklausel angegeben ist, haben alle Elementarelemente dieselbe Verwendungsklausel. Die verschiedenen Optionen, die mit der Usage-Klausel verfügbar sind, lauten wie folgt:
Anzeige
Das Datenelement wird im ASCII-Format gespeichert und jedes Zeichen benötigt 1 Byte. Dies ist die Standardverwendung.
Das folgende Beispiel berechnet die Anzahl der erforderlichen Bytes -
01 WS-NUM PIC S9(5)V9(3) USAGE IS DISPLAY.
It requires 8 bytes as sign and decimal doesn't require any byte.
01 WS-NUM PIC 9(5) USAGE IS DISPLAY.
It requires 5 bytes as sign.
COMPUTATIONAL / COMP
Das Datenelement wird im Binärformat gespeichert. Hier müssen Datenelemente eine Ganzzahl sein.
Das folgende Beispiel berechnet die Anzahl der erforderlichen Bytes -
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
Das Datenelement ähnelt Real oder Float und wird als Gleitkommazahl mit einfacher Genauigkeit dargestellt. Intern werden Daten im Hexadezimalformat gespeichert. COMP-1 akzeptiert keine PIC-Klausel. Hier entspricht 1 Wort 4 Bytes.
COMP-2
Das Datenelement ähnelt Long oder Double und wird als Gleitkommazahl mit doppelter Genauigkeit dargestellt. Intern werden Daten im Hexadezimalformat gespeichert. COMP-2 spezifiziert keine PIC-Klausel. Hier entspricht 2 Wort 8 Bytes.
COMP-3
Das Datenelement wird im gepackten Dezimalformat gespeichert. Jede Ziffer belegt ein halbes Byte (1 Halbbyte) und das Vorzeichen wird ganz am Halbbyte gespeichert.
Das folgende Beispiel berechnet die Anzahl der erforderlichen Bytes -
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.
Hefte
Ein COBOL-Copybook ist eine Auswahl von Code, der Datenstrukturen definiert. Wenn in vielen Programmen eine bestimmte Datenstruktur verwendet wird, können wir anstelle des erneuten Schreibens derselben Datenstruktur auch Copybooks verwenden. Wir verwenden die COPY-Anweisung, um ein Copybook in ein Programm aufzunehmen. Die Anweisung COPY wird im Abschnitt WorkingStorage verwendet.
Das folgende Beispiel enthält ein Heft in einem COBOL-Programm -
DATA DIVISION.
WORKING-STORAGE SECTION.
COPY ABC.
Hier ist ABC der Name des Heftes. Die folgenden Datenelemente im ABC-Copybook können innerhalb eines Programms verwendet werden.
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'.
Bedingte Anweisungen werden verwendet, um den Ausführungsablauf in Abhängigkeit von bestimmten vom Programmierer angegebenen Bedingungen zu ändern. Bedingte Anweisungen werden immer als wahr oder falsch bewertet. Bedingungen werden in IF-, Evaluate- und Perform-Anweisungen verwendet. Die verschiedenen Arten von Bedingungen sind wie folgt:
- IF-Bedingungserklärung
- Beziehungsbedingung
- Zeichenbedingung
- Klassenbedingung
- Bedingung-Name Bedingung
- Negierter Zustand
- Kombinierter Zustand
IF-Bedingungserklärung
IF-Anweisung prüft auf Bedingungen. Wenn eine Bedingung erfüllt ist, wird der IF-Block ausgeführt. und wenn die Bedingung falsch ist, wird der ELSE-Block ausgeführt.
END-IFwird verwendet, um den IF-Block zu beenden. Um den IF-Block zu beenden, kann anstelle von END-IF eine Periode verwendet werden. Es ist jedoch immer vorzuziehen, END-IF für mehrere IF-Blöcke zu verwenden.
Nested-IF- IF-Blöcke erscheinen in einem anderen IF-Block. Die Tiefe verschachtelter IF-Anweisungen ist unbegrenzt.
Syntax
Es folgt die Syntax von IF-Bedingungsanweisungen -
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 um das obige COBOL-Programm auszuführen -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
Wenn Sie das obige Programm kompilieren und ausführen, wird das folgende Ergebnis erzielt:
IN LOOP 1 - IF BLOCK
IN LOOP 2 - ELSE BLOCK
Beziehungsbedingung
Die Beziehungsbedingung vergleicht zwei Operanden, von denen jeder ein Bezeichner, ein Literal oder ein arithmetischer Ausdruck sein kann. Der algebraische Vergleich numerischer Felder erfolgt unabhängig von Größe und Verwendungsklausel.
For non-numeric operands
Wenn zwei nicht numerische Operanden gleicher Größe verglichen werden, werden die Zeichen von links mit den entsprechenden Positionen verglichen, bis das Ende erreicht ist. Der Operand mit einer größeren Anzahl von Zeichen wird als größer deklariert.
Wenn zwei nicht numerische Operanden ungleicher Größe verglichen werden, wird das kürzere Datenelement am Ende mit Leerzeichen versehen, bis die Größe der Operanden gleich wird, und dann gemäß den im vorherigen Punkt genannten Regeln verglichen.
Syntax
Nachstehend ist die Syntax der Beziehungsbedingungsanweisungen angegeben.
[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 um das obige COBOL-Programm auszuführen -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
Wenn Sie das obige Programm kompilieren und ausführen, erhalten Sie das folgende Ergebnis:
WS-NUM1 IS GREATER THAN WS-NUM2
Zeichenbedingung
Die Vorzeichenbedingung wird verwendet, um das Vorzeichen eines numerischen Operanden zu überprüfen. Es bestimmt, ob ein gegebener numerischer Wert größer, kleiner oder gleich NULL ist.
Syntax
Es folgt die Syntax der Zeichenbedingungsanweisungen -
[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 um das obige COBOL-Programm auszuführen -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
Wenn Sie das obige Programm kompilieren und ausführen, erhalten Sie das folgende Ergebnis:
WS-NUM1 IS NEGATIVE
WS-NUM2 IS POSITIVE
Klassenbedingung
Die Klassenbedingung wird verwendet, um zu überprüfen, ob ein Operand nur Alphabete oder numerische Daten enthält. Leerzeichen werden in ALPHABETIC, ALPHABETIC-LOWER und ALPHABETIC-UPPER berücksichtigt.
Syntax
Es folgt die Syntax von Klassenbedingungsanweisungen -
[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 um das obige COBOL-Programm auszuführen -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
Wenn Sie das obige Programm kompilieren und ausführen, wird das folgende Ergebnis erzielt:
WS-NUM1 IS ALPHABETIC
WS-NUM2 IS NUMERIC
Bedingungsname Bedingung
Ein Bedingungsname ist ein benutzerdefinierter Name. Es enthält eine Reihe von Werten, die vom Benutzer angegeben wurden. Es verhält sich wie boolesche Variablen. Sie sind mit der Levelnummer 88 definiert. Es wird keine PIC-Klausel geben.
Syntax
Es folgt die Syntax von benutzerdefinierten Bedingungsanweisungen -
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 um das obige COBOL-Programm auszuführen -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
Wenn Sie das obige Programm kompilieren und ausführen, wird das folgende Ergebnis erzielt:
Passed with 065 marks
Negierter Zustand
Der negierte Zustand wird mit dem Schlüsselwort NOT angegeben. Wenn eine Bedingung wahr ist und wir NICHT davor angegeben haben, ist ihr Endwert falsch.
Syntax
Es folgt die Syntax der Anweisungen für negierte Bedingungen:
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 um das obige COBOL-Programm auszuführen -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
Wenn Sie das obige Programm kompilieren und ausführen, wird das folgende Ergebnis erzielt:
ELSE-BLOCK
Kombinierter Zustand
Eine kombinierte Bedingung enthält zwei oder mehr Bedingungen, die mit logischen Operatoren UND oder ODER verbunden sind.
Syntax
Es folgt die Syntax kombinierter Bedingungsanweisungen -
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 um das obige COBOL-Programm auszuführen -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
Wenn Sie das obige Programm kompilieren und ausführen, wird das folgende Ergebnis erzielt:
Both condition OK
Verb auswerten
Das Verb auswerten ist ein Ersatz für eine Reihe von IF-ELSE-Anweisungen. Es kann verwendet werden, um mehr als eine Bedingung zu bewerten. Es ähnelt der SWITCH-Anweisung in C-Programmen.
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 um das obige COBOL-Programm auszuführen -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
Wenn Sie das obige Programm kompilieren und ausführen, wird das folgende Ergebnis erzielt:
WS-A GREATER THAN 2
Es gibt einige Aufgaben, die immer wieder erledigt werden müssen, z. B. das Lesen jedes Datensatzes einer Datei bis zu ihrem Ende. Die in COBOL verwendeten Schleifenanweisungen sind -
- Durchführen
- Durchführen bis
- Zeiten durchführen
- Führen Sie eine Variation durch
Durchführen
Perform Thru wird verwendet, um eine Reihe von Absätzen auszuführen, indem der erste und der letzte Absatzname in der Sequenz angegeben werden. Nach dem Ausführen des letzten Absatzes wird das Steuerelement zurückgegeben.
Inline durchführen
Anweisungen innerhalb der PERFORM werden ausgeführt, bis END-PERFORM erreicht ist.
Syntax
Es folgt die Syntax von In-Line Perform -
PERFORM
DISPLAY 'HELLO WORLD'
END-PERFORM.
Out-of-Line-Perform
Hier wird eine Anweisung in einem Absatz ausgeführt und dann die Steuerung auf einen anderen Absatz oder Abschnitt übertragen.
Syntax
Es folgt die Syntax von Out-of-Line Perform -
PERFORM PARAGRAPH1 THRU PARAGRAPH2
Example
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
PROCEDURE DIVISION.
A-PARA.
PERFORM DISPLAY 'IN A-PARA'
END-PERFORM.
PERFORM C-PARA THRU E-PARA.
B-PARA.
DISPLAY 'IN B-PARA'.
STOP RUN.
C-PARA.
DISPLAY 'IN C-PARA'.
D-PARA.
DISPLAY 'IN D-PARA'.
E-PARA.
DISPLAY 'IN E-PARA'.
JCL um das obige COBOL-Programm auszuführen.
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
Wenn Sie das obige Programm kompilieren und ausführen, wird das folgende Ergebnis erzielt:
IN A-PARA
IN C-PARA
IN D-PARA
IN E-PARA
IN B-PARA
Durchführen bis
In 'Durchführen bis' wird ein Absatz ausgeführt, bis die angegebene Bedingung erfüllt ist. 'Mit Test vor' ist die Standardbedingung und zeigt an, dass die Bedingung vor der Ausführung von Anweisungen in einem Absatz überprüft wird.
Syntax
Es folgt die Syntax von perform bis -
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 um das obige COBOL-Programm auszuführen -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
Wenn Sie das obige Programm kompilieren und ausführen, wird das folgende Ergebnis erzielt:
WS-CNT : 0
WS-CNT : 1
WS-CNT : 2
WS-CNT : 3
Zeiten durchführen
In 'Durchführungszeiten' wird ein Absatz so oft ausgeführt, wie angegeben.
Syntax
Es folgt die Syntax der Aufführungszeiten -
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 um das obige COBOL-Programm auszuführen -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
Wenn Sie das obige Programm kompilieren und ausführen, wird das folgende Ergebnis erzielt:
IN B-PARA
IN B-PARA
IN B-PARA
Führen Sie eine Variation durch
Beim Variieren der Leistung wird ein Absatz ausgeführt, bis die Bedingung in Bis-Phrase wahr wird.
Syntax
Im Folgenden finden Sie die Syntax zum Variieren der Leistung -
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 um das obige COBOL-Programm auszuführen -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
Wenn Sie das obige Programm kompilieren und ausführen, wird das folgende Ergebnis erzielt:
IN B-PARA 1
IN B-PARA 2
IN B-PARA 3
IN B-PARA 4
GO TO-Anweisung
Die Anweisung GO TO wird verwendet, um den Ausführungsfluss in einem Programm zu ändern. In GO TO-Anweisungen erfolgt die Übertragung nur in Vorwärtsrichtung. Es wird verwendet, um einen Absatz zu verlassen. Folgende Arten von GO TO-Anweisungen werden verwendet:
Bedingungslos GEHE ZU
GO TO para-name.
Bedingt GEHE ZU
GO TO para-1 para-2 para-3 DEPENDING ON x.
Wenn 'x' gleich 1 ist, wird die Steuerung auf den ersten Absatz übertragen. und wenn 'x' gleich 2 ist, wird die Kontrolle auf den zweiten Absatz übertragen und so weiter.
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 um das obige COBOL-Programm auszuführen:
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
Wenn Sie das obige Programm kompilieren und ausführen, wird das folgende Ergebnis erzielt:
IN A-PARA
IN B-PARA
IN D-PARA
Zeichenfolgenbehandlungsanweisungen in COBOL werden verwendet, um mehrere Funktionsoperationen für Zeichenfolgen auszuführen. Im Folgenden finden Sie die Anweisungen zum Behandeln von Zeichenfolgen.
- Inspect
- String
- Unstring
Prüfen
Das Inspect-Verb wird verwendet, um die Zeichen in einer Zeichenfolge zu zählen oder zu ersetzen. Zeichenfolgenoperationen können für alphanumerische, numerische oder alphabetische Werte ausgeführt werden. Inspektionsvorgänge werden von links nach rechts ausgeführt. Die für die Zeichenfolgenoperationen verwendeten Optionen lauten wie folgt:
Zählen
Die Zähloption wird verwendet, um die Zeichenfolgen zu zählen.
Syntax
Es folgt die Syntax der Tallying-Option:
INSPECT input-string
TALLYING output-count FOR ALL CHARACTERS
Die verwendeten Parameter sind -
- Eingabezeichenfolge - Die Zeichenfolge, deren Zeichen gezählt werden sollen.
- Ausgabezahl - Datenelement, das die Anzahl der Zeichen enthält.
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 um das obige COBOL-Programm auszuführen.
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
Wenn Sie das obige Programm kompilieren und ausführen, wird das folgende Ergebnis erzielt:
WS-CNT1 : 15
WS-CNT2 : 06
Ersetzen
Die Option Ersetzen wird verwendet, um die Zeichenfolgen zu ersetzen.
Syntax
Es folgt die Syntax der Option Ersetzen -
INSPECT input-string REPLACING ALL char1 BY char2.
Der verwendete Parameter ist -
input-string - Die Zeichenfolge, deren Zeichen von char1 nach char2 ersetzt werden sollen.
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 um das obige COBOL-Programm auszuführen.
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
Wenn Sie das obige Programm kompilieren und ausführen, wird das folgende Ergebnis erzielt:
OLD STRING : ABCDACDADEAAAFF
NEW STRING : XBCDXCDXDEXXXFF
String
Das String-Verb wird verwendet, um die Strings zu verketten. Mit der STRING-Anweisung können zwei oder mehr Zeichenfolgen zu einer längeren Zeichenfolge kombiniert werden. Die Klausel 'Delimited By' ist obligatorisch.
Syntax
Es folgt die Syntax des String-Verbs -
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.
Nachfolgend finden Sie die Details der verwendeten Parameter -
- ws-string1 und ws-string2: Zu verkettende Eingabezeichenfolgen
- ws-string: Ausgabezeichenfolge
- ws-count: Wird verwendet, um die Länge der neuen verketteten Zeichenfolge zu zählen
- Begrenzt gibt das Ende der Zeichenfolge an
- Zeiger und Überlauf sind optional
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 um das obige COBOL-Programm auszuführen -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
Wenn Sie das obige Programm kompilieren und ausführen, wird das folgende Ergebnis erzielt:
WS-STRING : WelcomeToTutorialspoint
WS-COUNT : 25
Abfädeln
Unstring Verb wird verwendet, um eine Zeichenfolge in mehrere Unterzeichenfolgen aufzuteilen. Die Klausel "Begrenzt durch" ist obligatorisch.
Syntax
Es folgt die Syntax des Unstring-Verbs -
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 um das obige COBOL-Programm auszuführen -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
Wenn Sie das obige Programm kompilieren und ausführen, wird das folgende Ergebnis erzielt:
WS-STR1 : WELCOME
WS-STR2 : TO
WS-STR3 : TUTORIALSPOINT
Arrays in COBOL werden als Tabellen bezeichnet. Ein Array ist eine lineare Datenstruktur und eine Sammlung einzelner Datenelemente desselben Typs. Datenelemente einer Tabelle werden intern sortiert.
Tabellenerklärung
Die Tabelle wird in Data Division deklariert. OccursKlausel wird verwendet, um eine Tabelle zu definieren. Die Occurs-Klausel gibt die Wiederholung der Datennamendefinition an. Es kann nur mit Levelnummern von 02 bis 49 verwendet werden. Verwenden Sie die Klausel "Nicht verwenden" bei "Neudefinitionen" nicht. Die Beschreibung der eindimensionalen und zweidimensionalen Tabelle lautet wie folgt:
Eindimensionale Tabelle
In einer eindimensionalen Tabelle occursKlausel wird nur einmal in der Deklaration verwendet. WSTABLE ist das Gruppenelement, das eine Tabelle enthält. WS-B benennt die Tabellenelemente, die zehnmal vorkommen.
Syntax
Es folgt die Syntax zum Definieren einer eindimensionalen Tabelle:
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 um das obige COBOL-Programm auszuführen -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
Wenn Sie das obige Programm kompilieren und ausführen, wird das folgende Ergebnis erzielt:
ONE-D TABLE : TUTORIALS TUTORIALS TUTORIALS TUTORIALS TUTORIALS
Zweidimensionale Tabelle
Eine zweidimensionale Tabelle wird erstellt, wobei beide Datenelemente eine variable Länge haben. Gehen Sie als Referenz die Syntax durch und versuchen Sie dann, die Tabelle zu analysieren. Das erste Array (WS-A) kann 1 bis 10 Mal und das innere Array (WS-C) 1 bis 5 Mal auftreten. Für jeden Eintrag von WS-A gibt es entsprechende 5 Einträge von WS-C.
Syntax
Es folgt die Syntax zum Definieren einer zweidimensionalen Tabelle:
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 um das obige COBOL-Programm auszuführen -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
Wenn Sie das obige Programm kompilieren und ausführen, wird das folgende Ergebnis erzielt:
TWO-D TABLE : TUTORIALS POINT POINT TUTORIALS POINT POINT
Index
Auf einzelne Elemente der Tabelle kann mithilfe des Index zugegriffen werden. Die tiefgestellten Werte können zwischen 1 und der Häufigkeit liegen, mit der die Tabelle auftritt. Ein Index kann eine beliebige positive Zahl sein. Es ist keine Deklaration in der Datenaufteilung erforderlich. Es wird automatisch mit der Vorkommensklausel erstellt.
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 um das obige COBOL-Programm auszuführen -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
Wenn Sie das obige Programm kompilieren und ausführen, wird das folgende Ergebnis erzielt:
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
Index
Auf Tabellenelemente kann auch über den Index zugegriffen werden. Ein Index ist eine Verschiebung des Elements vom Anfang der Tabelle. Ein Index wird mit der Occurs-Klausel unter Verwendung der INDEXED BY-Klausel deklariert. Der Wert des Index kann mit der SET-Anweisung und der Option PERFORM Varying geändert werden.
Syntax
Es folgt die Syntax zum Definieren des Index in einer Tabelle:
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 um das obige COBOL-Programm auszuführen -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
Wenn Sie das obige Programm kompilieren und ausführen, wird das folgende Ergebnis erzielt:
ABC
DEF
GHI
JKL
MNO
PQR
Set-Anweisung
Die Set-Anweisung wird verwendet, um den Indexwert zu ändern. Set verb wird verwendet, um den Indexwert zu initialisieren, zu erhöhen oder zu verringern. Es wird mit Search and Search All verwendet, um Elemente in der Tabelle zu suchen.
Syntax
Es folgt die Syntax für die Verwendung einer Set-Anweisung:
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 um das obige COBOL-Programm auszuführen.
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
Wenn Sie das obige Programm kompilieren und ausführen, wird das folgende Ergebnis erzielt:
ABC
JKL
Suche
Die Suche ist eine lineare Suchmethode, mit der Elemente in der Tabelle gefunden werden. Es kann sowohl für sortierte als auch für unsortierte Tabellen durchgeführt werden. Es wird nur für Tabellen verwendet, die durch Indexphrasen deklariert sind. Es beginnt mit dem Anfangswert des Index. Wird das gesuchte Element nicht gefunden, wird der Index automatisch um 1 erhöht und bis zum Ende der Tabelle fortgesetzt.
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 um das obige COBOL-Programm auszuführen.
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
Wenn Sie das obige Programm kompilieren und ausführen, wird das folgende Ergebnis erzielt:
LETTER M FOUND IN TABLE
Suche alle
Search All ist eine binäre Suchmethode, mit der Elemente in der Tabelle gefunden werden. Die Tabelle muss in sortierter Reihenfolge für die Option Alle suchen sein. Der Index erfordert keine Initialisierung. Bei der binären Suche wird die Tabelle in zwei Hälften geteilt und bestimmt, in welcher Hälfte das gesuchte Element vorhanden ist. Dieser Vorgang wiederholt sich, bis das Element gefunden oder das Ende erreicht ist.
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 um das obige COBOL-Programm auszuführen -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
Wenn Sie das obige Programm kompilieren und ausführen, wird das folgende Ergebnis erzielt:
RECORD FOUND
93
MNO
Das Konzept der Dateien in COBOL unterscheidet sich von dem in C / C ++. Beim Erlernen der Grundlagen von 'Datei' in COBOL sollten die Konzepte beider Sprachen nicht miteinander verknüpft werden. Einfache Textdateien können stattdessen nicht in COBOL verwendet werdenPS (Physical Sequential) und VSAMDateien werden verwendet. PS-Dateien werden in diesem Modul behandelt.
Um die Dateiverwaltung in COBOL zu verstehen, müssen die Grundbegriffe bekannt sein. Diese Begriffe dienen nur dazu, die Grundlagen der Dateiverwaltung zu verstehen. Weitere ausführliche Begriffe werden im Kapitel 'Verben zur Dateiverwaltung' behandelt. Es folgen die Grundbegriffe -
- Field
- Record
- Körperliche Aufzeichnung
- Logische Aufzeichnung
- File
Das folgende Beispiel hilft beim Verständnis dieser Begriffe:
Feld
Das Feld wird verwendet, um die über ein Element gespeicherten Daten anzuzeigen. Es stellt ein einzelnes Element dar, wie im obigen Beispiel gezeigt, z. B. Schüler-ID, Name, Noten, Gesamtnoten und Prozentsatz. Die Anzahl der Zeichen in einem Feld wird als Feldgröße bezeichnet. Der Schülername kann beispielsweise 10 Zeichen enthalten. Felder können die folgenden Attribute haben:
Primary keyssind die Felder, die für jeden Datensatz eindeutig sind und zur Identifizierung eines bestimmten Datensatzes verwendet werden. In der Schüler-Markendatei hat beispielsweise jeder Schüler eine eindeutige Schüler-ID, die den Primärschlüssel bildet.
Secondary keyssind eindeutige oder nicht eindeutige Felder, mit denen nach verwandten Daten gesucht wird. Beispielsweise kann in der Schülermarkendatei der vollständige Name des Schülers als Sekundärschlüssel verwendet werden, wenn die Schüler-ID nicht bekannt ist.
DescriptorsFelder werden verwendet, um eine Entität zu beschreiben. In der Schüler-Markendatei sind beispielsweise Markierungen und Prozentfelder, die dem Datensatz Bedeutung verleihen, bekannte Deskriptoren.
Aufzeichnung
Datensatz ist eine Sammlung von Feldern, mit denen eine Entität beschrieben wird. Ein oder mehrere Felder bilden zusammen einen Datensatz. Beispielsweise bilden in der Schüler-Markendatei die Schüler-ID, der Name, die Noten, die Gesamtpunktzahl und der Prozentsatz einen Datensatz. Die kumulative Größe aller Felder in einem Datensatz wird als Datensatzgröße bezeichnet. Die in einer Datei vorhandenen Datensätze können eine feste Länge oder eine variable Länge haben.
Körperliche Aufzeichnung
Physische Aufzeichnung ist die Information, die auf dem externen Gerät vorhanden ist. Es ist auch als Block bekannt.
Logische Aufzeichnung
Logischer Datensatz ist die vom Programm verwendete Information. In COBOL-Programmen kann zu jedem Zeitpunkt nur ein Datensatz verarbeitet werden, der als logischer Datensatz bezeichnet wird.
Datei
Datei ist eine Sammlung verwandter Datensätze. Beispielsweise besteht die Schülermarkendatei aus Aufzeichnungen aller Schüler.
Die Dateiorganisation gibt an, wie die Datensätze in einer Datei organisiert sind. Es gibt verschiedene Arten von Organisationen für Dateien, um den Zugriff auf die Datensätze effizienter zu gestalten. Im Folgenden sind die Arten von Dateiorganisationsschemata aufgeführt:
- Sequentielle Dateiorganisation
- Indizierte sequentielle Dateiorganisation
- Relative Dateiorganisation
Die Syntaxen in diesem Modul, die zusammen mit ihren jeweiligen Begriffen erwähnt werden, beziehen sich nur auf ihre Verwendung im Programm. Die vollständigen Programme, die diese Syntax verwenden, werden im Kapitel 'Verben zur Dateiverwaltung' beschrieben.
Sequentielle Dateiorganisation
Eine sequentielle Datei besteht aus Datensätzen, die in sequentieller Reihenfolge gespeichert werden und auf die zugegriffen wird. Im Folgenden sind die wichtigsten Attribute der sequentiellen Dateiorganisation aufgeführt:
Datensätze können in sequentieller Reihenfolge gelesen werden. Zum Lesen der 10 - ten Datensatz, werden alle vorherigen 9 Aufzeichnungen gelesen werden.
Die Datensätze werden in sequentieller Reihenfolge geschrieben. Ein neuer Datensatz kann nicht dazwischen eingefügt werden. Ein neuer Datensatz wird immer am Ende der Datei eingefügt.
Nach dem Einfügen eines Datensatzes in eine sequentielle Datei ist es nicht möglich, einen Datensatz zu löschen, zu kürzen oder zu verlängern.
Die Reihenfolge der einmal eingefügten Datensätze kann niemals geändert werden.
Eine Aktualisierung der Aufzeichnung ist möglich. Ein Datensatz kann überschrieben werden, wenn die neue Datensatzlänge mit der alten Datensatzlänge übereinstimmt.
Sequentielle Ausgabedateien sind eine gute Option zum Drucken.
Syntax
Es folgt die Syntax der sequentiellen Dateiorganisation -
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT file-name ASSIGN TO dd-name-jcl
ORGANIZATION IS SEQUENTIAL
Indizierte sequentielle Dateiorganisation
Eine indizierte sequentielle Datei besteht aus Datensätzen, auf die sequentiell zugegriffen werden kann. Ein direkter Zugriff ist ebenfalls möglich. Es besteht aus zwei Teilen -
Data File enthält Datensätze im sequentiellen Schema.
Index File enthält den Primärschlüssel und seine Adresse in der Datendatei.
Im Folgenden sind die wichtigsten Attribute der sequentiellen Dateiorganisation aufgeführt:
Datensätze können wie bei der sequentiellen Dateiorganisation in sequentieller Reihenfolge gelesen werden.
Auf Datensätze kann zufällig zugegriffen werden, wenn der Primärschlüssel bekannt ist. Die Indexdatei wird verwendet, um die Adresse eines Datensatzes abzurufen, und dann wird der Datensatz aus der Datendatei abgerufen.
In diesem Dateisystem wird ein sortierter Index verwaltet, der den Schlüsselwert mit der Position des Datensatzes in der Datei in Beziehung setzt.
Es kann auch ein alternativer Index erstellt werden, um die Datensätze abzurufen.
Syntax
Es folgt die Syntax der indizierten sequentiellen Dateiorganisation -
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT file-name ASSIGN TO dd-name-jcl
ORGANIZATION IS INDEXED
RECORD KEY IS primary-key
ALTERNATE RECORD KEY IS rec-key
Relative Dateiorganisation
Eine relative Datei besteht aus Datensätzen, die nach ihren sortiert sind relative address. Im Folgenden sind die wichtigsten Attribute der relativen Dateiorganisation aufgeführt:
Datensätze können in sequentieller Reihenfolge gelesen werden, genau wie bei der sequentiellen und indizierten Dateiorganisation.
Auf Datensätze kann mit dem relativen Schlüssel zugegriffen werden. Der relative Schlüssel repräsentiert den Speicherort des Datensatzes relativ zur Adresse des Dateianfangs.
Datensätze können mit dem relativen Schlüssel eingefügt werden. Die relative Adresse wird mit dem relativen Schlüssel berechnet.
Die relative Datei bietet den schnellsten Zugriff auf die Datensätze.
Der Hauptnachteil dieses Dateisystems besteht darin, dass einige fehlende Zwischendatensätze auch Speicherplatz belegen.
Syntax
Es folgt die Syntax der relativen Dateiorganisation -
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT file-name ASSIGN TO dd-name-jcl
ORGANIZATION IS RELATIVE
RELATIVE KEY IS rec-key
Bisher wurden Dateiorganisationsschemata diskutiert. Für jedes Dateiorganisationsschema können verschiedene Zugriffsmodi verwendet werden. Im Folgenden sind die Arten von Dateizugriffsmodi aufgeführt:
- Sequentieller Zugriff
- Direktzugriff
- Dynamischer Zugriff
Die Syntaxen in diesem Modul, die zusammen mit ihren jeweiligen Begriffen erwähnt werden, beziehen sich nur auf ihre Verwendung im Programm. Die vollständigen Programme, die diese Syntax verwenden, werden im nächsten Kapitel erläutert.
Sequentieller Zugriff
Wenn der Zugriffsmodus sequentiell ist, ändert sich die Methode zum Abrufen von Datensätzen gemäß der ausgewählten Dateiorganisation.
Zum sequential filesAuf Datensätze wird in derselben Reihenfolge zugegriffen, in der sie eingefügt wurden.
Zum indexed filesDer zum Abrufen der Datensätze verwendete Parameter sind die Datensatzschlüsselwerte.
Zum relative filesRelative Datensatzschlüssel werden zum Abrufen der Datensätze verwendet.
Syntax
Es folgt die Syntax des sequentiellen Zugriffsmodus -
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
Direktzugriff
Wenn der Zugriffsmodus ZUFÄLLIG ist, ändert sich die Methode zum Abrufen von Datensätzen gemäß der ausgewählten Dateiorganisation.
Zum indexed filesAuf Datensätze wird gemäß dem Wert zugegriffen, der in einem Schlüsselfeld platziert ist, das ein Primär- oder Alternativschlüssel sein kann. Es kann einen oder mehrere alternative Indizes geben.
Zum relative files werden Datensätze über relative Datensatzschlüssel abgerufen.
Syntax
Es folgt die Syntax des Direktzugriffsmodus -
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
Dynamischer Zugriff
Der dynamische Zugriff unterstützt sowohl den sequentiellen als auch den wahlfreien Zugriff im selben Programm. Beim dynamischen Zugriff wird eine Dateidefinition verwendet, um sowohl eine sequentielle als auch eine zufällige Verarbeitung durchzuführen, z. B. den Zugriff auf einige Datensätze in sequenzieller Reihenfolge und andere Datensätze über ihre Schlüssel.
Bei relativen und indizierten Dateien können Sie im dynamischen Zugriffsmodus beim Lesen einer Datei mithilfe der NEXT-Phrase in der READ-Anweisung zwischen dem sequentiellen Zugriffsmodus und dem Direktzugriffsmodus wechseln. Die Funktionen NEXT und READ werden im nächsten Kapitel erläutert.
Syntax
Es folgt die Syntax des dynamischen Zugriffsmodus:
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
Dateiverarbeitungsverben werden verwendet, um verschiedene Operationen an Dateien auszuführen. Im Folgenden sind die Dateiverarbeitungsverben aufgeführt:
- Open
- Read
- Write
- Rewrite
- Delete
- Start
- Close
Verb öffnen
Öffnen ist die erste Dateioperation, die ausgeführt werden muss. Wenn Open erfolgreich ist, sind nur weitere Vorgänge für eine Datei möglich. Erst nach dem Öffnen einer Datei stehen die Variablen in der Dateistruktur zur Verarbeitung zur Verfügung.FILE STATUS Die Variable wird nach jeder Dateioperation aktualisiert.
Syntax
OPEN "mode" file-name.
Hier ist der Dateiname ein Zeichenfolgenliteral, mit dem Sie Ihre Datei benennen. Eine Datei kann in den folgenden Modi geöffnet werden:
Sr.Nr. | Modus & Beschreibung |
---|---|
1 | Input Der Eingabemodus wird für vorhandene Dateien verwendet. In diesem Modus können wir nur die Datei lesen, es sind keine anderen Vorgänge für die Datei zulässig. |
2 | Output Der Ausgabemodus wird zum Einfügen von Datensätzen in Dateien verwendet. Wenn einsequential fileWird verwendet und die Datei enthält einige Datensätze, werden zuerst die vorhandenen Datensätze gelöscht und dann neue Datensätze in die Datei eingefügt. Dies wird im Falle eines nicht der Fall seinindexed file oder ein relative file. |
3 | Extend Der Erweiterungsmodus wird verwendet, um Datensätze in a anzuhängen sequential file. In diesem Modus werden am Ende Datensätze eingefügt. Wenn der Dateizugriffsmodus istRandom oder Dynamic, dann kann der Erweiterungsmodus nicht verwendet werden. |
4 | I-O Der Eingabe-Ausgabe-Modus wird zum Lesen und Umschreiben der Datensätze einer Datei verwendet. |
Verb lesen
Leseverb wird verwendet, um die Dateidatensätze zu lesen. Die Funktion des Lesens besteht darin, Datensätze aus einer Datei abzurufen. Bei jedem Leseverb kann nur ein Datensatz in die Dateistruktur eingelesen werden. Öffnen Sie die Datei im INPUT- oder IO-Modus, um einen Lesevorgang auszuführen. Bei jeder Leseanweisung wird der Dateizeiger inkrementiert und daher werden die aufeinanderfolgenden Datensätze gelesen.
Syntax
Es folgt die Syntax zum Lesen der Datensätze, wenn der Dateizugriffsmodus sequentiell ist:
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.
Im Folgenden sind die verwendeten Parameter aufgeführt:
NEXT RECORD ist optional und wird angegeben, wenn eine indizierte sequentielle Datei nacheinander gelesen wird.
Die INTO-Klausel ist optional. Die ws-Dateistruktur wird im Abschnitt WorkingStorage definiert, um die Werte aus der READ-Anweisung abzurufen.
Die AT END-Bedingung wird wahr, wenn das Dateiende erreicht ist.
Example- Im folgenden Beispiel wird eine vorhandene Datei mithilfe der zeilenweisen Organisation gelesen. Dieses Programm kann mit kompiliert und ausgeführt werdenLive Demo Option, bei der alle in der Datei vorhandenen Datensätze angezeigt werden.
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.
Angenommen, die Eingabedateidaten sind in der verfügbar input.txt Datei enthält die folgenden -
20003 Mohtashim M.
20004 Nishant Malik
20005 Amitabh Bachhan
Wenn Sie das obige Programm kompilieren und ausführen, wird das folgende Ergebnis erzielt:
20003 Mohtashim M.
20004 Nishant Malik
20005 Amitabh Bachhan
Syntax
Es folgt die Syntax zum Lesen eines Datensatzes, wenn der Dateizugriffsmodus zufällig ist -
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- Im folgenden Beispiel wird eine vorhandene Datei mithilfe einer indizierten Organisation gelesen. Dieses Programm kann mit kompiliert und ausgeführt werdenJCLauf Mainframes, wo alle in der Datei vorhandenen Datensätze angezeigt werden. Auf dem Mainframeserver verwenden wir keine Textdateien. Stattdessen verwenden wir PS-Dateien.
Nehmen wir an, dass die auf Mainframes vorhandene Datei denselben Inhalt hat wie die Datei input.txt im obigen Beispiel.
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 um das obige COBOL-Programm auszuführen -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
//IN1 DD DSN = STUDENT-FILE-NAME,DISP=SHR
Wenn Sie das obige Programm kompilieren und ausführen, wird das folgende Ergebnis erzielt:
20005 Amitabh Bachhan
Verb schreiben
Schreibverb wird verwendet, um Datensätze in eine Datei einzufügen. Sobald der Datensatz geschrieben wurde, ist er nicht mehr im Datensatzpuffer verfügbar. Verschieben Sie die Werte in den Datensatzpuffer, bevor Sie Datensätze in die Datei einfügen, und führen Sie dann das Schreibverb aus.
Write-Anweisung kann mit verwendet werden FROMOption zum direkten Schreiben von Datensätzen aus den Arbeitsspeichervariablen. From ist eine optionale Klausel. Wenn der Zugriffsmodus sequentiell ist, muss die Datei zum Schreiben eines Datensatzes im Ausgabemodus oder im Erweiterungsmodus geöffnet werden. Wenn der Zugriffsmodus zufällig oder dynamisch ist, muss die Datei zum Schreiben eines Datensatzes im Ausgabemodus oder im E / A-Modus geöffnet werden.
Syntax
Es folgt die Syntax zum Lesen eines Datensatzes, wenn die Dateiorganisation sequentiell ist:
WRITE record-buffer [FROM ws-file-structure]
END-WRITE.
Im Folgenden finden Sie die Syntax zum Lesen eines Datensatzes, wenn die Dateiorganisation indiziert oder relativ ist.
WRITE record-buffer [FROM ws-file-structure]
INVALID KEY DISPLAY 'Invalid Key'
NOT INVALID KEY DISPLAY 'Record Inserted'
END-WRITE.
Example - Das folgende Beispiel zeigt, wie ein neuer Datensatz in eine neue Datei eingefügt wird, wenn die Organisation sequentiell ist.
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 um das obige COBOL-Programm auszuführen -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
//OUT1 DD DSN = OUTPUT-FILE-NAME,DISP = (NEW,CATALOG,DELETE)
Wenn Sie das obige Programm kompilieren und ausführen, wird der Ausgabedatei ein neuer Datensatz hinzugefügt.
1000 Tim 10
Verb umschreiben
Das Umschreiben des Verbs wird verwendet, um die Datensätze zu aktualisieren. Die Datei sollte im E / A-Modus zum Umschreiben geöffnet werden. Es kann nur nach einem erfolgreichen Lesevorgang verwendet werden. Das Umschreiben des Verbs überschreibt den zuletzt gelesenen Datensatz.
Syntax
Es folgt die Syntax zum Lesen eines Datensatzes, wenn die Dateiorganisation sequentiell ist:
REWRITE record-buffer [FROM ws-file-structure]
END-REWRITE.
Im Folgenden finden Sie die Syntax zum Lesen eines Datensatzes, wenn die Dateiorganisation indiziert oder relativ ist.
REWRITE record-buffer [FROM ws-file-structure]
INVALID KEY DISPLAY 'Invalid Key'
NOT INVALID KEY DISPLAY 'Record Updated'
END-REWRITE.
Example - Das folgende Beispiel zeigt, wie ein vorhandener Datensatz aktualisiert wird, den wir im vorherigen Schreibschritt eingefügt haben. -
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 um das obige COBOL-Programm auszuführen -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
//IN1 DD DSN = OUTPUT-FILE-NAME,DISP = SHR
Wenn Sie das obige Programm kompilieren und ausführen, wird der Datensatz aktualisiert -
1000 Tim Dumais 10
Verb löschen
Das Löschen von Verben kann nur für indizierte und relative Dateien ausgeführt werden. Die Datei muss im E / A-Modus geöffnet werden. In der sequentiellen Dateiorganisation können Datensätze nicht gelöscht werden. Der zuletzt von der Read-Anweisung gelesene Datensatz wird im sequentiellen Zugriffsmodus gelöscht. Geben Sie im Direktzugriffsmodus den Datensatzschlüssel an und führen Sie dann den Löschvorgang aus.
Syntax
Es folgt die Syntax zum Löschen eines Datensatzes:
DELETE file-name RECORD
INVALID KEY DISPLAY 'Invalid Key'
NOT INVALID KEY DISPLAY 'Record Deleted'
END-DELETE.
Example - um einen vorhandenen Datensatz zu löschen -
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 um das obige COBOL-Programm auszuführen -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
//OUT1 DD DSN = OUTPUT-FILE-NAME,DISP = SHR
Wenn Sie das obige Programm kompilieren und ausführen, wird das folgende Ergebnis erzielt:
Record Deleted
Verb starten
Das Startverb kann nur für indizierte und relative Dateien ausgeführt werden. Es wird verwendet, um den Dateizeiger auf einen bestimmten Datensatz zu platzieren. Der Zugriffsmodus muss sequentiell oder dynamisch sein. Die Datei muss im E / A- oder Eingabemodus geöffnet werden.
Syntax
Es folgt die Syntax zum Platzieren des Zeigers auf einen bestimmten Datensatz -
START file-name KEY IS [=, >, <, NOT, <= or >=] rec-key
INVALID KEY DISPLAY 'Invalid Key'
NOT INVALID KEY DISPLAY 'File Pointer Updated'
END-START.
Verb schließen
Schließen Verb wird verwendet, um eine Datei zu schließen. Nach dem Ausführen des Schließvorgangs stehen die Variablen in der Dateistruktur nicht zur Verarbeitung zur Verfügung. Die Verbindung zwischen Programm und Datei geht verloren.
Syntax
Es folgt die Syntax zum Schließen einer Datei:
CLOSE file-name.
Die Cobol-Subroutine ist ein Programm, das unabhängig kompiliert, aber nicht unabhängig ausgeführt werden kann. Es gibt zwei Arten von Unterprogrammen:internal subroutines mögen Perform Aussagen und external Unterprogramme wie CALL Verb.
Rufen Sie Verb auf
Das Aufrufverb wird verwendet, um die Steuerung von einem Programm auf ein anderes Programm zu übertragen. Das Programm, das das CALL-Verb enthält, ist dasCalling Program und das aufgerufene Programm ist als das bekannt Called Program. Das Aufrufen der Programmausführung wird angehalten, bis das aufgerufene Programm die Ausführung beendet hat. Die Anweisung Programm beenden wird im aufgerufenen Programm verwendet, um die Steuerung zurück zu übertragen.
Aufgerufene Programmbeschränkungen
Es folgen die genannten Programmanforderungen -
Linkage sectionmuss im aufgerufenen Programm definiert werden. Es besteht aus Datenelementen, die im Programm übergeben werden. Die Datenelemente sollten keine Value-Klausel enthalten. Die PIC-Klausel muss mit den Variablen kompatibel sein, die über das aufrufende Programm übergeben werden.
Procedure division using hat eine Liste von Variablen, die vom aufrufenden Programm übergeben wurden, und die Reihenfolge muss mit der im Aufrufverb angegebenen übereinstimmen.
Exit programDie Anweisung wird im aufgerufenen Programm verwendet, um die Steuerung zurück zu übertragen. Es muss die letzte Anweisung im aufgerufenen Programm sein.
Die Parameter können auf zwei Arten zwischen Programmen übergeben werden:
- Durch Bezugnahme
- Nach Inhalt
Call By Reference
Wenn die Werte von Variablen im aufgerufenen Programm geändert werden, werden ihre neuen Werte im aufrufenden Programm wiedergegeben. WennBY Wenn keine Klausel angegeben ist, werden Variablen immer als Referenz übergeben.
Syntax
Es folgt die Syntax zum Aufrufen des Unterprogramms als Referenz -
CALL sub-prog-name USING variable-1, variable-2.
Example
Das folgende Beispiel ist das MAIN-Aufrufprogramm und UTIL ist das aufgerufene Programm -
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.
Aufgerufenes Programm
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 um das obige COBOL-Programm auszuführen -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = MAIN
Wenn Sie das obige Programm kompilieren und ausführen, wird das folgende Ergebnis erzielt:
In Called Program
Student Id : 1111
Student Name : Tim
Call By Content
Wenn die Werte von Variablen im aufgerufenen Programm geändert werden, werden ihre neuen Werte im aufrufenden Programm nicht wiedergegeben.
Syntax
Es folgt die Syntax zum Aufrufen des Unterprogramms nach Inhalt -
CALL sub-prog-name USING
BY CONTENT variable-1, BY CONTENT variable-2.
Example
Das folgende Beispiel ist das MAIN-Aufrufprogramm und UTIL ist das aufgerufene Programm -
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.
Aufgerufenes Programm
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 um das obige COBOL-Programm auszuführen -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = MAIN
Wenn Sie das obige Programm kompilieren und ausführen, wird das folgende Ergebnis erzielt:
In Called Program
Student Id : 1000
Student Name : Tim
Arten von Anrufen
Es gibt zwei Arten von Anrufen:
Static Calltritt auf, wenn ein Programm mit der Compileroption NODYNAM kompiliert wird. Ein statisch aufgerufenes Programm wird zur Kompilierungszeit in den Speicher geladen.
Dynamic Calltritt auf, wenn ein Programm mit der Compileroption DYNAM und NODLL kompiliert wird. Ein dynamisch aufgerufenes Programm wird zur Laufzeit in den Speicher geladen.
Das Sortieren von Daten in einer Datei oder das Zusammenführen von zwei oder mehr Dateien ist in fast allen geschäftsorientierten Anwendungen eine häufige Notwendigkeit. Die Sortierung wird zum Anordnen von Datensätzen in aufsteigender oder absteigender Reihenfolge verwendet, damit eine sequentielle Verarbeitung durchgeführt werden kann. Es gibt zwei Techniken, die zum Sortieren von Dateien in COBOL verwendet werden:
External sortwird zum Sortieren von Dateien mithilfe des Dienstprogramms SORT in JCL verwendet. Wir haben dies im JCL-Kapitel besprochen. Ab sofort konzentrieren wir uns auf die interne Sortierung.
Internal sort wird verwendet, um Dateien innerhalb eines COBOL-Programms zu sortieren. SORT Verb wird verwendet, um eine Datei zu sortieren.
Verb sortieren
Beim Sortieren in COBOL werden drei Dateien verwendet -
Input file ist die Datei, die wir entweder in aufsteigender oder absteigender Reihenfolge sortieren müssen.
Work filewird verwendet, um Datensätze zu speichern, während der Sortiervorgang ausgeführt wird. Eingabedateidatensätze werden für den Sortiervorgang in die Arbeitsdatei übertragen. Diese Datei sollte im Abschnitt Datei unter SD-Eintrag definiert werden.
Output fileist die Datei, die wir nach dem Sortiervorgang erhalten. Es ist die endgültige Ausgabe des Sortierverbs.
Syntax
Es folgt die Syntax zum Sortieren einer Datei:
SORT work-file ON ASCENDING KEY rec-key1
[ON DESCENDING KEY rec-key2]
USING input-file GIVING output-file.
SORT führt die folgenden Operationen aus:
Öffnet die Arbeitsdatei im E / A-Modus, die Eingabedatei im INPUT-Modus und die Ausgabedatei im OUTPUT-Modus.
Überträgt die in der Eingabedatei vorhandenen Datensätze in die Arbeitsdatei.
Sortiert die SORT-DATEI in aufsteigender / absteigender Reihenfolge per Rec-Key.
Überträgt die sortierten Datensätze aus der Arbeitsdatei in die Ausgabedatei.
Schließt die Eingabedatei und die Ausgabedatei und löscht die Arbeitsdatei.
Example
Im folgenden Beispiel ist INPUT die Eingabedatei, die in aufsteigender Reihenfolge sortiert werden muss.
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 um das obige COBOL-Programm auszuführen -
//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
Wenn Sie das obige Programm kompilieren und ausführen, wird das folgende Ergebnis erzielt:
Sort Successful
Verb zusammenführen
Zwei oder mehr identisch sequenzierte Dateien werden mithilfe der Merge-Anweisung kombiniert. Im Zusammenführungsprozess verwendete Dateien -
- Eingabedateien - Eingabe-1, Eingabe-2
- Arbeitsdatei
- Ausgabedatei
Syntax
Im Folgenden finden Sie die Syntax zum Zusammenführen von zwei oder mehr Dateien:
MERGE work-file ON ASCENDING KEY rec-key1
[ON DESCENDING KEY rec-key2]
USING input-1, input-2 GIVING output-file.
Merge führt die folgenden Vorgänge aus:
Öffnet die Arbeitsdatei im IO-Modus, die Eingabedateien im INPUT-Modus und die Ausgabedatei im OUTPUT-Modus.
Überträgt die in den Eingabedateien vorhandenen Datensätze in die Arbeitsdatei.
Sortiert die SORT-DATEI in aufsteigender / absteigender Reihenfolge per Rec-Key.
Überträgt die sortierten Datensätze aus der Arbeitsdatei in die Ausgabedatei.
Schließt die Eingabedatei und die Ausgabedatei und löscht die Arbeitsdatei.
Example
Im folgenden Beispiel sind INPUT1 und INPUT2 die Eingabedateien, die in aufsteigender Reihenfolge zusammengeführt werden sollen.
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 um das obige COBOL-Programm auszuführen -
//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
Wenn Sie das obige Programm kompilieren und ausführen, wird das folgende Ergebnis erzielt:
Merge Successful
Ab sofort haben wir die Verwendung von Dateien in COBOL gelernt. Nun werden wir diskutieren, wie ein COBOL-Programm mit DB2 interagiert. Es beinhaltet die folgenden Begriffe -
- Embedded SQL
- DB2-Anwendungsprogrammierung
- Hostvariablen
- SQLCA
- SQL-Abfragen
- Cursors
Embedded SQL
Eingebettete SQL-Anweisungen werden in COBOL-Programmen verwendet, um Standard-SQL-Operationen auszuführen. Eingebettete SQL-Anweisungen werden vom SQL-Prozessor vorverarbeitet, bevor das Anwendungsprogramm kompiliert wird. COBOL ist bekannt alsHost Language. COBOL-DB2-Anwendungen sind solche Anwendungen, die sowohl COBOL als auch DB2 enthalten.
Eingebettete SQL-Anweisungen funktionieren mit einigen geringfügigen Änderungen wie normale SQL-Anweisungen. Beispielsweise wird die Ausgabe einer Abfrage an einen vordefinierten Satz von Variablen gerichtet, auf die verwiesen wirdHost Variables. Eine zusätzliche INTO-Klausel wird in die SELECT-Anweisung eingefügt.
DB2-Anwendungsprogrammierung
Die folgenden Regeln müssen beim Codieren eines COBOL-DB2-Programms beachtet werden:
Alle SQL-Anweisungen müssen zwischen begrenzt werden EXEC SQL und ENDEXEC..
SQL-Anweisungen müssen in Bereich B codiert werden.
Alle Tabellen, die in einem Programm verwendet werden, müssen im Abschnitt WorkingStorage deklariert werden. Dies geschieht mit demINCLUDE Erklärung.
Alle SQL-Anweisungen außer INCLUDE und DECLARE TABLE müssen in der Prozedurabteilung erscheinen.
Hostvariablen
Hostvariablen werden zum Empfangen von Daten aus einer Tabelle oder zum Einfügen von Daten in eine Tabelle verwendet. Hostvariablen müssen für alle Werte deklariert werden, die zwischen dem Programm und dem DB2 übergeben werden sollen. Sie sind im Abschnitt Arbeitsspeicher deklariert.
Hostvariablen können keine Gruppenelemente sein, sie können jedoch in der Hoststruktur zusammengefasst werden. Sie können nicht seinRenamed oder Redefined. Stellen Sie Hostvariablen mit SQL-Anweisungen ein a vorancolon (:)..
Syntax
Im Folgenden finden Sie die Syntax zum Deklarieren von Hostvariablen und zum Einfügen von Tabellen in den Abschnitt Arbeitsspeicher.
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 ist ein SQL-Kommunikationsbereich, über den DB2 die Rückmeldung der SQL-Ausführung an das Programm weiterleitet. Es teilt dem Programm mit, ob eine Ausführung erfolgreich war oder nicht. Es gibt eine Reihe von vordefinierten Variablen unter SQLCA wieSQLCODEwelches den Fehlercode enthält. Der Wert '000' in SQLCODE gibt eine erfolgreiche Ausführung an.
Syntax
Im Folgenden finden Sie die Syntax zum Deklarieren einer SQLCA im Abschnitt "Arbeitsspeicher".
DATA DIVISION.
WORKING-STORAGE SECTION.
EXEC SQL
INCLUDE SQLCA
END-EXEC.
SQL-Abfragen
Nehmen wir an, wir haben eine Tabelle mit dem Namen 'Student', die die Studenten-ID, den Studenten-Namen und die Studenten-Adresse enthält.
Die STUDENT-Tabelle enthält die folgenden Daten:
Student Id Student Name Student Address
1001 Mohtashim M. Hyderabad
1002 Nishant Malik Delhi
1003 Amitabh Bachan Mumbai
1004 Chulbul Pandey Lucknow
Das folgende Beispiel zeigt die Verwendung von SELECT Abfrage in einem COBOL-Programm -
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 um das obige COBOL-Programm auszuführen -
//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
/*
Wenn Sie das obige Programm kompilieren und ausführen, wird das folgende Ergebnis erzielt:
1004 Chulbul Pandey Lucknow
Das folgende Beispiel zeigt die Verwendung von INSERT Abfrage in einem COBOL-Programm -
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 um das obige COBOL-Programm auszuführen -
//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
/*
Wenn Sie das obige Programm kompilieren und ausführen, wird das folgende Ergebnis erzielt:
Record Inserted Successfully
1005 TutorialsPoint Hyderabad
Das folgende Beispiel zeigt die Verwendung von UPDATE Abfrage in einem COBOL-Programm -
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 um das obige COBOL-Programm auszuführen -
//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
/*
Wenn Sie das obige Programm kompilieren und ausführen, wird das folgende Ergebnis erzielt:
Record Updated Successfully
Folgende example zeigt die Verwendung von DELETE Abfrage in einem COBOL-Programm -
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 um das obige COBOL-Programm auszuführen -
//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
/*
Wenn Sie das obige Programm kompilieren und ausführen, wird das folgende Ergebnis erzielt:
Record Deleted Successfully
Cursor
Cursor werden verwendet, um mehrere Zeilen gleichzeitig zu verarbeiten. Dies sind Datenstrukturen, die alle Ergebnisse einer Abfrage enthalten. Sie können im Abschnitt Arbeitsspeicher oder in der Verfahrensabteilung definiert werden. Im Folgenden sind die mit Cursor verbundenen Vorgänge aufgeführt:
- Declare
- Open
- Close
- Fetch
Cursor deklarieren
Die Cursordeklaration kann im Bereich Arbeitsspeicher oder in der Verfahrensabteilung erfolgen. Die erste Anweisung ist die DECLARE-Anweisung, bei der es sich um eine nicht ausführbare Anweisung handelt.
EXEC SQL
DECLARE STUDCUR CURSOR FOR
SELECT STUDENT-ID, STUDENT-NAME, STUDENT-ADDRESS FROM STUDENT
WHERE STUDENT-ID >:WS-STUDENT-ID
END-EXEC.
Öffnen
Vor Verwendung eines Cursors muss die Open-Anweisung ausgeführt werden. Die Open-Anweisung bereitet SELECT für die Ausführung vor.
EXEC SQL
OPEN STUDCUR
END-EXEC.
Schließen
Die Anweisung close gibt den gesamten vom Cursor belegten Speicher frei. Vor dem Beenden eines Programms muss unbedingt ein Cursor geschlossen werden.
EXEC SQL
CLOSE STUDCUR
END-EXEC.
Holen
Die Fetch-Anweisung identifiziert den Cursor und fügt den Wert in die INTO-Klausel ein. Eine Fetch-Anweisung wird in einer Schleife codiert, wenn jeweils eine Zeile angezeigt wird.
EXEC SQL
FETCH STUDCUR
INTO :WS-STUDENT-ID, :WS-STUDENT-NAME, WS-STUDENT-ADDRESS
END-EXEC.
Das folgende Beispiel zeigt die Verwendung des Cursors zum Abrufen aller Datensätze aus der STUDENT-Tabelle.
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 um das obige COBOL-Programm auszuführen -
//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
/*
Wenn Sie das obige Programm kompilieren und ausführen, wird das folgende Ergebnis erzielt:
1001 Mohtashim M. Hyderabad
1002 Nishant Malik Delhi
1003 Amitabh Bachan Mumbai
1004 Chulbul Pandey Lucknow