HP OpenVMS Systems Documentation
Some of the important concepts in database programming are described in
the definitions of databases, schemas, and
A database is a collection of your organization's data gathered into a
number of logically related units. The database administrator (DBA) and
representatives from user departments decide on the organization's
informational needs. After these individuals agree on the contents of
the database, the DBA assumes responsibility for designing, creating,
The schema is a program written by the DBA using DDL statements. It
describes the logical structure of the database, defining all record
types, set types, areas, and data items in the database. The DBA writes
the schema independently of any application run unit. Only one schema
can exist for a database. For a more detailed description of the schema
DDL, refer to the Oracle CODASYL DBMS documentation on database
administration and design.
5.2.3 Storage Schema
The storage schema describes the physical structure of the database. It
is written by the DBA using data storage description language (DSDL)
For a complete description of the storage schema, refer to the
Oracle CODASYL DBMS documentation on database administration and design.
The subschema is a subset of the schema; it is your run unit's view of the database. The DBA uses the subschema DDL to write a subschema, defining only those areas, set types, record types, and data items needed by one or more run units. You specify a subschema to be used by your run unit with the DB statement. A subschema contains data description entries like the record description entries you use for file processing. However, subschema data description entries are not compatible with COBOL data description entries; the HP COBOL compiler must translate them. The translated entries are made available to the COBOL program at compile time. By using the /MAP compiler qualifier, you obtain a database map showing the translated entries as part of your program listing.
Many subschemas can exist for a database. For further information on
writing a subschema, refer to the Oracle CODASYL DBMS Database Administration Reference Manual.
A stream is an independent access channel between a run unit and a database. A stream has its own keeplists, locks, and currency indicators. You specify a stream to be used by your run unit with the DB statement. Streams let you do the following:
Because streams can lock against one another, it is possible to deadlock within a single process.
In HP COBOL, you can only specify one stream per separately compiled program. To access multiple subschemas within the same database or multiple databases, you must use multiple separately compiled programs and execute calls between the programs. For example, to gain multiple access to the databases OLD.ROO and NEW.ROO, you could set up a run unit as follows:
IDENTIFICATION DIVISION. PROGRAM-ID. MULTI-STREAM-1. DATA DIVISION. SUB-SCHEMA SECTION. DB PARTS1 WITHIN PARTS FOR "NEW.ROO" THRU STREAM-1. . . . CALL MULTI-STREAM-2 . . . END PROGRAM MULTI-STREAM-1. IDENTIFICATION DIVISION. PROGRAM-ID. MULTI-STREAM-2. DATA DIVISION. SUB-SCHEMA SECTION. DB DEFAULT_SUBSCHEMA WITHIN PARTS FOR "NEW.ROO" THRU STREAM-2. . . . CALL MULTI-STREAM-3. EXIT PROGRAM. IDENTIFICATION DIVISION. PROGRAM-ID. MULTI-STREAM-3. DATA DIVISION. SUB-SCHEMA SECTION. DB OLDPARTS1 WITHIN OLDPARTS FOR "OLD.ROO" THRU "STREAM-3". . . . EXIT PROGRAM.
In this run unit, the main program (MULTI-STREAM-1) accesses the database NEW.ROO through STREAM-1 and performs a call to a subprogram. The subprogram (MULTI-STREAM-2) accesses another subschema to the database NEW.ROO through STREAM-2 and calls another subprogram. This subprogram (MULTI-STREAM-3) accesses a second database (OLD.ROO) through STREAM-3.
STREAM-1, STREAM-2, and STREAM-3 are stream names. Stream names assign
a character string name to the database/subschema combination you
specify in your DB statement. For more information, refer to the
HP COBOL Reference Manual and the Oracle CODASYL DBMS documentation.
5.3 Using Oracle CDD/Repository
Oracle CODASYL schemas, storage schemas, and subschemas are stored in Oracle CDD/Repository. Oracle CDD/Repository separates data descriptions from actual data values that reside in VMS files. (For more information, refer to the Oracle CODASYL DBMS documentation on Common Data Dictionary Utilities and the Oracle CDD/Repository documentation.) Because of this separation, HP COBOL DML programs can be written independently of data. In addition, several subschemas can describe the same data according to their particular needs. This eliminates the need for redundant data and ensures data integrity.
At compile time, the COBOL DB statement, in effect, references
Oracle CDD/Repository to obtain the data descriptions of a specific subschema.
It is not until run time that the COBOL program has access to the
database data values.
5.4 Database Records
A database record, like a record in a file, is a named collection of elementary database data items. Records appear in the database as record occurrences. Oracle CODASYL DBMS records are linked into sets.
In HP COBOL database applications, you do not describe database records in the COBOL program. Rather, you must use the DB statement to extract and translate subschema record definitions into your COBOL program as COBOL record definitions.
Each record description entry defined by the DBA in the schema describes one record type (see Section 5.7). For example, in Figure 5-7, PART is one record type and SUPPLY is another record type. Any number of records can be stored in a database.
In Oracle CODASYL DBMS, records are also called record occurrences. Figure 5-6 shows one occurrence of PART record type and two occurrences of SUPPLY record type.
The subschema describes records that you can access in your program. Note that subschema record descriptions might define only a portion of a schema record. For example, if a schema record description is 200 characters long, a corresponding subschema record description could be less than 200 characters long and use different data types.
Individual database records are locked by the DBCS as they are retrieved
by the run unit, and the degree of locking depends on the specific
DML command used. For more information, see Section 6.1.1.
5.5 Database Data Item
A database data item is the smallest unit of named data. Data items
occur in the database as data values. These values can be character
strings or any of several numeric data types.
5.6 Database Key
A database key (dbkey) identifies a record in the database. The value
of the database key is the storage address of the database record.
You can use this key to refer to the record pointed to by a currency
indicator or an entry in a keeplist. For example, KEEP, FIND ALL, and
FREE statements store and release these values from a keeplist you
define in the subschema section.
5.7 Record Types
Records are grouped according to common features into record types. The database administrator (DBA) describes record types in the schema; record occurrences exist in the database. For example, a record that contains a specific part name, weight, and cost is a record occurrence. The PART record type, describing the structure of all occurrences of part records, would be defined in the schema. The unqualified term record implies record occurrence.