The DBMS assigns a db-key to each record occurrence in the database. This key identifies the database page and line number where the record is located. The db-key can be qualified by record type or page information to ensure that it identifies a unique record occurrence. While always allowed, qualification is necessary only under the following circumstances:
For more information about qualifying db-keys, see DB-Keys and Page Information.
Steps to Access a Record by its Db-key
To access a record directly by using its db-key, perform the following steps:
When to Use Access by Db-key
Using a record's db-key provides for the most efficient form of database retrieval. For example, if you know that your program will need to use a record more than once, it is best to save the record's db-key and reaccess the record by using FIND/OBTAIN DB-KEY. Any subschema record can be accessed by its db-key, regardless of location mode. Currency is not used to determine the target record of the FIND/OBTAIN DB-KEY statement; the record is identified by its db-key and, optionally, by its record type or page information.
'Native VSAM users'. The FIND/OBTAIN DB-KEY statement cannot be used to access records in a native VSAM key-sequenced data set (KSDS).
Example of Record Access by Db-key and Page-info
The program excerpt below shows using a db-key and page-info to reestablish currency.
Note: This application walks the DEPT-EMPLOYEE set, printing a report of all employees and their managers. After accessing the manager's EMPLOYEE record, the FIND DB-KEY statement is used to reestablish the correct EMPLOYEE record as current of the DEPT-EMPLOYEE set.
WORKING-STORAGE SECTION.
01 SAVED-DBKEYS.
05 SAVE-EMP-DBKEY PIC S9(8) COMP SYNC.
PROCEDURE DIVISION.
.
A200-GET-EMP-MANAGER.
*** RETRIEVE EMPLOYEES SEQUENTIALLY WITHIN SET ***
OBTAIN NEXT WITHIN DEPT-EMPLOYEE.
*** CHECK FOR ERROR-STATUS = 0307 ***
IF DB-END-OF-SET
GO TO A200-EXIT
*** CHECK FOR ERROR-STATUS = 0000 ***
ELSE IF DB-STATUS-OK
NEXT SENTENCE
ELSE
PERFORM IDMS-STATUS.
*** SAVE EMPLOYEES' DB-KEY ***
MOVE DBKEY TO SAVE-EMP-DBKEY.
PERFORM IDMS-STATUS.
MOVE EMP-ID-0415 TO EMP-ID-OUT.
MOVE EMP-FIRST-NAME-0415 TO EMP-FIRST-OUT.
MOVE EMP-LAST-NAME-0415 TO EMP-LAST-OUT.
IF REPORTS-TO IS EMPTY
DISPLAY 'EMPLOYEE ' EMP-ID-0415 'HAS NO MANAGER'
GO TO A200-EXIT.
FIND FIRST WITHIN REPORTS-TO.
PERFORM IDMS-STATUS.
*** ACCESS MANAGER'S EMPLOYEE RECORD ***
OBTAIN OWNER WITHIN MANAGES.
PERFORM IDMS-STATUS.
MOVE EMP-FIRST-NAME-0415 TO MANAGER-FIRST-OUT.
MOVE EMP-LAST-NAME-0415 TO MANAGER-LAST-OUT.
*** REESTABLISH EMPLOYEE CURRENCY TO ***
*** CONTINUE WALKING THE DEPT-EMPLOYEE SET ***
FIND EMPLOYEE DB-KEY IS SAVE-EMP-DBKEY.
PERFORM IDMS-STATUS.
A200-EXIT.
EXIT.
Example of Record Access by Db-key and Page-info
The program excerpt below shows using a db-key and page-info to reestablish currency.
Note: Use this coding technique when the subschema includes areas that have mixed page groups.
This application walks the DEPT-EMPLOYEE set, printing a report of all employees and their managers. After accessing the manager's EMPLOYEE record, the FIND DB-KEY statement is used to reestablish the correct EMPLOYEE record as current of the DEPT-EMPLOYEE set.
WORKING-STORAGE SECTION. 01 SAVED-DBKEY-PAGEINFO.
05 SAVE-EMP-DBKEY PIC S9(8) COMP SYNC.
05 SAVE-EMP-PAGEINFO PIC S9(8) COMP SYNC.
PROCEDURE DIVISION.
.
A200-GET-EMP-MANAGER.
*** RETRIEVE EMPLOYEES SEQUENTIALLY WITHIN SET ***
OBTAIN NEXT WITHIN DEPT-EMPLOYEE.
*** CHECK FOR ERROR-STATUS = 0307 ***
IF DB-END-OF-SET
GO TO A200-EXIT
*** CHECK FOR ERROR-STATUS = 0000 ***
ELSE IF DB-STATUS-OK
NEXT SENTENCE
ELSE
PERFORM IDMS-STATUS.
*** SAVE EMPLOYEES' DB-KEY and PAGE-INFO ***
MOVE DBKEY TO SAVE-EMP-DBKEY.
MOVE PAGE-INFO TO SAVE-EMP-PAGEINFO.
PERFORM IDMS-STATUS.
MOVE EMP-ID-0415 TO EMP-ID-OUT.
MOVE EMP-FIRST-NAME-0415 TO EMP-FIRST-OUT.
MOVE EMP-LAST-NAME-0415 TO EMP-LAST-OUT.
IF REPORTS-TO IS EMPTY
DISPLAY 'EMPLOYEE ' EMP-ID-0415 'HAS NO MANAGER'
GO TO A200-EXIT.
FIND FIRST WITHIN REPORTS-TO.
PERFORM IDMS-STATUS.
*** ACCESS MANAGER'S EMPLOYEE RECORD ***
OBTAIN OWNER WITHIN MANAGES.
PERFORM IDMS-STATUS.
MOVE EMP-FIRST-NAME-0415 TO MANAGER-FIRST-OUT.
MOVE EMP-LAST-NAME-0415 TO MANAGER-LAST-OUT.
*** REESTABLISH EMPLOYEE CURRENCY TO ***
*** CONTINUE WALKING THE DEPT-EMPLOYEE SET ***
FIND DB-KEY IS SAVE-EMP-DBKEY PAGE-INFO SAVE-EMP-PAGEINFO.
PERFORM IDMS-STATUS.
A200-EXIT.
EXIT.
|
Copyright © 2013 CA.
All rights reserved.
|
|