Introduction ADASQL
Introduction ADASQL
to ADASQL
WH&O International
Wellesley, Massachusetts
7th Edition
Copyright ©2007 by WH&O International
All rights reserved.
Printed in the United States of America
It is illegal under Federal and International Copyright Laws and subject to statutory damages,
to copy, reproduce or transmit all or part of this work in any form or by means electronically
or mechanically, including, but not limited to photocopying, print, electronic information
storage and retrieval systems on n\magnetic tape and/or disk or other media, without
written permission from the publisher, WH&O International, Wellesley, MA 02482.
ADABAS, Natural, Predict, SuperNatural and Construct are registered trademarks of Software AG USA and Software AG of
Darmstadt, Germany.
IBM, TSO, CICS, and DB2 are registered trademarks of International Business Machines.
Data Dictionary
Generated Cross Reference
Program Facility
Host
Compiler
Object
Module
LINKAGE
EDITOR
Load ADABAS
Module
EXEC ADABAS
statements
END-EXEC
Command Syntax;
Record Buffer
ISN Buffer
EXEC ADABAS
ADABAS SQL-statement
END-EXEC
IDENTIFICATION DIVISION.
PROGRAM ID. MRSTMSQL.
:
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
DATA DIVISION.
WORKING-STORAGE SECTION.
EXEC ADABAS
BEGIN DECLARE SECTION
END-EXEC
EXEC ADABAS
SELECT PERSONNEL-ID, NAME, CITY
FROM EMPLOYEES
WHERE CITY = 'BOSTON'
END-EXEC
:
PROCEDURE DIVISION
:
EXEC ADABAS
statement-name
[DECLARE cursor-name CURSOR [FOR]]
⎡SELECT⎧⎨select-list⎫⎬⎤
⎣ ⎩ * ⎭⎦
FROM file [alias],...
[WHERE search-criteria]
⎡ ⎡INDEXED= YN ⎧ ⎫
⎨ ⎬ ⎤⎤
⎢ ⎢COND-NAME= Y ⎩ ⎭
⎧ ⎫
⎨ ⎬
⎥⎥
⎢ ⎢HOLD [RETURN]N ⎩ ⎭
⎥⎥
⎢ ⎢PASSWORD=⎧⎨variable ⎫⎬ ⎥⎥
constant
⎢ ⎢ ⎧
⎩:variable⎭
constant ⎫
⎥⎥
⎢ ⎢CIPHER=⎨⎩variable ⎬
:variable⎭ ⎥⎥
⎢OPTIONS ⎢ISNSIZE=length constant
:variable ⎥⎥
⎧
⎨
⎩
⎫
⎬
⎭
⎢ ⎢SAVE
SEQUENCE
⎥⎥
⎢ ⎢ISN=value
PREFIX=prefix
⎥⎥
⎢ ⎢SUFFIX=suffix
Y
⎥⎥
⎢ ⎢MAXTIME=ss ⎥⎥
⎧ ⎫
STATIC= N ⎨ ⎬
⎩ ⎭
⎢ ⎢AUTODBID ⎥⎥
⎣ ⎣ DBID=database-name
⎦⎦
⎡ORDER BY descriptor…3⎡⎧⎨DESC[ENDING]⎫⎬⎤⎤
⎣ ⎣⎩ASC[ENDING] ⎭⎦⎦
[GROUP BY descriptor]
END-EXEC
Retrieval Types
⎧[FIND]
READ [PHYSICAL [SEQUENCE]]⎫
⎪READ LOGICAL ⎪
statement-name
⎨HISTOGRAM
READ ISN
⎬
⎪COMPARE [ISN [LIST[S]] ⎪
SORT [ISN [LIST[S]]
⎩ FIND COUPLED
⎭
If only the first record is to be retrieved, an ISN list will be
produced and the data from the first record will be retrieved.
If all the records meeting the search criteria are to be
processed, the Retrieval statement specifies the criteria, an OPEN
statement produces the ISN list, the FETCH statement retrieves the
records, and a CLOSE statement releases the ISN list.
FIND
Produces an ISN list for all the records which satisfy the
given search criteria. If the keyword FOR is not coded in the
DECLARE clause, then the data for the first record in the ISN list is
retrieved.
If only the first descriptor in the file is needed, the DE-
CLARE clause may be omitted. If multiple records are to be
processed, the FIND must be followed by the OPEN, FETCH, and
CLOSE statements.
The only OPTIONS available for a FIND are HOLD,
PASSWORD, CIPHER, ISNSIZE, and SAVE.
The list may be sorted in ORDER BY a descriptor.
The GROUP BY clause is not permitted for a FIND.
The search criteria for the FIND is specified as:
WHERE search-criteria
= search-expression [{AND
OR } search-expression ] …
EQ
⎧⎪ ⎧⎧ GT
⎫ ⎫⎫⎪
⎪ ⎪ GE
LT ⎪ ⎪⎪
⎪descriptor ⎨ LE
⎬
⎨ ⎬⎬
= value
⎨ ⎪
>
>= ⎪
⎪ ⎪ ⎩ <
<= ⎭ ⎪⎪
⎪
⎩ ⎩ BETWEEN value AND value [except]
IN (value…) ⎭⎪⎭
SETID=cursor-name
{field
field NOT BETWEEN value AND value}
NOT = value
READ LOGICAL
The WHERE clause specifies the starting point for the read
of a descriptor.
Boolean logic may be performed on the ISN lists.
READ ISN
⎪⎧ { constant
WHERE ⎨ISN= :variable } ⎪⎫
⎬
⎩⎪CURRENT OF cursor-name1⎭⎪
HISTOGRAM
⎧⎪AND ⎫⎪
WHERE CURSOR = cursor-name ⎨OR ⎬ CURSOR = cursor-
⎩⎪AND NOT⎭⎪
name
FIND COUPLED
DECLARE Clause
(FETCH in SQL), the pointer (cursor) is moved down the table and
so on.
Cursor-name generates an ADABAS Command-ID.
Cursor-name may be up to 4 characters in length.
If multiple records are to be processed, the keyword FOR
must be specified. This statement must then be used in conjunction
with the OPEN and FETCH statements.
If a single record is to be processed, the DECLARE clause
may be omitted.
SELECT Clause
[ SELECT {field-list
* }]
Specifies which fields are to be retrieved. The field names in
the select-list must be specified by the name defined in the data
dictionary. Fields not in the select-list are not placed in the Record
Buffer.
SELECT FULL-NAME
SELECT ADDRESS-LINE
SELECT ADDRESS-LINE(1)
SELECT ADDRESS-LINE(:variable1)
SELECT ADDRESS-LINE(1-3)
SELECT ADDRESS-LINE(LAST)
SELECT ADDRESS-LINE(1-LAST)
SELECT SALARY(1)
SELECT SALARY(:variable)
SELECT SALARY(1-12)
SELECT SALARY(C-COUNT)
SELECT INCOME(C-COUNT)
SELECT *
FROM Clause
WHERE Clause
[ WHERE search-criteria ]
OPTIONS Clause
⎡COND-NAME=N{}Y}
{ Y
⎡ INDEXED=
⎤⎤
⎢ ⎢
HOLD=[RETURN]
N
⎥⎥
⎢ ⎢PASSWORD= variable
constant
⎪⎧
⎨ ⎥⎥
⎪⎫
⎬
⎢ ⎢CIPHER= constant ⎥⎥
⎩⎪
:variable ⎭⎪
⎪⎧ ⎪⎫
⎢OPTIONS ⎢ISNSIZE=length ⎥⎥
⎨
variable ⎬
⎪⎩
:variable ⎪⎭
{constant }
⎢ ⎢SAVE :variable
⎥⎥
⎢ ⎢ISN=value
SEQUENCE
⎥⎥
⎢ ⎢SUFFIX=suffix ⎥⎥
PREFIX=prefix
STATIC={N}
Y
⎢ ⎢MAXTIME=ss ⎥⎥
⎣ ⎣DBID=database-name
AUTODBID
⎦⎦
The SAVE option is used to retain the ISN list. The saved list
will be deleted when a subsequent FIND with the same name is
encountered; when a CLOSE is executed; or when a transaction
time limit or non-activity time limit is reached. This can be
specified for a COMPARE, FIND, or SORT statement.
If the SEQUENCE option is specified, the record with the
specified ISN (or next higher ISN) will be retrieved. The ISN of the
retrieved record is placed in the ISN field in the Record Buffer. If
the end of file is encountered, ADACODE will indicate the end-of-
file status. This can be specified for a READ ISN statement only.
The ISN option can be specified for a READ PHYSICAL
SEQUENCE or READ LOGICAL statement. For a READ
PHYSICAL SEQUENCE, it indicates the ISN for the first record to
be read. If a record does not exist for that ISN, the record with the
next higher ISN will be retrieved. For a READ LOGICAL, it
indicates the ISN for the first record to be read from the set which
satisfies the WHERE clause. If the value is specified as a host
variable, the syntax is to place a “:” prior to the variable name in
the ISN clause.
ORDER BY Clause
GROUP BY Clause
[ GROUP BY descriptor ]
OPEN Statement
EXEC ADABAS
OPEN cursor-name
END-EXEC
FETCH Statement
EXEC ADABAS
FETCH cursor-name
END-EXEC
FETCH retrieves the data values from the data base and places the
data into the Record Buffer. An OPEN statement must previously
have been executed.
Each subsequent FETCH statement reads the next record
into the Record Buffer until all records have been exhausted.
CLOSE Statement
EXEC ADABAS
CLOSE [ cursor-name ]
END-EXEC
DELETE Statement
EXEC ADABAS
DELETE
[ DECLARE cursor-name CURSOR ]
FROM file
WHERE {
ISN=value
CURRENT OF cursor-name }
⎡ ⎡ {
constant
PASSWORD= :variable } ⎤⎤
⎢ OPTIONS ⎢ {constant
CIPHER= :variable } ⎥⎥
⎣ ⎣
STATUS ⎦⎦
END-EXEC
DECLARE Clause
FROM Clause
FROM filename
WHERE Clause
WHERE {ISN=value
CURRENT OF cursor-name}
OPTIONS Clause
⎡PASSWORD={:variable}⎤⎤
constant
⎡
⎢ OPTIONS ⎢CIPHER={constant } ⎥⎥
⎣ ⎣STATUS :variable ⎦⎦
PASSWORD must be specified if the file is secured through
ADABAS Security unless the password is specified in the
CONNECT statement. The value specified is the ADABAS
password. If the value is specified as a constant, it will print in a
listing. If this is not desirable, it may be specified as a variable. The
syntax for specifying a variable is to place a “:” prior to the variable
name in the PASSWORD clause.
CIPHER must be specified if the file has been encrypted. The
value specified is for the cipher code. If the value is specified as a
constant, it will print in a listing. If this is not desirable, it may be
specified as a variable. The syntax for specifying a variable is to
place a “:” prior to the variable name in the CIPHER clause.
INSERT Statement
EXEC ADABAS
INSERT INTO file [alias]
[ DECLARE cursor-name CURSOR ]
[ WHERE ISN=value, ]
⎪⎧field
⎧SET ⎨
{ constant
}
⎪⎫
⎬ ⎫
⎨ ⎩⎪field = :variable ⎭⎪ ⎬
⎩field,… VALUES ({constant
} )
:variable ,… ⎭
⎧⎪constant ⎫⎪
⎡ ⎡ PASSWORD=⎨variable ⎬
⎤⎤
⎢ OPTIONS
⎢ { constant
CIPHER= :variable }⎥ ⎥
⎩⎪:variable⎭⎪
⎢ ⎢ PREFIX=prefix ⎥⎥
⎣ ⎣ SUFFIX=suffix
STATUS ⎦⎦
END-EXEC
INTO Clause
This clause specifies the name of the file INTO which data is
to be inserted. Alias specifies the name of the Record Buffer. If the
alias is not supplied, the name of the file is used as the name of the
Record Buffer.
DECLARE Clause
WHERE Clause
[ WHERE {ISN=value
CURRENT OF cursor-name}]
SET Clause
field
⎧SET ⎪⎧⎨⎪field = {constant}⎪⎫⎬⎪ ⎫
⎨ ⎩ variable ⎭ ⎬
⎩field,… VALUES ({constant
variable},…) ⎭
The SET clause indicates the fields to be inserted as part of
the record to be added and optionally initializes these fields.
The field = constant/variable is used to initialize the value of
the field. The value assigned may be a constant or literal or the
value of a variable defined in the host language program. Variable
name usage:
⎧⎪ :variable [(index)]
:root.variable [(index)]
⎫⎪ PL/1-type
⎨ ⎬
⎩⎪ :variable [(index)] { }
OF
IN root ⎭⎪ COBOL-type
[(integer constant
:variable )]
OPTIONS Clause
⎡PASSWORD={ :variable}⎤⎤
constant
⎡
⎢ OPTIONS ⎢CIPHER={:variable} ⎥⎥
constant
⎢ ⎢PREFIX=prefix ⎥⎥
⎣ ⎣STATUS
SUFFIX=suffix
⎦⎦
PASSWORD must be specified if the file is secured through
ADABAS Security unless the password is specified in the
CONNECT statement. The value specified is the ADABAS
password. If the value is specified as a constant, it will print in a
listing. If this is not desirable, it may be specified as a variable. The
syntax for specifying a host variable is to place a “:” prior to the
variable name in the PASSWORD clause.
CIPHER must be specified if the file has been encrypted.
The value specified is for the cipher code. If the value is specified
as a constant, it will print in a listing. If this is not desirable, it may
be specified as a variable. The syntax for specifying a variable is to
place a “:” prior to the variable name in the CIPHER clause.
If the STATUS option is specified, data protection infor-
mation is written to the Data Protection Log.
If PREFIX is specified, field names generated in the Record
Buffer will be prefixed with the value coded.
If SUFFIX is specified, field names generated in the Record
Buffer will be suffixed with the value coded.
PREFIX or SUFFIX may be coded in an OPTIONS Clause,
global OPTIONS parameter or the PREDICT data dictionary.
UPDATE Statement
EXEC ADABAS
UPDATE file [alias]
[ DECLARE cursor-name CURSOR ]
FROM file
WHERE { ISN=value
CURRENT OF cursor-name }
⎧⎪field
⎧SET ⎨
{ constant
⎫⎪
}⎬ ⎫
⎨ ⎪⎩field = :variable ⎪⎭ ⎬
⎩field,… VALUES ({constant
:variable ,…} ) ⎭
⎡ ⎡ {constant
PASSWORD= :variable } ⎤⎤
⎢ ⎢ {constant
OPTIONS CIPHER= :variable } ⎥⎥
⎢ ⎢ PREFIX=prefix ⎥⎥
⎣ ⎣ SUFFIX=suffix
STATUS ⎦⎦
END-EXEC
FILE Clause
DECLARE Clause
WHERE Clause
WHERE {ISN=value
CURRENT OF cursor-name}
SET Clause
field
⎧SET ⎪⎧⎨⎪field = {constant }⎪⎫⎬⎪ ⎫
⎨ ⎩ :variable ⎭ ⎬
⎩field,… VALUES ({constant
:variable},…) ⎭
The SET clause indicates the fields to be updated as part of
the record to be updated and optionally supplies the new values for
these fields.
The field = constant / variable is used to initialize the value
of the field. The value assigned may be a constant or literal or the
value of a variable defined in the host language program. Variable
name usage:
:variable [(index)]
⎪⎧ :root.variable [(index)] ⎪⎫ PL/1-type
⎨ ⎬
⎩⎪ :variable [(index)] { }
OF
IN root ⎭⎪ COBOL-type
[(integer constant
:variable )]
OPTIONS Clause
⎡PASSWORD={ :variable}⎤⎤
constant
⎡
⎢ OPTIONS ⎢CIPHER={:variable} ⎥⎥
constant
⎢ ⎢PREFIX=prefix ⎥⎥
⎣ ⎣STATUS
SUFFIX=suffix
⎦⎦
PASSWORD must be specified if the file is secured through
ADABAS Security unless the password is specified in the
CONNECT statement. The value specified is the ADABAS
password. If the value is specified as a constant, it will print in a
listing. If this is not desirable, it may be specified as a variable. The
syntax for specifying a host variable is to place a “:” prior to the
variable name in the PASSWORD clause.
CIPHER must be specified if the file has been encrypted.
The value specified is for the cipher code. If the value is specified as
a constant, it will print in a listing. If this is not desirable, it may be
specified as a variable. The syntax for specifying a variable is to
place a “:” prior to the variable name in the CIPHER clause.
If the STATUS option is specified, data protection infor-
mation is written to the Data Protection Log.
If PREFIX is specified, field names generated in the Record
Buffer will be prefixed with the value coded.
If SUFFIX is specified, field names generated in the Record
Buffer will be suffixed with the value coded.
PREFIX or SUFFIX may be coded in an OPTIONS Clause,
global OPTIONS parameter or the PREDICT data dictionary.
EXEC ADABAS
COMMIT WORK [USERDATA = value]
END-EXEC
EXEC ADABAS
ROLLBACK WORK [WITHOUT filename]
END-EXEC
EXEC ADABAS
READ USERDATA
INTO variable
[USERID = value]
END-EXEC
CHECKPOINT Statement
EXEC ADABAS
⎪⎧USER=value ⎪⎫
CHECKPOINT ⎨SYNC2 ⎬
⎩⎪SYNC3 [USERDATA=value]⎭⎪
END-EXEC
BEGIN Statement
EXEC ADABAS
BEGIN DECLARE SECTION
END-EXEC
IDENTIFICATION DIVISION.
PROGRAM-ID. EXBEGIN.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
DATA DIVISION.
WORKING-STORAGE SECTION.
EXEC ADABAS
BEGIN DECLARE SECTION
END-EXEC
:
CONNECT Statement
EXEC ADABAS
CONNECT
[userid]
[WITH password]
[ACC=file,…]
[UPD=file,…]
[EXU=file,…]
[CLU=file,…]
[AND USERDATA INTO variable]
OPTIONS [DBID=database-name]
⎡ [MAXISN=value] ⎤
⎢ [MAXHOLD=value
[MAXCID=value] ⎥
⎢ [MAXTIME] ⎥
⎣ [TT=value]
[TNA=value] ⎦
END-EXEC
OPTIONS Clause
COPY Statement
EXEC ADABAS
COPY [FILE=]file-name [[MEMBER=]member-name]
END-EXEC
DBCLOSE Statement
EXEC ADABAS
DBCLOSE [USERDATA=value]
[OPTIONS DBID=database-name]
END-EXEC
HOLD Statement
EXEC ADABAS
HOLD cursor-name
[OPTIONS RETURN]
END-EXEC
RELEASE Statement
EXEC ADABAS
RELEASE cursor-name
[FOR [FORMAT][SEQ][LIST]]
END-EXEC
EXEC ADABAS
RELEASE ISN cursor-name
END-EXEC
RESTORE Statement
EXEC ADABAS
RESTORE cursor-name :variable
END-EXEC
SAVE Statement
EXEC ADABAS
SAVE cursor-name :variable
END-EXEC
TRACE Statement
EXEC ADABAS
TRACE { }
ON
OFF
END-EXEC
EXEC ADABAS
WRITE TO LOG
USERDATA=:value
[STATUS]
END-EXEC
On-line Processing
COM-PLETE
CICS
Global Parameters
Shell Examples
Data Retrieval
EXEC ADABAS
BEGIN DECLARE SECTION
END-EXEC
.
.
EXEC ADABAS
DECLARE PERS CURSOR FOR
SELECT LAST-NAME,
FIRST-NAME,
MIDDLE-INIT,
SEX,
SALARY
FROM PERSONNEL
WHERE LAST-NAME='HARRIS'
END-EXEC
.
.
EXEC ADABAS
OPEN PERS
END-EXEC
.
.
EXEC ADABAS
FETCH PERS
END EXEC
.
.
PERFORM READ-PERS
UNTIL ADACODE=3.
.
.
EXEC ADABAS
CLOSE PERS
END-EXEC
STOP RUN.
.
.
READ-PERS.
DISPLAY LAST-NAME FIRST-NAME
MIDDLE-INIT AGE SEX
SALARY.
EXEC ADABAS
FETCH PERS
END-EXEC
Data Creation
EXEC ADABAS
BEGIN DECLARE SECTION
END-EXEC
.
.
EXEC ADABAS
INSERT INTO PERSONNEL
SET LAST-NAME='HARRIS'
FIRST-NAME='CODY'
MIDDLE-INIT='A'
SEX='M'
SALARY=146500
END-EXEC
.
.
EXEC ADABAS
COMMIT WORK
END-EXEC
Data Modification
EXEC ADABAS
BEGIN DECLARE SECTION
END-EXEC
.
.
EXEC ADABAS
DECLARE PERS CURSOR
SELECT LAST-NAME,
FIRST-NAME,
MIDDLE-INIT,
SEX,
SALARY
FROM PERSONNEL
WHERE LAST-NAME='HARRIS'
OPTIONS HOLD
END-EXEC
.
.
EXEC ADABAS
UPDATE PERSONNEL
SET SALARY=54500
WHERE CURRENT OF PERS
END-EXEC
.
.
EXEC ADABAS
COMMIT WORK
END-EXEC
.
.
EXEC ADABAS
DBCLOSE
END-EXEC
Data Deletion
EXEC ADABAS
BEGIN DECLARE SECTION
END-EXEC
.
.
EXEC ADABAS
DECLARE PERS CURSOR FOR
FROM PERSONNEL
WHERE PERSONNEL-NUMBER=070187
OPTIONS HOLD
END-EXEC
.
.
EXEC ADABAS
FETCH PERS
END-EXEC
.
.
EXEC ADABAS
DELETE
WHERE CURRENT OF PERS
END-EXEC
.
.
EXEC ADABAS
COMMIT WORK
END-EXEC
IDENTIFICATION DIVISION.
PROGRAM-ID. MRSTMEX1.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 HEADER-LINE-1.
02 FILLER PIC X(10) VALUE '........MA'.
02 FILLER PIC X(10) VALUE 'KE........'.
02 FILLER PIC X(10) VALUE '........MO'.
02 FILLER PIC X(10) VALUE 'DEL.......'.
02 FILLER PIC X(10) VALUE '....COLOR.'.
02 FILLER PIC X(10) VALUE '...YEAR.RE'.
02 FILLER PIC X(10) VALUE 'GISTRATION'.
EXEC ADABAS
BEGIN DECLARE SECTION
END-EXEC
EXEC ADABAS
DECLARE CARS CURSOR FOR
SELECT MAKE, MODEL, COLOR, YEAR,
REG-NUM
FROM VEHICLES
WHERE MAKE = 'PORSCHE'
END-EXEC
PROCEDURE DIVISION.
* * * * * * * * * * * * * * * * * * * *
* OPEN ADABAS FILE *
* * * * * * * * * * * * * * * * * * * *
EXEC ADABAS
OPEN CARS
END-EXEC
DISPLAY HEADER-LINE-1.
* * * * * * * * * * * * * * * * * * * *
* READ (FIRST) ADABAS DATA (RECORD) *
* * * * * * * * * * * * * * * * * * * *
EXEC ADABAS
FETCH CARS
END-EXEC
PERFORM READ-CARS UNTIL ADACODE = 3.
* * * * * * * * * * * * * * * * * * * *
* CLOSE ADABAS FILE *
* * * * * * * * * * * * * * * * * * * *
EXEC ADABAS
CLOSE CARS
END-EXEC
STOP RUN.
READ-CARS.
DISPLAY MAKE MODEL COLOR YEAR REG-NUM.
* * * * * * * * * * * * * * * * * * * *
* READ MORE ADABAS DATA *
* * * * * * * * * * * * * * * * * * * *
EXEC ADABAS
FETCH CARS
END-EXEC
IDENTIFICATION DIVISION.
PROGRAM-ID. MRSTMEX1.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 HEADER-LINE-1.
02 FILLER PIC X(10) VALUE '........MA'.
02 FILLER PIC X(10) VALUE 'KE........'.
02 FILLER PIC X(10) VALUE '........MO'.
02 FILLER PIC X(10) VALUE 'DEL.......'.
02 FILLER PIC X(10) VALUE '....COLOR.'.
02 FILLER PIC X(10) VALUE '...YEAR.RE'.
02 FILLER PIC X(10) VALUE 'GISTRATION'.
*
* EXEC ADABAS
* BEGIN DECLARE SECTION
* END-EXEC
*
01 ADACODE PIC 9(4) COMP VALUE 0.
01 CONTROL-BLOCKOPN.
03 FILLER1OPN PIC XX VALUE 'AS'.
03 COMMAND-CODEOPN PIC XX VALUE SPACE.
01 VALUE-BUFCARS.
02 V-MAKE-01 PIC X(20) VALUE 'PORSCHE'.
01 ISN-BUFCARS.
02 ISN-BUFVECCARS OCCURS 1 PIC 9(9) COMP.
01 CONTROL-BLOCKCARS.
03 FILLER1CARS PIC XX VALUE 'AS'.
03 COMMAND-CODECARS PIC XX VALUE SPACE.
03 COMMAND-IDCARS PIC X(4) VALUE 'CARS'.
03 FILE-NUMBERCARS PIC 9(4) COMP VALUE 0.
03 FILLER REDEFINES FILE-NUMBEROPN.
04 DBIDCARS PIC X.
04 FILLER PIC X.
03 RESPONSE-CODECARS PIC 9(4) COMP VALUE 0.
03 ISNOPN PIC 9(9) COMP VALUE 0.
03 ISN-LOWER-LIMIT PIC 9(9) COMP VALUE 0.
03 ISN-QUANTITYOPN PIC 9(9) COMP VALUE 0.
03 FORMAT-BUFFER-LENGTHCARS PIC 9(4) COMP VALUE 1.
03 RECORD-BUFFER-LENGTHCARS PIC 9(4) COMP VALUE 1.
03 SEARCH-BUFFER-LENGTHCARS PIC 9(4) COMP VALUE 12.
03 VALUE-BUFFER-LENGTHCARS PIC 9(4) COMP VALUE 7.
03 ISN-BUFFER-LENGTHCARS PIC 9(4) COMP VALUE 4.
03 COMMAND-OPTION-1CARS PIC X VALUE SPACE.
03 COMMAND-OPTION-2CARS PIC X VALUE SPACE.
03 ADDITIONS-1CARS VALUE SPACE.
04 ADDITIONS-1-12CARS PIC XX.
04 FILLER PIC XX.
04 ADDITIONS-1-58CARS PIC X(4).
03 FILLER REDEFINES ADDITIONS-1CARS.
04 ADDITIONS-1-BNCARS PIC 9(4) COMP.
04 FILLER PIC X(6).
03 ADDITIONS-2CARS PIC X(4) VALUE SPACE.
03 ADDITIONS-3CARS PIC X(4) VALUE SPACE.
03 ADDITIONS-4CARS PIC X(4) VALUE SPACE.
03 ADDITIONS-5CARS.
04 ADDITIONS-5-BNCARS PIC 9(9) COMP VALUE 0.
04 ADDITIONS-5-58CARS PIC X(4) VALUE SPACE.
03 FILLER REDEFINES ADDITIONS-5CARS.
04 ADDITIONS-5-1CARS PIC X.
04 ADDITIONS-5-28CARS PIC X(7).
03 COMMAND-TIMECARS PIC 9(9) COMP.
03 USER-AREACARS PIC X(4) VALUE 'AS'.
01 ISNSIZECARS PIC 9(9) COMP.
01 ISNMORECARS PIC 9(9) COMP.
01 ISNINDCARS PIC 9(4) COMP.
01 EOF-COBCARS PIC 9 VALUE 0.
88 EOFCARS VALUE 1.
88 NOT-EOFCARS VALUE 0.
01 SAVE-DBID-1CARS PIC 9(4) COMP.
01 SAVE-DBID-DEFCARS REDEFINES SAVE-DBID-1CARS.
02 FILLER PIC X.
02 SAVE-DBIDCARS PIC X.
01 FORMAT-BUFCARS.
02 FILLER PIC X(45) VALUE
'AA,020,A,AB,020,A,AC,010,A,AD,002,U,AE,010,A.'.
01 SEARCH-BUFCARS.
02 FILLER PIC X(01) VALUE ' '.
01 CARS.
02 MAKE PIC X(20).
02 MODEL PIC X(20).
IDENTIFICATION DIVISION.
PROGRAM-ID. MRSTMEX2.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 HEADER-LINE-1.
02 FILLER PIC X(10) VALUE 'PERSONNEL.'.
02 FILLER PIC X(10) VALUE '.......NAM'.
02 FILLER PIC X(10) VALUE 'E.........'.
02 FILLER PIC X(10) VALUE '..FIRST-NA'.
02 FILLER PIC X(10) VALUE 'ME..M..ANN'.
02 FILLER PIC X(10) VALUE 'UAL.......'.
02 FILLER PIC X(10) VALUE '..........'.
02 FILLER PIC X(10) VALUE '..JOB TITL'.
02 FILLER PIC X(10) VALUE 'E.........'.
02 FILLER PIC X(10) VALUE 'DEPT......'.
01 HEADER-LINE-2.
02 FILLER PIC X(10) VALUE '.NUMBER...'.
02 FILLER PIC X(30) VALUE SPACES.
02 FILLER PIC X(10) VALUE '....I..SAL'.
02 FILLER PIC X(10) VALUE 'ARY....BON'.
02 FILLER PIC X(10) VALUE 'US........'.
02 FILLER PIC X(20) VALUE SPACES.
02 FILLER PIC X(10) VALUE 'CODE......'.
EXEC ADABAS
BEGIN DECLARE SECTION
END-EXEC
EXEC ADABAS
DECLARE EMPS CURSOR FOR
SELECT PERSONNEL-ID, NAME,
FIRST-NAME, MIDDLE-NAME
SALARY(1), BONUS(1(1)),<--- watch this type of code
JOB-TITLE, DEPT
FROM EMPLOYEES
WHERE CITY = 'PARIS'<--- or as a variable CITY = :var
END-EXEC
PROCEDURE DIVISION.
* * * * * * * * * * * * * * * * * * * *
* OPEN ADABAS FILE *
* * * * * * * * * * * * * * * * * * * *
EXEC ADABAS
OPEN EMPS
END-EXEC
DISPLAY HEADER-LINE-1.
DISPLAY HEADER-LINE-2.
* * * * * * * * * * * * * * * * * * * *
* READ (FIRST) ADABAS DATA (RECORD) *
* * * * * * * * * * * * * * * * * * * *
EXEC ADABAS
FETCH EMPS
END-EXEC
PERFORM READ-EMPS UNTIL ADACODE = 3.<---response code 3 = end of file
* * * * * * * * * * * * * * * * * * * *
* CLOSE ADABAS FILE *
* * * * * * * * * * * * * * * * * * * *
EXEC ADABAS
CLOSE EMPS
END-EXEC
STOP RUN.
READ-EMPS.
DISPLAY PERSONNEL-ID LAST-NAME
FIRST-NAME MIDDLE-NAME
SALARY(1) BONUS(1,1)
JOB-TITLE DEPT.
* * * * * * * * * * * * * * * * * * * *
* READ MORE ADABAS DATA *
* * * * * * * * * * * * * * * * * * * *
EXEC ADABAS
FETCH EMPS
END-EXEC
IDENTIFICATION DIVISION.
PROGRAM-ID. MRSTMEX3.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 HEADER-LINE-1.
02 FILLER PIC X(10) VALUE '.......NAM'.
02 FILLER PIC X(10) VALUE 'E.........'.
IDENTIFICATION DIVISION.
PROGRAM-ID. MRSTMEX4.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 HEADER-LINE-0.
02 FILLER PIC X(20) VALUE SPACE.
02 FILLER PIC X(15) VALUE 'PARIS RESIDENTS'.
02 FILLER PIC X(25) VALUE SPACE.
01 HEADER-LINE-1.
02 FILLER PIC X(10) VALUE '.......NAM'.
02 FILLER PIC X(10) VALUE 'E.........'.
02 FILLER PIC X(10) VALUE SPACE.
02 FILLER PIC X(10) VALUE 'JOB TITLE.'.
02 FILLER PIC X(10) VALUE SPACE.
02 FILLER PIC X(10) VALUE '..MAKE....'.
01 HEADER-LINE-2.
02 FILLER PIC X(60) VALUE '-'.
EXEC ADABAS
BEGIN DECLARE SECTION
END-EXEC
EXEC ADABAS
FIND
DECLARE EMPS CURSOR FOR
SELECT NAME, JOB-TITLE, PERSONNEL-ID
FROM EMPLOYEES
WHERE CITY = 'PARIS'
END-EXEC
EXEC ADABAS
FIND
DECLARE CARS CURSOR FOR
SELECT MAKE
FROM VEHICLES
WHERE PERSONNEL-ID = EMPS.PERSONNEL-ID
END-EXEC
PROCEDURE DIVISION.
* * * * * * * * * * * * * * * * * * * *
* LINK EMPLOYEES AND VEHICLES *
* * * * * * * * * * * * * * * * * * * *
EXEC ADABAS
CONNECT ACC=EMPLOYEES VEHICLES
END-EXEC
* * * * * * * * * * * * * * * * * * * *
* OPEN ADABAS FILE *
* * * * * * * * * * * * * * * * * * * *
EXEC ADABAS
OPEN EMPS
END-EXEC
DISPLAY HEADER-LINE-0.
DISPLAY HEADER-LINE-1.
DISPLAY HEADER-LINE-2.
* * * * * * * * * * * * * * * * * * * *
* READ (FIRST) ADABAS DATA (RECORD) *
* * * * * * * * * * * * * * * * * * * *
EXEC ADABAS
FETCH EMPS
END-EXEC
PERFORM READ-EMPS UNTIL ADACODE = 3.
* * * * * * * * * * * * * * * * * * * *
* CLOSE ADABAS FILE *
* * * * * * * * * * * * * * * * * * * *
EXEC ADABAS
CLOSE EMPS
END-EXEC
* * * * * * * * * * * * * * * * * * * *
* END ADABAS SESSION *
* * * * * * * * * * * * * * * * * * * *
EXEC ADABAS
DBCLOSE
END-EXEC
STOP RUN.
READ-EMPS.
* * * * * * * * * * * * * * * * * * * *
* FIND VEHICLE DATA *
* * * * * * * * * * * * * * * * * * * *
EXEC ADABAS
OPEN CARS
END-EXEC
EXEC ADABAS
FETCH CARS
END-EXEC
PERFORM READ-CARS UNTIL ADACODE = 3.
EXEC ADABAS
CLOSE CARS
END-EXEC
* * * * * * * * * * * * * * * * * * * *
* READ MORE ADABAS DATA *
* * * * * * * * * * * * * * * * * * * *
EXEC ADABAS
FETCH EMPS
END-EXEC
READ-CARS.
EXEC ADABAS
FETCH CARS
END-EXEC
DISPLAY LAST-NAME JOB-TITLE MAKE.
5 Several fields are to be read from the VEHICLES file for all the
Porsche automobiles. Conversion of colors to English for all records
is executed in this COBOL example.
IDENTIFICATION DIVISION.
PROGRAM-ID. MRSTMEX5.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 NEW-COLOR PIC X(10).
EXEC ADABAS
BEGIN DECLARE SECTION
END-EXEC
EXEC ADABAS
DECLARE CARS CURSOR FOR
SELECT MAKE, COLOR
FROM VEHICLES
WHERE MAKE = 'PORSCHE'
OPTIONS HOLD
END-EXEC
PROCEDURE DIVISION.
* * * * * * * * * * * * * * * * * * * *
* OPEN ADABAS FILE *
* * * * * * * * * * * * * * * * * * * *
EXEC ADABAS
OPEN CARS
END-EXEC
* * * * * * * * * * * * * * * * * * * *
* READ (FIRST) ADABAS DATA (RECORD) *
* * * * * * * * * * * * * * * * * * * *
EXEC ADABAS
FETCH CARS
END-EXEC
PERFORM READ-AND-UPDATE-CARS UNTIL ADACODE = 3.
* * * * * * * * * * * * * * * * * * * *
* POST CHANGE TO ADABAS FILE *
* * * * * * * * * * * * * * * * * * * *
EXEC ADABAS
COMMIT WORK
END-EXEC
* * * * * * * * * * * * * * * * * * * *
* CLOSE ADABAS FILE *
* * * * * * * * * * * * * * * * * * * *
EXEC ADABAS
CLOSE CARS
END-EXEC
STOP RUN.
READ-AND-UPDATE-CARS.
IF COLOR OF CARS IS 'ROUGE' OR 'ROT'
THEN MOVE 'RED' TO NEW-COLOR
ELSE IF COLOR OF CARS IS 'BLAU' OR 'AZUL'
THEN MOVE 'BLUE' TO NEW-COLOR
ELSE IF COLOR OF CARS IS 'VERT' OR 'VERDE'
THEN MOVE 'GREEN' TO NEW-COLOR
ELSE IF COLOR OF CARS IS 'BLANCO' OR 'BLANC'
THEN MOVE 'WHITE' TO NEW-COLOR
ELSE IF COLOR OF CARS IS 'NOIR' OR 'NEGRO'
THEN MOVE 'BLACK' TO NEW-COLOR
ELSE MOVE 'NO COLOR' TO NEW-COLOR.
* * * * * * * * * * * * * * * * * * * *
* MODIFY ADABAS DATA *
* * * * * * * * * * * * * * * * * * * *
EXEC ADABAS
UPDATE VEHICLES
SET COLOR = :NEW-COLOR
WHERE CURRENT OF CARS
END-EXEC
* * * * * * * * * * * * * * * * * * * *
* READ MORE ADABAS DATA *
* * * * * * * * * * * * * * * * * * * *
EXEC ADABAS
FETCH CARS
END-EXEC