|
HP COBOL DBMS Database Programming Manual
FETCH
Function
The FETCH statement is a combined FIND and GET that establishes a
specific record in the database as the current record of the run unit
and makes the record available to the run unit in the user work area.
database-record
represents a record selection expression. References are made to a
record in the database according to the rules for Record Selection
Expressions (see Section 4.6).
set-name
names a subschema set type.
stment
is an imperative statement executed for an AT END or ON ERROR condition.
stment2
is an imperative statement executed for a NOT AT END or NOT ON ERROR
condition.
General Rules
- database-record must reference a record stored in a realm
that is in ready mode.
- The FETCH statement is equivalent to the following sequence of
statements:
FIND database-record...
GET...
- Execution of the FETCH statement causes database-record to
become the current record of the run unit.
- The FOR UPDATE option puts a no-read lock on the specified record.
- The DBCS makes a copy of the selected database record available to
the program in the user work area. Any change made to the user work
area does not affect the record in the database. You must execute a
MODIFY and COMMIT statement to make permanent changes to the database.
- Unless otherwise specified by the RETAINING clause (see
Section 4.9.1, RETAINING Clause), the successful FETCH statement causes the DBCS to
update these currency indicators to point to the selected record:
- Run unit.
- Realm.
- Record type.
- Set type. If it is an owner record type of the set type, this
currency indicator points to the selected record even if the set is
empty. If it is a member record type of the set type, this currency
indicator points to the selected record only if it is currently a
member of some set of that record type.
- The DBCS places the database key of the fetched record in the
special register DB-KEY.
- If a database exception condition occurs during the execution of a
FETCH statement, the DBCS places a database exception condition code in
the special register DB-CONDITION (see Technical Note). This code
identifies the condition.
- [NOT]ON ERROR and [NOT]AT END cannot be used concurrently in a
Fetch statement.
- If either AT END or ON ERROR is used, it must precede USE.
- If ON ERROR and NOT ON ERROR are used concurrently in a Fetch
statement, USE procedures will not be activated.
Technical Note
FETCH statement execution can result in these database exception
conditions and those associated with the evaluation of the record
selection expression:
DBM$_CONVERR
|
A data conversion error occurred in the FETCH operation.
|
DBM$_ILLNCHAR
|
Invalid character found in a numeric field.
|
DBM$_NONDIGIT
|
Nonnumeric character found in a numeric field.
|
DBM$_OVERFLOW
|
A data overflow error occurred in the FETCH operation.
|
DBM$_TRUNCATION
|
A data truncation error occurred in the FETCH operation.
|
DBM$_UNDERFLOW
|
A data underflow error occurred in the FETCH operation.
|
Additional References
- Section 2.2, on reserved words (database special registers)
- HP COBOL Reference Manual, Chapter 6, section on scope of statements
- Section 4.6, on record selection expressions
- HP COBOL Reference Manual, Chapter 6, section on AT END phrase
- Section 4.8.1, on database On Error condition
- Section 5.14.1, on RETAINING clause
- USE statement
Examples
- Currency indicator access. To retrieve the:
- Current record of the run unit
- Current record of the MAKE realm
FETCH CURRENT WITHIN MAKE.
|
- Current record of the CLASS_PART set
FETCH CURRENT WITHIN CLASS_PART.
|
- Current PART record
FETCH CURRENT WITHIN PART.
|
- Keeplist access. To retrieve the:
- First entry in the keeplist
FETCH FIRST WITHIN KEEPLIST-A.
|
- Last entry in the keeplist
FETCH LAST WITHIN KEEPLIST-B.
|
- N(th) entry in the keeplist
FETCH OFFSET RECORD-COUNT WITHIN KEEPLIST-C.
|
- Set owner access. To retrieve the owner (PART) of the PART_USES set:
FETCH OWNER WITHIN PART_USES.
|
- Record search access. To retrieve the:
- First member within the PART_USES set
FETCH FIRST WITHIN PART_USES.
|
- First part whose PART-COST is greater than 300 dollars
FETCH FIRST PART WHERE PARTCOST GREATER THAN 300
|
- Last member within the BUY realm
- Next COMPONENT record in the PART_USED_ON set
FETCH NEXT COMPONENT WITHIN PART_USED_ON.
|
- Prior COMPONENT record in the PART_USES set using COMP_SUB_PART and
COMP_OWNER_PART as record keys
FETCH PRIOR COMPONENT WITHIN PART_USES
USING COMP_SUB_PART, COMP_OWNER_PART.
|
- Record relative to the current record, this statement starts from
the current position to the position defined by this offset
FETCH RELATIVE SEARCH-NUMBER
ON ERROR PERFORM 300-FETCH-IN-ERROR-ROUTINE
END-FETCH.
|
- PART record with PART_STATUS equal to "G" from the
CLASS_PART set
MOVE "G" TO PART_STATUS.
FETCH NEXT CLASS WITHIN ALL_CLASS.
FETCH NEXT PART WITHIN CLASS_PART USING PART_STATUS
AT END ...
|
- DB-KEY access. To retrieve the item referred to by the DB-KEY
special register:
FIND
Function
The FIND statement locates a specific record in the database and
establishes it as the current record of the run unit. The FIND ALL
statement locates zero or more records in the database and inserts them
into the named keeplist.
database-record
represents a record selection expression. References are made to a
record in the database according to the rules for Record Selection
Expressions (see Section 4.6).
set-name
names a subschema set type.
stment
is an imperative statement executed for an at end or on error condition.
stment2
is an imperative statement executed for a not at end or not on error
condition.
keeplist-name
names a list of database keys used by a run unit to lock records for
later reference.
record-name
names a subschema record type.
realm-name
names a subschema realm.
rec-key
is a key data item within the subschema record occurrence.
bool-expres
is a conditional expression that involves data items of the object
record.
General Rules
Format 1
- database-record must reference a record stored in a realm
that is in ready mode.
- Execution of the FIND statement causes database-record to
become the current record of the run unit.
- The Database Control System (DBCS) does not make a copy of the
database record available to the program. To retrieve the record you
must use a FETCH or GET statement.
- The FOR UPDATE option puts a no-read lock on the specified record.
- Unless otherwise specified by the RETAINING clause (see
Section 4.9.1, RETAINING Clause), the successful FIND statement causes the DBCS to update
these currency indicators to point to the selected record:
- Run unit.
- Realm.
- Record type.
- Set type. If the record is an owner record of the set type, this
currency indicator points to the selected record even if the set is
empty. If the record is a member record of the set type, this currency
indicator points to the selected record only if it is currently a
member of some set of that record type.
Format 2
- keeplist-name identifies the object keeplist for the
statement.
- Using FIND ALL puts the database key values corresponding to each
qualifying record at the end of the object keeplist.
- When FIND ALL keeplist-name is used, no currency
indicators are affected.
- The same rec-key can appear only once in a given USING
phrase.
- The bool-expres expression is used to specify additional
requirements of a qualifying record.
- When FOR UPDATE is used, no-read locks may be placed on more than
one record.
|