What Is Read Statement in Computer Science
READ
| |
| | [MULTI-FETCH-clause] [ RECORDSouthward ] [IN ] [FILE ] view-proper noun | ||||||||||
[Countersign= operand2] | ||||||||||||||
[Zippo= operand3] | ||||||||||||||
[WITH REPOSITION ] | ||||||||||||||
[sequence/range-specification] | ||||||||||||||
[STARTING WITH ISN= operand4] | ||||||||||||||
[[IN ] SHARED HOLD [Way =pick]] | ||||||||||||||
[SKIP [ RECORDDue south ] IN HOLD ] | ||||||||||||||
[WHERE logical-condition] | ||||||||||||||
argument | ||||||||||||||
END-READ | (structured manner only) | |||||||||||||
LOOP | (reporting mode merely) |
This document covers the following topics:
-
Office
-
Syntax Description
-
Arrangement Variables Available with READ
-
Examples
For an explanation of the symbols used in the syntax diagram, see Syntax Symbols.
Related Statements: Accept/Reject
| AT Suspension
| AT Commencement OF DATA
| AT Cease OF Information
| BACKOUT TRANSACTION
| BEFORE BREAK PROCESSING
| GET TRANSACTION DATA
| DELETE
| Cease TRANSACTION
| FIND
| HISTOGRAM
| GET
| Get Aforementioned
| LIMIT
| PASSW
| PERFORM BREAK PROCESSING
| READLOB
| RETRY
| STORE
| UPDATE
| UPDATELOB
Belongs to Role Group: Database Admission and Update
Function
The READ
statement is used to read records from a database. The records tin can be retrieved in physical sequence, in Adabas ISN sequence, or in the value sequence of a descriptor (key) field. The READ
argument causes a processing loop to be initiated.
Run into likewise the post-obit sections in the Programming Guide:
-
READ Argument
-
Loop Processing
-
Referencing of Database Fields Using (r) Notation
Syntax Description
Operand Definition Table:
Operand | Possible Structure | Possible Formats | Referencing Permitted | Dynamic Definition | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
operand1 | C | Southward | N | P | I | B * | yes | no | ||||||||||||
operand2 | C | S | A | yes | no | |||||||||||||||
operand3 | C | Southward | N | yes | no | |||||||||||||||
operand4 | C | Due south | N | P | I | B * | yeah | no |
* Format B of operand1
and operand4
may be used with a length of less than or equal to 4.
Syntax Element Description:
Syntax Element | Description | ||
---|---|---|---|
operand1 | Number of Records to be Read: The number of records to be read may be limited by specifying Example: READ (5) IN EMPLOYEES ... MOVE 10 TO CNT(N2) READ (CNT) EMPLOYEES ... For this statement, the specified limit has priority over a limit prepare with a If a smaller limit is prepare with the contour or session parameter Notes:
| ||
ALL | ALL Choice: To emphasize that all records are to be read, you can optionally specify the keyword The | ||
MULTI-FETCH-clause | MULTI-FETCH Clause: Encounter MULTI-FETCH Clause below. | ||
view-name | View Name: As In reporting manner, view-name is the proper noun of a DDM if no | ||
PASSWORD=operand2 | PASSWORD and CIPHER Clauses: These clauses are applicable only to Adabas or VSAM databases. They cannot be used with Entire Organization Server. The The Encounter the statements | ||
WITH REPOSITION | WITH REPOSITION Option: This selection is used to make the | ||
sequence/range-specification | Sequence/Range Specification: This option specifies the sequence and/or the range of retrieval. Run across Sequence/Range Specification. | ||
STARTING WITH ISN=operand4 | STARTING WITH ISN Clause: This clause applies simply to Adabas and VSAM databases. Access to Adabas This clause can be used in conjunction with a
Access to VSAM This clause tin only exist used in physical sequence. The value supplied ( Examples This clause may be used for repositioning inside a For an instance, come across the program | ||
[[IN] SHARED HOLD [Way=option]] | SHARED Hold Clause: Note: This clause can exist used to place records existence read in a "shared hold" state. A tape tin exist put in shared hold by many users at the same time. As long every bit a record is in a shared concord state, information technology is protected from existence updated, because it cannot be set into an exclusive hold past parallel users. This ensures data consistency for the tape data, as no one can update the record while it is being processed. Specially if the same tape is fetched with multiple statements to read different MU/PE occurrences ( Although such a hold state is an efficient way to protect read sequences, information technology is a basic and important matter when to release the record again from this "soft lock". Since this question depends on individual application aspects, different options tin be selected with the | ||
MODE Pick | Agree Menses | Explanation | |
C | But at the moment of reading the tape. | Ensures only that the record version being read has been committed by the last user who updated the record. This pick does not really set a lock in agree land, merely checks just that the tape is non in sectional hold by another user at fourth dimension of read. | |
Q | Until the side by side tape in a sequence is read. | Releases the tape from shared hold when
| |
S | Until the logical transaction is terminated. | Releases the tape from shared hold when a logical transaction is terminated with an END TRANSACTION or BACKOUT TRANSACTION statement. | |
MODE=Q and Way=Southward ensure that the record being read cannot be updated concurrently by other users until it has been released from hold once again. If the Run into also Instance 8 - SHARED HOLD Clause below. | |||
SKIP RECORDS IN Hold | SKIP RECORDS Clause: Notes:
Whenever a record is going to be read with concord, a Natural error NAT3145 (Adabas response code Although fault NAT3145 is surely the correct reaction to clinch a "clean data processing", sometimes it might be useful if a tape in hold could exist skipped. If it is alright that such a record volition not be candy and the loop processing should go along, the If the If the record is already in concur and the Natural mistake NAT3145 would occur,
Encounter also Example 9 - SKIP RECORDS Clause. | ||
WHERE logical-condition | WHERE Clause: The The syntax for a If a | ||
END-READ | End of READ Statement: In structured way, the Natural reserved keyword In reporting mode, the Natural argument | ||
LOOP |
MULTI-FETCH Clause
Notation:
This clause tin only be used for Adabas or DB2 databases.
MULTI-FETCH |
| |
|
For more information, see the section MULTI-FETCH Clause (Adabas) in the Programming Guide or Multiple Row Processing (SQL) in the Natural for DB2 part of the Database Management System Interfaces documentation.
WITH REPOSITION Option
Note:
This option can merely be applied if the underlying database is Adabas, VSAM or DL/I.
With a WITH REPOSITION
option, yous tin make a READ
argument sensitive for repositioning events. This allows you to reposition to another start value within an active READ
loop. Processing of the READ
statement and then continues with the new start value.
A repositioning outcome is triggered past one of 2 ways when y'all utilize a READ
statement with the WITH REPOSITION
option:
-
When an
ESCAPE TOP REPOSITION
statement is executed. At execution of anESCAPE Tiptop REPOSITION
statement, Natural makes an instant branch to the loop begin and performs a restart; that is, the database repositions to a new record in the file co-ordinate to the current content of the search value variable. At the same time, the loop-counter*COUNTER
is reset to nothing. -
When a
READ
loop tries to fetch the next record from the database and the value of the system variable*COUNTER
is0
.Note:
If*COUNTER
is set to0
within the activeREAD
loop, processing of the current record is continued; no instant branch to the loop brainstorm is performed.
Functional Considerations
-
If the
READ
statement has a loop-limit (due east.g.READ (ten) EMPLOYEES WITH REPOSITION ..
) and a restart upshot was triggered, the loop gets another 10 new records, no matter how many records where already processed until the repositioning takes identify. -
If an
ESCAPE Top REPOSITION
statement is executed, simply the innermost loop is not capable of repositioning (since theWITH REPOSITION
keyword is not set in theREAD
statement or the posted loop statement is anything else just aREAD
), a corresponding runtime fault is issued. -
Since the
ESCAPE Top
statement does not let a reference, you can only initiate a reposition event if the innermost processing loop is aREAD ..WITH REPOSITION
statement. -
A reposition upshot does non trigger the execution of the
AT START OF DATA
section, nor does it trigger the re-evaluation of the loop-limit operand (if information technology is a variable). -
If the search value was not altered, the loop repositions to the same record like at initial loop beginning.
Sequence/Range Specification
Iii syntax options are available to specify the sequence and/or the range of retrieval.
Syntax Option 1:
[IN ] [ Physical ] |
| |
| [SEQUENCE ] |
Syntax Option ii:
|
|
|
| |
|
| |||||||||||
| ISN | operand6 |
|
|
| |
|
| operand7 |
| |||||||
Syntax Selection three:
[IN ] [LOGICAL ] |
| |
| [SEQUENCE ] |
| |
| descriptor | ||||||
|
|
| |
| operand6 |
|
|
| |
| operand7 |
|
| |
| |
| operand6 TO operand7 | |||||||||||
| |
| operand6 |
Notes:
- The syntax options [2] and [3] are non available with Entire Organization Server.
- If the comparators of Diagram iii are used, the options
ENDING AT
,THRU
andTO
may non exist used. These comparators are also valid for theHISTOGRAM
statement.
Operand Definition Tabular array:
Operand | Possible Structure | Possible Formats | Referencing Permitted | Dynamic Definition | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
operand5 | Due south | A | yes | no | ||||||||||||||||
operand6 | C | S | A | North | P | I | F | B * | D | T | L | yes | no | |||||||
operand7 | C | S | A | N | P | I | F | B * | D | T | 50 | yes | no |
* Format B of operand6
and operand7
may be used only with a length of less than or equal to 4.
Syntax Element Description:
Syntax Element | Clarification |
---|---|
READ IN Physical SEQUENCE | Read in Physical Sequence: This option is used to read records in the order in which they are physically stored in a database. Note: |
READ By ISN | Read past ISN: This option is used to read records in the order of Adabas ISNs (internal sequence numbers) or VSAM RBAs (relative byte addresses of ESDS) or RRNs (relative record numbers of RRDS) respectively. (Instead of using the keyword Annotation: |
READ IN LOGICAL SEQUENCE | Read in Logical Sequence: This option is used to read records in the society of the values of a descriptor (key) field. If you specify a descriptor, the records will be read in the value sequence of the descriptor. A descriptor, subdescriptor, superdescriptor or hyperdescriptor may exist used for sequence control. A phonetic descriptor, a descriptor within a periodic group, or a superdescriptor which contains a periodic-group field cannot be used. If y'all do non specify a descriptor, the default descriptor as specified in the DDM (field Notes:
If the descriptor used for sequence control is defined with null-value suppression (Adabas merely), any record which contains a cipher value for the descriptor will not be read. If the descriptor is a multiple-value field (Adabas simply), the same tape volition be read multiple times depending on the number of values nowadays. Notation: |
ASCENDING | DESCENDING | VARIABLE | DYNAMIC SEQUENCE | Ascending/Descending Order: This clause only applies to Adabas, XML databases, VSAM and SQL databases. In a With this clause, you can determine whether the records are to exist read in ascending sequence or in descending sequence.
|
STARTING FROM ... ENDING AT/TO | STARTING FROM/Ending AT Clauses: The The In order to limit the records to an end-value, you may specify an |
THRU/Ending AT | THRU/ENDING AT Pick: If Internally, to determine the terminate of the range to exist read, Natural reads one record beyond the end-value. If you take left the The |
TO | TO Option: If the keyword |
Notes on Functional Differences between THRU/Catastrophe AT and TO
The post-obit list describes the functional differences betwixt the usage of the THRU/ENDING AT
and TO
options.
THRU/ENDING AT | TO |
---|---|
When the READ loop terminates because the finish-value has been reached, the view contains the commencement record "out-of-range". | When the READ loop terminates because the end-value has been reached, the view contains the last tape of the specified range. |
If a finish-value variable is modified during the READ loop, the new value volition exist used for end-value check on next record being read. | The end-value variable will only be evaluated at READ loop offset. All further modifications during the READ loop have no effect. |
An incorrect range (for example, READ .. = 'B' THRU 'A' ) does not cause a database error, but just returns no tape. | An incorrect range results in a database mistake (for example, Adabas RC=61), because a value range must not be supplied in descending club. |
If a READ .. DESCENDING is used with start- and end-value, the offset value is used to position in the file, whereas the end-value is used by Natural to bank check for "end-of-range". Therefore the start-value is college than (or equal to) the end-value. | Since both values are passed to the database, they have to appear in ascending order. In other words, the start-value is lower than (or equal to) the finish-value, no affair if you are reading in ascending or descending society. |
In order to check for range overflow, the descriptor value has to appear in the underlying database view; that is, information technology must be returned in the tape buffer. | The descriptor is non required in the record fields returned. |
The end-value check for an Adabas multi-value field (MU-field) or a sub-/super-/hyper-descriptor is not possible and leads to syntax mistake NAT0160 at program compilation. | You may specify an end-value for MU-fields and sub-/super-/hyper-descriptors. |
Can be used for all databases. | Can be used for all databases. |
Note:
The result of READ
/HISTOGRAM
THRU
/ENDING AT
might differ from the effect of READ
/HISTOGRAM
TO
if Natural and the accessed database reside on different platforms with different collating sequences.
Organization Variables Bachelor with READ
The Natural system variables *ISN
and *COUNTER
are available with the READ
statement.
The format/length of these arrangement variables is P10. This format/length cannot be changed.
The usage of the organisation variables is illustrated beneath.
System Variable | Explanation |
---|---|
*ISN | The system variable Notes:
|
*COUNTER | The system variable *COUNTER contains the number of times the processing loop has been entered. |
Examples
-
Instance ane - READ Statement
-
Case 2 - READ WITH REPOSITION
-
Example 3 - Combining READ and FIND Statements
-
Example 4 - DESCENDING Option
-
Case 5 - VARIABLE Option
-
Example vi - DYNAMIC Selection
-
Example 7 - STARTING WITH ISN Clause
-
Example 8 - SHARED HOLD Clause
-
Case nine - SKIP RECORDS Clause
Example 1 - READ Argument
** Example 'REAEX1S': READ (structured mode) ************************************************************************ DEFINE DATA LOCAL ane EMPLOY-VIEW VIEW OF EMPLOYEES 2 PERSONNEL-ID 2 NAME 1 VEHIC-VIEW VIEW OF VEHICLES 2 PERSONNEL-ID ii MAKE Finish-DEFINE * LIMIT 3 * WRITE 'READ IN PHYSICAL SEQUENCE' READ Use-VIEW IN PHYSICAL SEQUENCE Brandish NOTITLE PERSONNEL-ID Proper noun *ISN *COUNTER END-READ * WRITE / 'READ IN ISN SEQUENCE' READ Utilise-VIEW BY ISN STARTING FROM ane ENDING AT 3 DISPLAY PERSONNEL-ID NAME *ISN *COUNTER Terminate-READ * WRITE / 'READ IN Proper name SEQUENCE' READ EMPLOY-VIEW BY NAME DISPLAY PERSONNEL-ID NAME *ISN *COUNTER END-READ * WRITE / 'READ IN NAME SEQUENCE STARTING FROM ''M''' READ EMPLOY-VIEW Past NAME STARTING FROM 'K' DISPLAY PERSONNEL-ID Name *ISN *COUNTER END-READ * Stop
Output of Program REAEX1S:
PERSONNEL NAME ISN CNT ID --------- -------------------- ----------- ----------- READ IN PHYSICAL SEQUENCE 50005800 ADAM 1 1 50005600 MORENO 2 2 50005500 BLOND 3 iii READ IN ISN SEQUENCE 50005800 ADAM 1 1 50005600 MORENO 2 2 50005500 BLOND 3 three READ IN NAME SEQUENCE 60008339 ABELLAN 478 1 30000231 ACHIESON 878 2 50005800 ADAM one iii READ IN Name SEQUENCE STARTING FROM 'M' 30008125 MACDONALD 923 i 20028700 MACKARNESS 765 two 40000045 MADSEN 508 3
Equivalent reporting-manner instance: REAEX1R.
Example two - READ WITH REPOSITION
Ascertain Data LOCAL 1 MYVIEW VIEW OF ... 2 NAME 1 #STARTVAL (A20) INIT <'A'> 1 #ATTR (C) Terminate-Define ... Fix KEY PF3 ... READ MYVIEW WITH REPOSITION Past NAME = #STARTVAL INPUT (IP=OFF Advertizing=O) 'Name:' Proper noun / 'Enter new offset value for repositioning:' #STARTVAL (AD=MT CV=#ATTR) / 'Press PF3 to stop' IF *PF-KEY = 'PF3' So STOP Terminate-IF IF #ATTR MODIFIED And so ESCAPE TOP REPOSITION END-IF END-READ ...
Ascertain Information LOCAL 1 MYVIEW VIEW OF ... 2 NAME 1 #STARTVAL (A20) INIT <'A'> 1 #ATTR (C) END-DEFINE ... SET KEY PF3 ... READ MYVIEW WITH REPOSITION BY Name = #STARTVAL INPUT (IP=OFF AD=O) 'Proper noun:' NAME / 'Enter new start value for repositioning:' #STARTVAL (AD=MT CV=#ATTR) / 'Press PF3 to stop' IF *PF-Cardinal = 'PF3' THEN STOP Finish-IF IF #ATTR MODIFIED Then RESET *COUNTER END-IF End-READ ...
Example three - Combining READ and FIND Statements
The following programme reads records from the EMPLOYEES
file in logical sequential gild based on the values of the descriptor Proper noun
. A FIND
statement is then issued to the VEHICLES
file using the personnel number from the EMPLOYEES
file as search criterion. The resulting report shows the proper name (read from the EMPLOYEES
file) of each person read and the model of automobile (read from the VEHICLES
file) owned by this person. Multiple lines with the same name are produced if the person owns more than one motorcar.
** Example 'REAEX2': READ and Find combination ************************************************************************ Ascertain Information LOCAL one Use-VIEW VIEW OF EMPLOYEES 2 PERSONNEL-ID 2 Beginning-NAME 2 Name 2 Urban center one VEH-VIEW VIEW OF VEHICLES 2 PERSONNEL-ID 2 Brand Terminate-DEFINE * LIMIT 10 * RD. READ EMPLOY-VIEW BY NAME STARTING FROM 'JONES' SUSPEND IDENTICAL SUPPRESS FD. Detect VEH-VIEW WITH PERSONNEL-ID = PERSONNEL-ID (RD.) IF NO RECORDS Establish ENTER Terminate-NOREC DISPLAY NOTITLE (ES=OFF IS=ON ZP=ON AL=15) PERSONNEL-ID (RD.) Outset-NAME (RD.) MAKE (FD.) (IS=OFF) END-FIND END-READ END
Output of Program REAEX2:
PERSONNEL FIRST-NAME MAKE ID --------------- --------------- --------------- 20007500 VIRGINIA CHRYSLER 20008400 MARSHA CHRYSLER CHRYSLER 20021100 ROBERT General MOTORS 20000800 LILLY FORD MG 20001100 EDWARD General MOTORS 20002000 MARTHA GENERAL MOTORS 20003400 LAUREL GENERAL MOTORS 30034045 KEVIN DATSUN 30034233 GREGORY FORD 11400319 MANFRED
Example iv - DESCENDING Choice
** Instance 'READSCND': READ (with DESCENDING SEQUENCE) ************************************************************************ Define Information LOCAL one EMPL VIEW OF EMPLOYEES 2 Proper name 2 FIRST-NAME 2 Birth Finish-Ascertain * READ (10) EMPL IN DESCENDING SEQUENCE BY Proper name FROM 'ZZZ' Display *ISN Proper noun FIRST-Name Nativity (EM=YYYY-MM-DD) END-READ END
Example 5 - VARIABLE Option
** Example 'REAVSEQ': READ (with VARIABLE SEQUENCE) ************************************************************************ DEFINE Data LOCAL 1 EMPL VIEW OF EMPLOYEES 2 NAME 2 FIRST-Name ii BIRTH * 1 #DIR (A1) i #STARTVALUE (A20) END-DEFINE * SET KEY PF7 PF8 * INPUT 'Select READ direction' // 'Printing' 08T 'PF7' (I) 21T 'to read backward' / 08T 'PF8' (I) 'or' 'ENTER' (I) 21T 'to read forward' * IF *PF-KEY = 'PF7' MOVE 'D' TO #DIR Motion 'ZZZ' TO #STARTVALUE ELSE MOVE 'A' TO #DIR MOVE 'A' TO #STARTVALUE END-IF * READ (10) EMPL IN VARIABLE #DIR SEQUENCE BY NAME FROM #STARTVALUE Brandish *ISN Name FIRST-Proper noun BIRTH (EM=YYYY-MM-DD) Cease-READ END
Example half-dozen - DYNAMIC Selection
Ascertain DATA LOCAL 1 #Direction (A1) INIT <'A'> /* 'A' = ASCENDING ane #EMPVIEW VIEW OF EMPLOYEES 2 Proper noun ... END-DEFINE ... READ #EMPVIEW IN DYNAMIC #Management SEQUENCE BY NAME = 'SMITH' INPUT (Advertisement=O) NAME / 'Press PF7 to scroll in DESCENDING sequence' / 'Printing PF8 to curlicue in ASCENDING sequence' .. IF *PF-KEY = 'PF7' THEN MOVE 'D' TO #Direction Terminate-IF IF *PF-Fundamental = 'PF8' THEN MOVE 'A' TO #Direction END-IF Stop-READ ...
Instance 7 - STARTING WITH ISN Clause
** Case 'REASISND': READ (with STARTING WITH ISN) ************************************************************************ Ascertain DATA LOCAL 1 EMPL VIEW OF EMPLOYEES two Name two Kickoff-Proper name two Nativity * 1 #DIR (A1) i #STARTVAL (A20) ane #STARTISN (N8) END-Ascertain * Gear up KEY PF3 PF7 PF8 * Motion 'ADKINSON' TO #STARTVAL * READ (9) EMPL By Proper noun = #STARTVAL WRITE *ISN NAME FIRST-Proper name Nascence (EM=YYYY-MM-DD) *COUNTER IF *COUNTER = five And so MOVE NAME TO #STARTVAL MOVE *ISN TO #STARTISN END-IF Stop-READ * #DIR := 'A' * Repeat READ EMPL IN VARIABLE #DIR Past Proper noun = #STARTVAL STARTING WITH ISN = #STARTISN MOVE Name TO #STARTVAL Movement *ISN TO #STARTISN INPUT NO ERASE (IP=OFF Advertizing=O) 15/01 *ISN NAME Commencement-NAME Nascence (EM=YYYY-MM-DD) // 'Direction:' #DIR // 'Press PF3 to finish' / ' PF7 to go step dorsum' / ' PF8 to become step frontward' / ' ENTER to go on in that management' /* IF *PF-KEY = 'PF7' AND #DIR = 'A' Motility 'D' TO #DIR ESCAPE BOTTOM END-IF IF *PF-Key = 'PF8' AND #DIR = 'D' Move 'A' TO #DIR ESCAPE BOTTOM END-IF IF *PF-KEY = 'PF3' STOP Stop-IF END-READ /* IF *COUNTER(0290) = 0 Cease END-IF Terminate-REPEAT END
Example 8 - SHARED HOLD Clause
READ EMPL-VIEW WITH NAME = ... IN SHARED Concord Way=Q /* Record in shared agree until side by side tape is read. ... GET EMPL-VIEW *ISN /* The record remains unchanged! ... Terminate-READ
Example 9 - SKIP RECORDS Clause
READ EMPL-VIEW WITH Name = ... /* Records found are put in hold while reading. SKIP RECORDS IN HOLD /* Records already held past other users are skipped ... /* to prevent error NAT3145. UPDATE END TRANSACTION END-READ
Source: https://documentation.softwareag.com/natural/nat824mf/sm/read.htm