DTRHELP.HLB  —  Commands Statements Clauses
       These topics describe all DEC DATATRIEVE commands, statements and
       clauses.

       Only formats, arguments and examples are provided in Help. For
       full descriptions see the DEC DATATRIEVE Reference Manual.

1  –  : (EXECUTE)

       Invokes a DEC DATATRIEVE procedure.

       Format

         { :       }
         {         }  procedure-name
         { EXECUTE }
         {         }

1.1  –  Argument

    procedure-name

       Is the given name, full dictionary path name, or relative
       dictionary path name of the DEC DATATRIEVE procedure you want
       to invoke.

1.2  –  Examples

       The following example invokes a procedure to find the employee in
       PERSONNEL with the largest salary. It uses EXECUTE to invoke the
       procedure from the DIGITAL Command Language (DCL) level. In this
       example, DTR is the global symbol for invoking DEC DATATRIEVE.

       DTR> SHOW MAX_SALARY
       PROCEDURE MAX_SALARY
       READY PERSONNEL
       PRINT PERSONNEL WITH SALARY = MAX SALARY OF PERSONNEL
       END_PROCEDURE

       DTR> EXIT
       $ DTR EXECUTE MAX_SALARY

                          FIRST  LAST         START              SUP
        ID     STATUS     NAME   NAME  DEPT   DATE      SALARY   ID

       00012 EXPERIENCED CARLA  SPIVA  TOP 12-Sep-1972  $75,892 00012

       $

       The following example invokes a procedure three times. The
       procedure displays employees in a given department with salaries
       greater than $40,000.

       DTR> SHOW BIG_SALARY
       PROCEDURE BIG_SALARY
       FOR PERSONNEL WITH DEPT  = *."the department"
       BEGIN
         IF SALARY GT 40000
         THEN PRINT ID, NAME, DEPT,START_DATE, SALARY
       END
       END_PROCEDURE

       DTR> REPEAT 3
       CON> BEGIN
       CON>    :BIG_SALARY
       CON> END
       Enter the department: F11

               FIRST       LAST            START
        ID     NAME        NAME    DEPT    DATE     SALARY

       00891 FRED       HOWL       F11   9-Apr-1976 $59,594
       78923 LYDIA      HARRISON   F11  19-Jun-1979 $40,747

       Enter the department: T32

       38462 BILL       SWAY       T32   5-May-1980 $54,000
       83764 JIM        MEADER     T32   4-Apr-1980 $41,029

       Enter the department: TOP

       00012 CHARLOTTE  SPIVA      TOP  12-Sep-1972 $75,892

       DTR>

       The following example invokes a procedure to specify an edit
       string clause for a variable:

       DTR> DEFINE PROCEDURE E_S
       DFN> EDIT_STRING IS $$,$$$.99
       DFN> END_PROCEDURE
       DTR> DECLARE PRICE_PER_FT COMPUTED BY PRICE/LOA :E_S.
       DTR> PRINT TYPE, PRICE_PER_FT OF FIRST 5 YACHTS

                                 PRICE
                                  PER
       MANUFACTURER   MODEL       FT

        ALBERG      37 MK II     $998.68
        ALBIN       79           $688.46
        ALBIN       BALLAD       $916.67
        ALBIN       VEGA         $688.89
        AMERICAN    26           $380.58

       DTR>

2  –  @ (Invoke Command File)

       Invokes a command file.

       Format

         @  file-spec

2.1  –  Argument

    file-spec

       Is the file specification for the file you want to execute. A
       complete file specification has the following format:

       node-spec::device:[directory]file-name.type;version

2.2  –  Example

       The following example invokes a command file, BUILDER.COM, from
       DCL to produce a report on yachts by a specified builder.

       $ DATATRIEVE "@BUILDER"
       READY YACHTS
       REPORT YACHTS WITH BUILDER = *.BUILDER
       SET COLUMNS_PAGE = 70
       PRINT BOAT
       END_REPORT
       Enter BUILDER: ALBIN

                                                         11-Oct-1982
                                                         Page 1

                                     LENGTH
                                      OVER
       MANUFACTURER    MODEL    RIG   ALL   WEIGHT  BEAM   PRICE

        ALBIN        79        SLOOP   26    4,200   10   $17,900
        ALBIN        BALLAD    SLOOP   30    7,276   10   $27,500
        ALBIN        VEGA      SLOOP   27    5,070   08   $18,600

       $

3  –  ABORT Statement

       Stops the execution of a single statement, an entire procedure,
       or a command file.

       Format

         ABORT  [value-expression]

3.1  –  Argument

    value-expression

       Is a DEC DATATRIEVE value expression, usually a character string
       literal.

3.2  –  Examples

       The following example shows how to store a record in the YACHTS
       domain. If the value of the BEAM field is 0, the operation is
       aborted and a message is displayed.

       DTR> STORE YACHTS VERIFY USING
       [Looking for statement]
       DTR> IF BEAM EQ 0 THEN ABORT "Bad value for BEAM"
       Enter MANUFACTURER: AMERICAN
       Enter MODEL: 1980
       Enter RIG: SLOOP
       Enter LENGTH_OVER_ALL: 25
       Enter DISPLACEMENT: 7500
       Enter BEAM: 0
       Enter PRICE: 10000
       ABORT: Bad value for BEAM
       DTR>

       The following example shows how to define a procedure to write a
       report on the current collection and abort the entire procedure
       if there is no current collection to report on.

       DTR> DEFINE PROCEDURE YACHT_REPORT
       DFN> SET ABORT
       DFN> PRINT "HAVE YOU ESTABLISHED A CURRENT COLLECTION?"
       DFN> IF *."YES or NO" CONTAINING "N" THEN
       DFN>      ABORT "SORRY-NO COLLECTION, NO REPORT."
       DFN> REPORT
       DFN> PRINT BOAT
       DFN> AT BOTTOM OF REPORT PRINT COUNT, TOTAL PRICE
       DFN> END_REPORT
       DFN> END_PROCEDURE
       DTR> :YACHT_REPORT

       HAVE YOU ESTABLISHED A CURRENT COLLECTION?
       Enter YES or NO: NO
       ABORT: SORRY--NO COLLECTION, NO REPORT.
       DTR>

       In the following example, a procedure is defined to update the
       OWNERS domain after the sale of a boat. The boat is checked
       against the inventory in the YACHTS domain and the procedure
       is aborted if the boat is not in YACHTS. Then, the OWNERS domain
       is checked for a record of the boat. If a record exists, the
       owner's name is changed and the boat name is updated, if desired.
       If no record exists, a new record is stored in the OWNERS domain.
       The procedure requires MODIFY or WRITE access to OWNERS for the
       update and EXTEND or WRITE access for the entry of a new record.

       The example aborts because there is no YACHTS record for an
       ALBERG 42. The value expression specified in the ABORT statement
       includes the variables BLD and MOD.

       DTR> SHOW SALE_BOAT
       PROCEDURE SALE_BOAT
       READY YACHTS, OWNERS WRITE
       SET ABORT
       DECLARE BLD PIC X(10).
       DECLARE MOD PIC X(10).
       BLD = *."BUILDER'S NAME"
       MOD = *."MODEL"
       IF NOT ANY YACHTS WITH (BUILDER = BLD AND
              MODEL = MOD) THEN
              BEGIN
                 PRINT SKIP, "RECORD NOT FOUND IN YACHTS.", SKIP
                 ABORT "POSSIBLE INVENTORY ERROR FOR--"||BLD|||MOD
              END ELSE
              PRINT SKIP, "YACHTS RECORD FOUND FOR "|BLD|||MOD
       IF ANY OWNERS WITH (BUILDER = BLD AND
              MODEL = MOD) THEN
              BEGIN
                 FOR OWNERS WITH (BUILDER = BLD AND
                    MODEL = MOD)
                 MODIFY USING
                    BEGIN
                       PRINT COL 10, NAME, SKIP
                       NAME = *."NEW OWNER'S NAME"
                       PRINT COL 10, BOAT_NAME, SKIP
                       IF *."CHANGE BOAT NAME? Y/N"
                          CONTAINING "Y" THEN PRINT SKIP THEN
                          BOAT_NAME = *."NEW BOAT NAME"
                       END
              END ELSE

              STORE OWNERS USING
              BEGIN
                 NAME = *."NEW OWNER'S NAME"
                 BOAT_NAME = *."BOAT NAME"
                 BUILDER = BLD
                 MODEL = MOD
              END
       END_PROCEDURE
       DTR> :SALE_BOAT
       Enter BUILDER'S NAME: ALBERG
       Enter MODEL: 42
       RECORD NOT FOUND IN YACHTS.
       ABORT: POSSIBLE INVENTORY ERROR FOR--ALBERG 42
       DTR>

4  –  ADT Command

       Invokes the Application Design Tool (ADT), an interactive aid
       that helps you define a domain, its associated record, and its
       data file.

       Format

         ADT

4.1  –  Arguments

       None.

4.2  –  Example

       Invoke the Application Design Tool:

       DTR> ADT
       Do you want detailed prompts? (YES or NO) :

       See the Computer Based Training Package (CBT) for a sample ADT
       session.

5  –  ALLOCATION Clause

       Specifies the type of word boundary alignment DEC DATATRIEVE
       uses when storing records in a data file associated with a record
       definition. It also controls the way DEC DATATRIEVE retrieves
       data from files created by user programs or other applications
       software.

       Format

                          { MAJOR_MINOR         }
         ALLOCATION [IS]  { ALIGNED_MAJOR_MINOR }
                          { LEFT_RIGHT          }
                          {                     }

5.1  –  Arguments

    MAJOR_MINOR

       Causes DEC DATATRIEVE to use MAJOR_MINOR alignment when storing
       or retrieving data in a data file. MAJOR_MINOR forces word
       boundary alignments according to data types for elementary fields
       defined with the SYNCHRONIZED clause and forces group fields
       to the maximum alignment of the elementary fields they contain.
       MAJOR_MINOR is the default for DEC DATATRIEVE.

    ALIGNED_MAJOR_MINOR

       Causes DEC DATATRIEVE to use ALIGNED_MAJOR_MINOR alignment when
       storing or retrieving data in a data file. ALIGNED_MAJOR_MINOR
       forces word boundary alignments according to data types for all
       elementary fields in the record and group fields to the maximum
       alignment of the elementary fields they contain.

    LEFT_RIGHT

       Causes DEC DATATRIEVE to use LEFT_RIGHT alignment when storing or
       retrieving data in a data file. LEFT_RIGHT forces word boundary
       alignment for elementary fields defined as COMP, COMP_1, COMP_2,
       and DATE.

5.2  –  Example

       The following example shows the use of the ALLOCATION clause with
       the YACHT record:

       DELETE YACHT;
       REDEFINE RECORD YACHT OPTIMIZE
       ALLOCATION IS LEFT_RIGHT
       01 BOAT.
         03 TYPE.
            06 MANUFACTURER PIC X(10)
               QUERY_NAME IS BUILDER.
            06 MODEL PIC X(10).
         03 SPECIFICATIONS
            QUERY_NAME SPECS.
            06 RIG PIC X(6)
               VALID IF RIG CONT "SLOOP","KETCH","MS","YAWL".
            06 LENGTH_OVER_ALL PIC XXX
               VALID IF LOA BETWEEN 15 AND 50
               QUERY_NAME IS LOA.
            06 DISPLACEMENT PIC 99999
               QUERY_HEADER IS "WEIGHT"
               EDIT_STRING IS ZZ,ZZ9
               QUERY_NAME IS DISP.
            06 BEAM PIC 99 MISSING VALUE IS 0.
            06 PRICE PIC 99999
               MISSING VALUE IS 0
               VALID IF PRICE>DISP*1.3 OR PRICE EQ 0
               EDIT_STRING IS $$$,$$$.
       ;

6  –  Assignment Statements

       An Assignment statement assigns a value to an elementary field, a
       group field, or a variable.

       To assign a value to an elementary field the format is:
       field-name = value-expression

       To assign a value to a group field the format is:
       group-field-name-1 = group-field-name-2

       To assign a value to a variable the format is:
       variable-name = value-expression

7  –  AT Clauses

       AT clauses can be used in FOR loops only.

       An AT TOP clause specifies that when a group starts, the
       statement in the AT TOP clause has to be executed before
       executing the main code in the FOR loop. An AT BOTTOM clause
       specifies that an action has to be executed after the last record
       of a group has been processed and before the first record in the
       next group.

       Format

         AT BOTTOM OF  field-name [,...] statement

         AT TOP OF  field-name [,...] statement

7.1  –  Arguments

    field-name

       Is a field from the record definition for the loop's record
       stream.

    statement

       Is a DATATRIEVE statement.

7.2  –  Example

       In the following example the first AT BOTTOM clause is ignored
       because it is contained in an IF statement.

       DTR> DECLARE VAR PIC 9. ;
       DTR> READY CDD$TOP.DTR$LIB.DEMO.YACHTS ;
       DTR> VAR = 0 ;
       DTR> FOR FIRST 2 YACHTS
       CON>     BEGIN
       CON>     IF VAR EQ 0 THEN
       CON>            BEGIN
       CON>            AT BOTTOM OF MODEL PRINT "Model change";
       CON>            END ;
       CON>     AT BOTTOM OF BUILDER PRINT "Builder change";
       CON>     IF VAR GT 0 THEN
       CON>            BEGIN
       CON>            AT TOP OF MODEL PRINT "start model";
       CON>            END ;
       CON>     PRINT MODEL , BUILDER ;
       CON>     END ;

         MODEL    MANUFACTURER

       37 MK II    ALBERG
       Builder change
       79          ALBIN
       Builder change

       DTR>

8  –  AT Statements (Report Writer)

       The Report Writer AT statements display header and summary lines
       at the top and bottom of the report, and at the top and bottom of
       pages and control groups (groups of sorted records with the same
       value in one or more fields).

       The AT TOP statement summarizes information for the entire group
       of records in the current collection, not the records of the
       page, group, or report that you specify in the statement.

       The AT BOTTOM statement calculates the summary information based
       on the records of the page, group, or report that you specify in
       the statement.

       With the two forms of the AT statement, you can specify the
       value, position, and format of the print objects in the header
       and summary lines:

       The AT statements accept the same types of print objects as a
       PRINT statement.

       Format

                       { REPORT     }
         AT BOTTOM OF  { PAGE       } PRINT summary-element [, ...]
                       { field-name }
                       {            }

                    { REPORT     }           { header-element  }
         AT TOP OF  { PAGE       }   PRINT   {                 } [, ...]
                    { field-name }           { summary-element }
                    {            }

8.1  –  Arguments

    field-name

       Is a field from the record definition for the report's record
       stream or a variable.

    header-element

       Specifies the value, position, and format of the fields.

8.2  –  Examples

       The following example shows the use of both the AT BOTTOM and AT
       TOP statements:

       DTR> SHOW SALARY_REPORT

       PROCEDURE SALARY_REPORT
       REPORT PERSONNEL WITH DEPT = "D98","E46","T32" SORTED BY DEPT
       SET REPORT_NAME = "SALARY REPORT"
       SET COLUMNS_PAGE = 60
       AT TOP OF DEPT PRINT DEPT
       PRINT ID, FIRST_NAME|||LAST_NAME ("NAME"), SALARY
       AT BOTTOM OF DEPT PRINT SKIP,
             COL 36, DEPT|||"TOTAL:",
             TOTAL SALARY USING $$$$,$$$, SKIP, COL 13,
             "***********************************",
             SKIP, COL 32, "OVERALL TOTAL:", COL 50,
             RUNNING TOTAL (TOTAL SALARY) USING $$$$,$$$, SKIP
       END_REPORT
       END_PROCEDURE

       See the DEC DATATRIEVE User's Guide for more examples of the AT
       TOP statement.

9  –  BEGIN END Statement

       Groups DEC DATATRIEVE statements into a single compound statement
       called a BEGIN-END block.

       Format

         BEGIN

            statement-1

            [statement-2]
               .
               .
               .

         END

9.1  –  Arguments

    BEGIN

       Marks the beginning of a BEGIN-END block.

    statement

       Is a DEC DATATRIEVE statement. Within the BEGIN-END block, end
       each statement with a semicolon, a RETURN, or both.

    END

       Marks the end of the BEGIN-END block.

9.2  –  Examples

       The following example shows how to store five records in the
       domain PHONES, each having LOCATION MB1-H2 and DEPARTMENT CE.
       The SET NO PROMPT command suppresses the "[Looking for . . .]"
       prompts preceding each CON> prompt. This example also shows how
       DEC DATATRIEVE responds to CTRL/C and CTRL/Z when it is prompting
       you for input.

       DTR> READY PHONES WRITE
       DTR> SET NO PROMPT
       DTR> REPEAT 5 STORE PHONES USING
       DTR> BEGIN
       CON>      NAME=       *.NAME
       CON>      NUMBER=     *.NUMBER
       CON>      LOCATION=   "MB1-H2"
       CON>      DEPARTMENT= "CE"
       CON> END
       Enter NAME: FRED
       Enter NUMBER: 555-1234
       Enter NAME: GERRY
       Enter NUMBER: <CTRL/C>
       ^C
       Enter NUMBER: <CTRL/Z>
       Execution terminated by operator
       DTR>

       The following example shows how to use a BEGIN-END block to put
       three statements in the USING clause of a MODIFY statement, print
       a YACHTS record, modify the price, and print the result of the
       modification:

       DTR> READY YACHTS WRITE
       DTR> SET NO PROMPT
       DTR> FOR YACHTS WITH PRICE = 0
       CON> MODIFY USING
       CON> BEGIN
       CON>          PRINT
       CON>          PRICE = *."NEW PRICE"
       CON>          PRINT
       CON> END

                                     LENGTH
                                      OVER
       MANUFACTURER  MODEL     RIG    ALL   WEIGHT BEAM  PRICE

        BLOCK I.    40         SLOOP   39    18,500  12
       Enter NEW PRICE: 30000

                                     LENGTH
                                      OVER
       MANUFACTURER  MODEL     RIG    ALL   WEIGHT BEAM  PRICE

        BLOCK I.    40         SLOOP   39    18,500  12  $30,000
        BUCCANEER   270        SLOOP   27     5,000  08
       Enter NEW PRICE: <CTRL/Z>
       Execution terminated by operator

       DTR>

       The following example shows how a BEGIN-END block is treated as a
       single statement:

       DTR> DEFINE PROCEDURE LOOP_EXAMPLE
       DFN> PRINT "SHOW HOW A BEGIN-END WORKS WITH REPEAT"
       DFN> PRINT "AND MORE THAN ONE STATEMENT"
       DFN> END_PROCEDURE
       DTR>
       DTR> REPEAT 2 :LOOP_EXAMPLE
       SHOW HOW A BEGIN-END WORKS WITH REPEAT
       SHOW HOW A BEGIN-END WORKS WITH REPEAT
       AND MORE THAN ONE STATEMENT

       DTR> REPEAT 2 BEGIN :LOOP_EXAMPLE; END
       SHOW HOW A BEGIN-END WORKS WITH REPEAT
       AND MORE THAN ONE STATEMENT
       SHOW HOW A BEGIN-END WORKS WITH REPEAT
       AND MORE THAN ONE STATEMENT

       DTR>

10  –  CDO Command

       Passes a command line to the Common Dictionary Operator (CDO)
       utility.

       Format

         CDO  cdo-command-line

10.1  –  Argument

    cdo-command-line

       Is a command line to be passed to the CDO.

10.2  –  Example

       In the following example, a change in field definition FLD_
       A causes a message to be displayed when you READY MY_DB. The
       message is displayed and cleared and the CLEAR NOTICES command is
       verified using the CDO command.

       DTR> CDO SHOW NOTICES MY_DB
       USR$DISK:[RICK.TEST]GLOBAL.MY_DB;1 is possibly invalid, triggered
       by CDD$DATA_ELEMENT USR$DISK:[RICK.TEST]GLOBAL.FLD_A;1

       DTR> CDO CLEAR NOTICES MY_DB
       DTR> CDO SHOW NOTICES MY_DB
       %CDO-I-NOMESSAGES, USR$DISK:[RICK.TEST]GLOBAL.MY_DB;1 has no notices
       DTR>

11  –  CHOICE Statement

       Causes DEC DATATRIEVE to execute one of a series of statements
       or compound statements, depending on the evaluation of a series
       of conditional (Boolean) expressions. The CHOICE statement is a
       convenient substitute for nested IF-THEN-ELSE statements.

       Format

         CHOICE  [OF]

              boolean-expression-1 [THEN] statement-1
              [boolean-expression-2 [THEN] statement-2]
                         .         .      .
                         .         .      .
                         .         .      .
              [ELSE statement-n]

         END_CHOICE

11.1  –  Arguments

    CHOICE

       Marks the beginning of a CHOICE statement.

    OF

       Is an optional language element you can use to clarify syntax.

    boolean-expression

       Is a Boolean expression.

    THEN

       Is an optional language element you can use to clarify syntax.

    statement

       Is a simple or compound statement you want DEC DATATRIEVE to
       execute if the corresponding Boolean expression evaluates to
       true.

    ELSE statement-n

       Specifies the statement you want DEC DATATRIEVE to execute if all
       the preceding Boolean expressions evaluate to false.

    END_CHOICE

       Marks the end of the CHOICE statement.

11.2  –  Examples

       The following example shows how to define a procedure MODIFY_
       YACHTS, prompt the user to identify a record by specifying the
       BUILDER and MODEL of a yacht, and print the record, prompting
       the user to modify a field from YACHTS. This process is continued
       until the user replies to a prompt that no further changes need
       to be made.

       DTR> SHOW MODIFY_YACHTS
       PROCEDURE MODIFY_YACHTS
       READY YACHTS WRITE
       FOR YACHTS WITH BUILDER = *."the builder" AND
             MODEL = *."the model"
       BEGIN
         PRINT
         PRINT SKIP
         PRINT "The fields you can modify are: RIG,LOA,DISP,BEAM,PRICE"
         MODIFY USING
         WHILE *."Y to modify a field, N to exit" CONT "Y"
           BEGIN
             DECLARE FLD PIC X(5).
             FLD = *."field to modify"
             CHOICE
                  FLD = "RIG" THEN RIG = *.RIG
                  FLD = "LOA" THEN LOA = *.LOA
                  FLD = "DISP" THEN DISP = *.DISP
                  FLD = "BEAM" THEN BEAM = *.BEAM
                  FLD = "PRICE" THEN PRICE = *.PRICE
                  ELSE PRINT "That's not a field in YACHTS."
             END_CHOICE
             PRINT
             PRINT SKIP
           END
         PRINT SKIP, "No more changes."
       END
       END_PROCEDURE

       DTR> :MODIFY_YACHTS
       Enter the builder: ALBIN
       Enter the model: 79

                                      LENGTH
                                       OVER
       MANUFACTURER   MODEL     RIG    ALL   WEIGHT BEAM  PRICE

        ALBIN       79         SLOOP   26     4,200  10  $17,900

       The fields you can modify are: RIG, LOA, DISP, BEAM, PRICE
       Enter Y to modify a field, N to exit: Y
       Enter field to modify: RIG
       Enter RIG: KETCH

                                      LENGTH
                                       OVER
       MANUFACTURER   MODEL     RIG    ALL   WEIGHT BEAM  PRICE

        ALBIN       79         KETCH   26     4,200  10  $17,900

       Enter Y to modify a field, N to exit: Y
       Enter field to modify: RUG
       That's not a field in YACHTS.
        ALBIN       79         KETCH   26     4,200  10  $17,900

       Enter Y to modify a field, N to exit: N

       No more changes.

       DTR>

       The following example shows how to print the TYPE and PRICE of
       the yachts by ALBERG and ALBIN, indicating whether the price
       is inexpensive, moderate, or expensive. Column headers are
       suppressed:

       DTR> READY YACHTS
       DTR> FOR YACHTS WITH BUILDER = "ALBERG" OR BUILDER = "ALBIN"
       CON> CHOICE
       CON> PRICE LT 20000 THEN PRINT TYPE(-),PRICE(-),"INEXPENSIVE"
       CON> PRICE LT 30000 THEN PRINT TYPE(-),PRICE(-),"MODERATE"
       CON> ELSE PRINT TYPE(-), PRICE(-), "EXPENSIVE"
       CON> END_CHOICE

       ALBERG     37 MK II   $36,951 EXPENSIVE
       ALBIN      79         $17,900 INEXPENSIVE
       ALBIN      BALLAD     $27,500 MODERATE
       ALBIN      VEGA       $18,600 INEXPENSIVE

       DTR>

12  –  CLOSE Command

       Closes a Record Management System (RMS) trace file you created
       with an OPEN command as a log for your interactive dialogue with
       DEC DATATRIEVE.

       Format

         CLOSE

12.1  –  Arguments

    None.

12.2  –  Example

       The following example shows a CLOSE command:

       DTR> CLOSE

13  –  COMMIT Statement

       Makes permanent all the changes you made to relational and Oracle
       CODASYL DBMS databases since the most recent COMMIT or ROLLBACK
       statement or, if you have not performed a COMMIT or ROLLBACK,
       since the first database READY command.

       The COMMIT statement does not affect collections; collections
       are maintained. For Oracle CODASYL DBMS databases, the COMMIT
       statement performs a COMMIT RETAINING. For relational databases,
       the COMMIT statement starts a new transaction that gives you a
       new look at the database.

       When you have both relational and Oracle CODASYL DBMS databases
       readied, the COMMIT statement commits all Oracle CODASYL DBMS and
       relational databases, regardless of whether you made any changes
       to their data.

       Domains based on RMS files are not affected by the COMMIT
       statement.

       Format

         COMMIT

13.1  –  Arguments

    None.

13.2  –  Examples

       The following Oracle CODASYL DBMS example connects an employee
       named Hill to a part LA36 in the RESPONSIBLE_FOR set. The COMMIT
       statement makes this change permanent.

       DTR> FIND E IN EMPLOYEES WITH EMP_LAST_NAME = "HILL"
       DTR> SELECT 1
       DTR> FOR P IN PART WITH PART_DESC = "LA36"
       CON>   CONNECT P TO E.RESPONSIBLE_FOR
       DTR> COMMIT

       DTR>

       The following relational database example stores a record in
       the relation DEPARTMENTS. The COMMIT statement makes this change
       permanent:

       DTR> READY DATABASE PERSONNEL USING DEPARTMENTS WRITE
       DTR> STORE DEPARTMENTS
       Enter DEPARTMENT_CODE: SENG
       Enter DEPARTMENT_NAME: SOFTWARE ENGINEERING
       Enter MANAGER_ID: 87215
       DTR> COMMIT

       DTR>

14  –  COMPUTED BY Clause

       Describes a COMPUTED BY field.

       Format

         COMPUTED BY  value-expression

14.1  –  Argument

    value-expression

       Is a DEC DATATRIEVE value expression.

14.2  –  Examples

       In the following example, the price per pound of a yacht is
       computed as the price divided by the displacement. In this
       case, both the PRICE and DISP fields are defined in the record
       definition.

       06 PRICE_PER_POUND
          EDIT_STRING $$$,$$9.99
          COMPUTED BY PRICE/DISP.

       When the PRICE_PER_POUND field is used in a command or statement,
       DEC DATATRIEVE divides the value of the record's PRICE field by
       the value of its DISP field. The result of the computation is the
       value of the PRICE_PER_POUND field.

       In the following example, the discount price of a yacht is
       computed. The amount of the discount varies with the price of
       a yacht. The field PRICE is defined in the record definition for
       YACHTS:

       06 DISCOUNT_PRICE   COMPUTED BY
                 CHOICE
                    PRICE LT 20000 THEN (PRICE * .9)
                    PRICE LT 30000 THEN (PRICE * .8)
                    PRICE LT 40000 THEN (PRICE * .7)
                    ELSE (PRICE * .6)
                 END_CHOICE
                 EDIT_STRING IS $$$,$$$.

       When DISCOUNT_PRICE is used in a command or statement, DEC
       DATATRIEVE evaluates each Boolean expression in order until one
       evaluates to true. Then it performs the corresponding computation
       on PRICE.

       In the following example, the value of the SALESFORCE field is
       derived from a dictionary or domain table named SALES_TABLE:

       06 SALESFORCE
          EDIT_STRING IS X(20)
          COMPUTED BY MANUFACTURER VIA SALES_TABLE.

       In this example, DEC DATATRIEVE uses the value of the
       MANUFACTURER field in the current record to search the dictionary
       or domain table SALES_TABLE for a matching code. If one is
       found, DEC DATATRIEVE uses its translation as the value of the
       SALESFORCE field.

15  –  CONNECT Statement

       Makes explicit connections between a record and the Oracle
       CODASYL DBMS sets you specify in the TO list. Before establishing
       the connections, DEC DATATRIEVE sets up a currency indicator for
       each set specified in the TO list.

       Format

         CONNECT  context-name-1

                  [TO] {[context-name-2.] set-name-1} [,...]

15.1  –  Arguments

    context-name-1

       Is the name of a valid context variable or the name of a
       collection with a selected record. It must identify a record
       occurrence of a domain with a record type that participates in
       the specified set type. That record must not be a member of the
       sets specified by the TO list, but its record type must be a
       valid member type in the specified set types.

    context-name-2

       Is the name of a valid context variable or the name of a
       collection with a selected record. It must identify a record that
       participates in the specified set. If the SYSTEM owns the set,
       you do not need to establish a context for the set. If the set is
       not owned by the SYSTEM and the context name is not present, DEC
       DATATRIEVE uses the most recent single record context of a domain
       with a record type that participates in the specified set type.

    set-name

       Is the name of a set type.

15.2  –  Example

       The following example connects an employee named Hill to a part
       LA36 in the RESPONSIBLE_FOR set. P and E in the following example
       are context names. E refers to a collection with a selected
       record and P to a record stream. The records in these contexts
       are all owner records or member records in the set.

       DTR> FIND E IN EMPLOYEES WITH EMP_LAST_NAME = "HILL"
       DTR> SELECT 1
       DTR> FOR P IN PART WITH PART_DESC = "LA36"
       CON>   CONNECT P TO E.RESPONSIBLE_FOR
       DTR>

16  –  CROSS Clause

       You use the CROSS clause to perform the following tasks:

       o  Compare records from one domain or collection

       o  Combine records from two or more domains or collections

       o  Flatten hierarchical domains to ease access to the list items

       Format

         CROSS  [context-variable IN]  rse-source

                [OVER field-name]  [...]

16.1  –  Arguments

    context-variable

       Is the name of a valid context variable. A context variable is a
       temporary name that identifies a record stream to DEC DATATRIEVE.

    rse-source

       Is the record selection expression (RSE) that identifies the
       records you want to work with.

    field-name

       Is a field whose values form the basis for the cross operation.

16.2  –  Example

       The following query uses one RSE that includes five out of the
       six optional elements of an RSE. DEC DATATRIEVE processes the
       query far faster than if nested FOR loops were used:

       DTR> DEFINE PROCEDURE CROS
       DFN> READY YACHTS
       DFN> PRINT BUILDER, RIG, A.RIG OF
       DFN>   A IN YACHTS CROSS YACHTS OVER BUILDER WITH
       DFN>   RIG GT A.RIG REDUCED TO BUILDER, RIG, A.RIG
       DFN> END_PROCEDURE

       DTR> :CROS

       MANUFACTURER  RIG    RIG

        AMERICAN    SLOOP  MS
        CHALLENGER  SLOOP  KETCH
        GRAMPIAN    SLOOP  KETCH
        IRWIN       SLOOP  KETCH
        ISLANDER    SLOOP  KETCH
        NORTHERN    SLOOP  KETCH
        PEARSON     SLOOP  KETCH

       DTR>

17  –  DATATRIEVE Command

       The DCL command DATATRIEVE starts a DEC DATATRIEVE session. This
       DCL command lets you specify several optional qualifiers that let
       you customize your DEC DATATRIEVE session.

       Format

                     [             {DECWINDOWS      } ]
                     [ /INTERFACE= {                } ]
         DATATRIEVE  [             {CHARACTER_CELL  } ] ["DATATRIEVE"]
                     [ /[NO]DEBUG                     ]
                     [ /VARIANT=image-suffix          ]
                     [                                ]

17.1  –  Arguments

    /INTERFACE = { DECWINDOWS     }
                 { CHARACTER_CELL }

       Specifies the display interface to be used by DEC DATATRIEVE.
       If your default environment is the command line interface, then
       CHARACTER_CELL is the default. If your system is properly defined
       to invoke the DECwindows Motif interface, then DECwindows Motif
       is the default. This qualifier overrides the setting specified by
       the DTR$NOWINDOWS logical.

    /[NO]DEBUG

       Specifies whether DEC DATATRIEVE should display special debug
       messages. The default is NODEBUG.

    /VARIANT = image-suffix

       Indicates the 1- to 26-character suffix applied to a DEC
       DATATRIEVE image upon installation to uniquely identify that
       image. This qualifier is needed only if you invoke a DEC
       DATATRIEVE image that was not selected as the default image at
       installation time. If the default image you are running includes
       a suffix and you want to run an image that does not include a
       suffix, use the /VARIANT qualifier alone, as in the following
       example:

           $ DATATRIEVE/VARIANT

    "DATATRIEVE"

       Specifies a DEC DATATRIEVE command or statement that is to be
       executed by DEC DATATRIEVE. It allows the user to execute a DEC
       DATATRIEVE command, statement, or procedure without entering
       interactive DEC DATATRIEVE. If the DEC DATATRIEVE argument
       contains more than one word, it must be placed in quotation
       marks.

17.2  –  Example

       The following example shows how to execute the DEC DATATRIEVE
       SHOW DICTIONARY command without entering interactive DEC
       DATATRIEVE.

       $ DATATRIEVE/INTERFACE=CHARACTER_CELL "SHOW DICTIONARY"

       The default directory is _CDD$TOP.DTR$LIB.DEMO

       $

18  –  DECLARE DATABASE Command

       Creates a temporary database object that specifies a relational
       database (Format 1) or a Oracle CODASYL DBMS database instance
       (Format 2).

       Format 1

         DECLARE DATABASE  rdb-database-name  ON  root-file-spec;

       Format 2

         DECLARE DATABASE  dbms-database-name

              [USING]  [SUBSCHEMA]  subschema-name

              [OF]  [SCHEMA]  schema-path-name

              ON  root-file-spec;

18.1  –  Arguments

    rdb-database-name

       Is the name of the relational database you want to declare.
       It must be a simple name.

    root-file-spec

       Is the name of the database root file. For relational databases,
       the default file type is .RDB; for Oracle CODASYL DBMS, the
       default file type is .ROO. A complete file specification has
       the following format:

       node-spec::device:[directory]file-name.type;version

    dbms-database-name

       Is the name you choose for the Oracle CODASYL DBMS database
 instance.
       It must be a simple name.

    subschema-name

       Is the name of a subschema for the specified schema.

    schema-path-name

       Is the dictionary path name of a Oracle CODASYL DBMS schema.

    ;(semicolon)

       Ends the DECLARE DATABASE command.

18.2  –  Examples

       Declare a relational database object:

       DTR> DECLARE DATABASE MY_DB ON DTR$LIBRARY:PERSONNEL.RDB ;
       DTR>

       Declare a Oracle CODASYL DBMS database instance. The Oracle
       CDD/Repository path name of the schema is
       CDD$COMPATIBILITY.DTR$LIB.DEMO.DBMS.PARTS.
       The name of the subschema is DTR_SUBSCHEMA,
       and the root file is DTR$LIBRARY:DTRPARTDB.ROO:

       DTR> DECLARE DATABASE MY_PARTS_DB USING SUBSCHEMA DTR_SUBSCHEMA
       DFN> OF SCHEMA CDD$COMPATIBILITY.DTR$LIB.DEMO.DBMS.PARTS
       DFN> ON DTR$LIBRARY:DTRPARTDB.ROO ;

19  –  DECLARE DOMAIN Command

       Creates the temporary definition of a DATATRIEVE domain.

       The following sections explain how to declare domains for
       CDD$DATABASE objects, Oracle CODASYL DBMS databases, network
       domains based on domains residing at other DECnet[TM] nodes,
       domains based on relational databases, domains based on single
       RMS files, and views based on one or more domains.

       Format

         To declare a CDD$DATABASE domain, use the following syntax:

         DECLARE DOMAIN  domain-name  [USING]  database-name

             [FORM [IS] form-name [IN] file-name [USING exchange-rec]]
             [WITH]  RELATIONSHIPS ;

         To declare a Oracle CODASYL DBMS domain, use the following
         syntax:

         DECLARE DOMAIN  domain-name  [USING]  record-name

             [OF]  [DATABASE]  database-path-name

             [FORM [IS] form-name [IN] file-name [USING exchange-rec]] ;

         To declare a network domain, use the following syntax:

         DECLARE DOMAIN  domain-name [USING] remote-path-name AT
                        node-spec

             [FORM  [IS]  form-name  [IN] file-name [USING exchange-rec]]

             [[WITH] RELATIONSHIPS] ;

         To declare a relational domain, use the following syntax:

         DECLARE DOMAIN  domain-name [USING] relation-name

             [OF]  [DATABASE]  database-path-name

             [FORM [IS] form-name [IN] file-name [USING exchange-rec]]

             [[WITH] RELATIONSHIPS] ;

         To declare a domain based on a RMS file, use the following
         syntax:

         DECLARE DOMAIN  domain-name [USING] record-path-name ON
 file-spec

             [FORM [IS] form-name [IN] file-name [USING exchange-rec]]

             [[WITH]  RELATIONSHIPS] ;

       To declare a view domain, use the following syntax:

       DECLARE DOMAIN view-name OF domain-name-1 [,...][BY   ]
               [USING]

           level-number-1  field-name-1    OCCURS FOR rse-1.

           level-number-2  field-name-2  { OCCURS FOR rse-n        } .
             { FROM domain-name-n }

             .         .                   .
             .         .                   .
             .         .                   .

           [FORM [IS] form-name [IN] file-name [USING exchange-rec]]

           [[WITH] RELATIONSHIPS] ;

19.1  –  Arguments

    domain-name

       Is the name of the domain you are declaring.
       It must be a simple name.

    database-name

       Is the name of a CDD$DATABASE object, defined through CDO using
       the DEFINE DATABASE command, that points to a CDD$RMS_DATABASE
       object. Refer to the Oracle CDD/Repository documentation for more
       information on CDD$RMS_DATABASE objects.

    record-name
       Is the name of a record type contained in a subschema of the
       specified Oracle CODASYL DBMS database.

    database-path-name

       Is the DEC DATATRIEVE definition of the database instance.
       It is a dictionary pathname.

    remote-path-name

       Is the given name, full dictionary path name, or relative
       dictionary path name of a domain definition at another node
       in a network of computers linked by DECnet. That domain, the
       associated record definition, and the associated data file must
       already exist in the data dictionary at the remote node before
       you can ready the network domain.
       It is a dictionary pathname.

    node-spec

       Specifies the network address.

       If the login procedure used by the remote process does not
       supply the necessary login information (user name, password,
       and, optionally, account name), either the person readying the
       network domain or the network domain definition must supply this
       information.

       You can use any of the following formats to specify the network
       address and to provide the best level of access security for your
       installation:

          node-name"username password [account-name]")

          Examples of this format are:

          BIGVAX"WARTON KNOCKKNOCK DEPT32"

          ELEVEN"LINTE LETMEIN"

          When you specify the network address using this format, users
          do not have to supply login information when readying the
          network domain.

          node-name"*.username-prompt *.password-prompt [*.account-prompt]"

          Examples of this format are:

          WINKEN"*.USERNAME *.PASSWORD *.ACCOUNT"

          VAXTWO"*.'user name' *.'password'"

          PDPTWO"*.'user name' *.'password'"

          When you specify the network address using this format, users
          are prompted for login information when they ready the network
          domain. This method provides the best security.

          node-name

          Two examples of this format are:

          BIGVAX

          DEC:.zko.star

          Note that Poor Man's Routing is not accepted in AT clauses.

          When you specify the network address with this format,
          the account used by the remote process must provide login
          information automatically.

       If you prefer, you can combine elements from the first two
       formats. For example, you can explicitly specify the user name
       and specify a prompting value expression for the password:

       SNOOPY"CLARK *.PASSWORD"

    relation-name

       Is the name assigned to the relation when the database was
       created.

    record-name

       Is the given name, full dictionary path name, or relative
       dictionary path name of the record definition to be associated
       with the domain. You must enter the permanent or temporary
       definition of this record (with the DEFINE RECORD or the DECLARE
       RECORD commands) before you can ready the domain.

    file-spec

       Is the OpenVMS file specification of the RMS file containing
       the data for the domain. This file must exist when you ready the
       domain. A complete file specification has the following format:

       node-spec::device:[directory]file-name.type;version

    view-name

       Is the name of the view being defined.
       It must be a simple name.

    domain-name-1

       Is either the given name, full dictionary path name, or relative
       dictionary path name of a domain containing records to be
       included in the view. If the domain name is a domain path name,
       it cannot duplicate the name of the view. When specifying more
       than one domain path name, use a comma to separate each name from
       the next.

    level-number

       Is the level number for a field in the view definition.

    field-name

       Is the name of a field in the view definition. If field-name is
       followed by an OCCURS FOR clause, field-name has no relationship
       to any field in the domain or domains specified in the RSE.
       Whether or not field-name is the same as the names of any of
       those fields does not matter. If field-name is followed by a
       FROM clause, field-name must be the name of a field in a domain
       specified in the OF domain-name-1 [,...] clause.

    OCCURS FOR rse

       Indicates that the associated field is to be included in the view
       only for those records specified by the RSE. The RSE must contain
       a reference to one of the domains, relations, or Oracle CODASYL
       DBMS records listed in the OF clause.

    FROM domain-name

       Indicates that the definition of the associated field is
       identical to that of the field of the same name in the domain,
       relation, or Oracle CODASYL DBMS record specified by domain-name-
       n. The argument domain-name must be the same as that used in the
       preceding OCCURS FOR clause.

    . (period)

       Ends a field definition.

    form-name

       Is a form name.

    file-name

       For VAX TDMS and DEC FMS[TM] forms it is the name of a form
       library. For DECforms[TM] forms it is the form file name,
       which can either be a .FORM or a .EXE file. A complete file
       specification has the following format:

       node-spec::device:[directory]file-name.type;version

    exchange-rec

       Is the path name of a record used to send and receive data
       with DECforms.

    RELATIONSHIPS

       It is ignored except in the declaration of a CDD$DATABASE
       domain where it is required to specify the characteristics
       of the related object.

    ; (semicolon)
       Ends the domain definition.

19.2  –  Examples

       Declare the DATATRIEVE domain D0 as pointing to the
       CDD$DATABASE database D_CDD$DATABASE.

       DTR> DECLARE DOMAIN D0 USING D_CDD$DATABASE WITH RELATIONSHIPS ;

       Declare the Oracle CODASYL DBMS domain D2. The name of the
       record-type is VENDOR, and the name of the database instance is
       CDD$TOP.DTR$LIB.DEMO.DBMS.PARTS_DB.
       The domain definition includes the FORM clause.

       DTR> DECLARE DOMAIN D2
       DFN>     USING VENDOR OF DATABASE CDD$TOP.DTR$LIB.DEMO.DBMS.PARTS_DB
       DFN>     FORM IS EMPFOR IN FORMS:PARTS.FLB;
       DTR>

       Declare a network domain called REMOTE_YACHTS:

       DTR> DECLARE DOMAIN REMOTE_YACHTS USING
       DFN>    CDD$TOP.DTR$LIB.DEMO.YACHTS AT
       DFN>    VAX32"SMITH ADRIENNE" FORM IS YACHT1 IN DTRFRM;
       DTR>

       The following example declares a DEC DATATRIEVE domain that
       automatically uses a form. The domain is declared for the relation
       EMPLOYEES.

       DTR> DECLARE DOMAIN EMPLOYEES
       DFN>     USING EMPLOYEES OF DATABASE PERSONNEL
       DFN>     FORM IS EMPFOR IN FORMSLIB;
       DTR>

       Declare the domain PHONES. Use the record definition PHONE_REC
       that is cataloged in the directory CDD$TOP.DEPARTMENT. Specify
       PHONE.DAT as the data file:

       DTR> DECLARE DOMAIN PHONES USING
       DFN> CDD$TOP.DEPARTMENT.PHONE_REC ON PHONE.DAT;
       DTR>

       Declare a view of yacht and owner information:

       DTR> DECLARE DOMAIN BOAT_VIEW OF YACHTS, OWNERS USING
       01 BOAT_INFO OCCURS FOR YACHTS.
          03 TYPE FROM YACHTS.
          03 SKIPPERS OCCURS FOR OWNERS WITH TYPE EQ BOAT.TYPE.
             05 NAME FROM OWNERS.
             05 BOAT_NAME FROM OWNERS.
       ;

       DTR> READY BOAT_VIEW
       DTR> PRINT FIRST 4 BOAT_VIEW

                                                BOAT
       MANUFACTURER   MODEL       NAME          NAME

        ALBERG      37 MK II
        ALBIN       79
        ALBIN       BALLAD
        ALBIN       VEGA       STEVE      DELIVERANCE
                               HUGH       IMPULSE

       DTR>

       You can use a view domain such as BOAT_VIEW as a source for
       modifying data in a domain based on a RMS file.

20  –  DECLARE PORT Command

       Creates a temporary definition of a DEC DATATRIEVE port.
       It has a different syntax than the DECLARE PORT statement.
       The DECLARE PORT command can be used only as top level
       phrase; it only creates the temporary definition without
       readying the port.

       Format

         DECLARE PORT  port-name  [USING]  record-name ;

20.1  –  Arguments

    port-name

       Is the name of the port being defined.
       It must be a simple name.

    record-name

       Is the name of a DECLARED record, or the full or relative
       dictionary path of the record definition to be associated
       with the port.

    ; (semicolon)

       Ends the port definition.

20.2  –  Example

       The following example defines a port for transferring records
       between the YACHTS domain and an application program:

       DTR> DECLARE PORT MY_YPORT USING CDD$TOP.DTR$LIB.DEMO.YACHT;
       DTR>

21  –  DECLARE PROCEDURE Command

       Creates the temporary definition of a procedure.

       Format

         DECLARE PROCEDURE  procedure-name

               .
               .
               .

         END_PROCEDURE

21.1  –  Arguments

    procedure-name

       Is the name of the procedure you want to declare.
       It must be a simple name.

    END_PROCEDURE

       Ends the procedure definition.

21.2  –  Examples

       DTR> DECLARE PROCEDURE GRZ1
       DFN> PRINT "I am Alessandra's mother" ;
       DFN> :ALE1 ;
       DFN> END_PROCEDURE ;
       DTR>
       DTR> DECLARE PROCEDURE ALE1
       DFN> PRINT "I am Grazia's daughter" ;
       DFN> END_PROCEDURE ;
       DTR>
       DTR> :GRZ1

       I am Alessandra's mother
       I am Grazia's daughter

       The following example shows how to declare a procedure that
       displays a group of boats with a price less than a figure you
       supply when the procedure runs:

       DTR> DECLARE PROCEDURE PRICE_LIST
       DFN>         READY CDD$TOP.DTR$LIB.DEMO.YACHTS
       DFN>         PRINT SKIP, COL 20,
       DFN>         '*** Price List of YACHTS ***', SKIP ;
       DFN>         FOR FIRST 5 YACHTS WITH PRICE NE 0 AND
       DFN>                 PRICE LE *.'the ceiling price'
       DFN>                         PRINT BOAT
       DFN>         PRINT SKIP, COL 10, 'See anything interesting?'
       DFN> END_PROCEDURE ;
       DTR>
       DTR> :PRICE_LIST ;
                          *** Price List of YACHTS ***

       Enter the ceiling price: 4500

                                LENGTH
                                 OVER
       MANUFACTURER   MODEL     RIG    ALL   WEIGHT BEAM  PRICE

        CAPE DORY   TYPHOON    SLOOP   19     1,900  06   $4,295
        VENTURE     21         SLOOP   21     1,500  07   $2,823
        VENTURE     222        SLOOP   22     2,000  07   $3,564
        WINDPOWER   IMPULSE    SLOOP   16       650  07   $3,500

                 See anything interesting?

       DTR>

22  –  DECLARE RECORD Command

       Creates a temporary definition of a record.

       Format

         DECLARE RECORD  record-name  [USING]  [OPTIMIZE]

         [               {MAJOR-MINOR          } ]
         [ ALLOCATION IS {ALIGNED-MAJOR-MINOR  } ]
         [               {LEFT-RIGHT           } ]
         [               {                     } ]

         definition [,...]

         ;

22.1  –  Arguments

    record-name

       Is the name of the record being declared.

    [USING] OPTIMIZE

       This clause is ignored.

                  { MAJOR-MINOR         }
    ALLOCATION IS { ALIGNED-MAJOR-MINOR }
                  { LEFT-RIGHT          }

       Specifies the type of word-boundary alignment DEC DATATRIEVE uses
       when storing records in the data file. It also controls the way
       DEC DATATRIEVE retrieves data from data files created by user
       programs or other application software. The default allocation
       is no alignment. See the DEC COBOL[TM] documentation set for more
       information on word-boundary alignment and allocation of fill
       bytes.

    definition

       Is the description of the fields in the record. Each definition
       has one of the following formats:

         level-number-1  field-name-1.
         level-number-2  field-name-2  field-definition-2.
         [level-number-n  field-name-n  field-definition-n.]
               .        .        .
               .        .        .
               .        .        .

       or

                                {FIELD  }
         level-number-n  FROM   {GROUP  }  path-name.
                                {       }

    level-number

       Is the level number for the field in the record definition. It
       indicates the relationship of the field to the other fields in
       the record definition.

    field-name

       Is the name of the field. Every field must have a name. The
       keyword FILLER is a special field name that can be repeated at
       the same level in the record definition.

    field-definition

       Is a field definition. A record definition must contain at least
       one field definition. Elementary fields must have at least one
       field definition clause, but group fields are not required to
       have any field definition clauses.

       Each field definition must end with a period (.).

    FROM

       Allows you to create a definition using fields imported from
       dictionary field/record definitions.

    FIELD

       Specifies that you are referencing an existing field.
       If the field-pathname points to a Oracle CDD/Repository object,
       this must be a CDO field. Otherwise it identifies the first
       field of a DECLAREd or a text-definition record.

    GROUP

       Specifies that you are referencing an existing group field.
       If the field-pathname points to a Oracle CDD/Repository object,
       this must be a CDO record. Otherwise it may point to a
       DECLAREd or a text-definition record.

    path-name

       Specifies the path name of the field or record referenced by a
       FROM field. It can be a simple name (for DECLAREd object) or
       a relative or absolute dictionary pathname.

    ; (semicolon)
       Ends the record definition.

22.2  –  Examples

       The following example defines the record PHONE_REC:

       DTR> DECLARE RECORD PHONE_REC USING
       DFN> 01 PHONE.
       DFN> 02 NAME PIC X(20).
       DFN> 02 NUMBER PIC 9(7) EDIT_STRING IS XXX-XXXX.
       DFN> 02 LOCATION PIC X(9).
       DFN> 02 DEPARTMENT PIC XX.
       DFN> ;
       [Record is 38 bytes long.]

       The following example defines the record FAMILY:

       DTR> DECLARE RECORD FAMILY USING
       DFN> 01 FAMILY.
       DFN>    03 PARENTS.
       DFN>        06 FATHER PIC X(10).
       DFN>        06 MOTHER PIC X(10).
       DFN>    03 NUMBER_KIDS PIC 99 EDIT_STRING IS Z9.
       DFN>    03 KIDS OCCURS 0 TO 10 TIMES DEPENDING ON NUMBER_KIDS.
       DFN>        06 EACH_KID.
       DFN>            09 KID_NAME PIC X(10) QUERY_NAME IS KID.
       DFN>            09 AGE PIC 99 EDIT_STRING IS Z9.
       DFN> ;
       [Record is 142 bytes long.]
       DTR>

       The following example declares the record YACHT_REC
       using fields from other records.

       DTR> DECLARE RECORD VERSION_ID USING
       DFN> 01 VERSION_ID PIC x(16) .
       DFN> ;
       [Record is 16 bytes long.]
       DTR>
       DTR> DECLARE RECORD SUPER_YACHT USING
       DFN> 01 SUPER_BOAT .
       DFN> 10 FROM GROUP CDD$TOP.DTR$LIB.DEMO.YACHT .
       DFN> 10 SPEED REAL .
       DFN> 10 FROM FIELD VERSION_ID .
       DFN> ;
       DTR>
       DTR> DECLARE DOMAIN SUPER_YACHTS USING SUPER_YACHT
       DFN> ON NDS_DECLARE_HELP_02.DAT ;
       DTR>
       DTR> SET NO CDD ;
       DTR> DEFINE FILE FOR SUPER_YACHTS ;
       DTR> READY SUPER_YACHTS ;
       DTR> SHOW FIELDS FOR SUPER_YACHTS ;
       SUPER_YACHTS
          SUPER_BOAT
             BOAT
                TYPE
                   MANUFACTURER (BUILDER)      <Character string>
                   MODEL       <Character string>
                SPECIFICATIONS (SPECS)
                   RIG <Character string>
                   LENGTH_OVER_ALL (LOA)       <Character string>
                   DISPLACEMENT (DISP) <Number>
                   BEAM        <Number>
                   PRICE       <Number>
             SPEED     <Number>
             VERSION_ID        <Character string>

23  –  DECLARE TABLE Command

       Creates the temporary definition of a dictionary or domain table.
       list (ACL) for the table. The following sections explain how to
       declare dictionary and domain tables.

       Format

         To declare a dictionary table use the following syntax:

         DECLARE TABLE table-name

          [QUERY_HEADER [IS] "header-segment"[/...]]

          [EDIT_STRING [IS] edit-string]

          [USING] code-field : translation-field [,]
          {"code-1"  }  { "translation-1" }
          {code-1    }: { translation-1   }[,]
          {          }  {                 }

          [ {"code-2"  }  {"translation-2"  } ]
          [ {code-2    }: {translation-2    } ][,]
          [ {          }  {                 } ]

           .                .
           .                .
           .                .

          [     { "translation-n"  } ]
          [ ELSE {translation-n    } ]
          [     {                  } ]

         END_TABLE

         To declare a domain table use the following syntax:

         DECLARE TABLE  table-name FROM [DOMAIN] domain-name

          [QUERY_HEADER [IS] "header-segment"[/...]]

          [EDIT_STRING [IS] edit-string]

          [USING] code-field : translation-field [,]
          [     { "translation-string"  } ]
          [ ELSE {translation-string    } ]
          [     {                       } ]
         END_TABLE

23.1  –  Arguments

    table-name

       Is the name of the dictionary table being defined.
       It must be a simple name.

    "code" : "translation"

       Is a code-and-translation pair. You must separate each pair with
       a colon. The comma after each pair is optional. If the code or
       translation conforms to the rules for DEC DATATRIEVE names given
       in the DEC DATATRIEVE User's Guide, you do not have to enclose it
       in quotation marks. However, DEC DATATRIEVE converts to uppercase
       any lowercase letters in an unquoted code or translation.

       If the code or translation does not conform to the rules for DEC
       DATATRIEVE names (especially if it contains any spaces), or if
       you want to preserve lowercase letters, you must enclose the code
       or translation in quotation marks (" ") and follow the rules for
       character string literals.

    ELSE "translation"

       Is the translation to be used if you specify a code not
       defined in the dictionary table. The rules for specifying
       this translation string are the same as those for codes and
       translations.

    END_TABLE
       Ends the dictionary table definition.

23.2  –  Examples

       The following example declares a table of department codes and
       specifies a query header for the translations of the table:

       DTR> DECLARE TABLE DEPT_TABLE
       DFN> QUERY_HEADER IS "Responsible"/"Department"
       DFN> CE : "Commercial Engineering"
       DFN> PE : "Plant Engineering"
       DFN> CS : "Customer Support"
       DFN> RD : "Research and Development"
       DFN> SD : "Sales Department"
       DFN> ELSE "UNKNOWN DEPARTMENT"
       DFN> END_TABLE
       DTR>
       DTR> print "John belongs to " | ( "RD" via DEPT_TABLE ) ;
       John belongs to Research and Development

       The following example declares a table with a translation for each
       possible rig and includes an edit string in the definition that
       displays the translation in a 10 character wide column:

       DTR> DECLARE TABLE RIGGING
       DFN> EDIT_STRING IS T(10)
       DFN> QUERY_HEADER "TYPE OF"/"RIGGING"
       DFN> SLOOP : "ONE MAST"
       DFN> KETCH : "TWO MASTS, BIG ONE IN FRONT"
       DFN> YAWL  : "SIMILAR TO KETCH"
       DFN> MS    : "SAILS AND A BIG MOTOR"
       DFN> ELSE    "SOMETHING ELSE"
       DFN> END_TABLE
       DTR> PRINT "KETCH" VIA RIGGING

        TYPE OF
        RIGGING

       TWO MASTS,
       BIG ONE IN
       FRONT

       DTR>

       The following example shows how to declare a domain table that
       returns the price of a yacht when you enter a value for LENGTH_
       OVER_ALL. The example specifies a query header and an edit string
       for the translation field:

       DTR> DECLARE TABLE LOA_PRICE_TABLE
       DFN>     FROM CDD$TOP.DTR$LIB.DEMO.YACHTS
       DFN>     QUERY_HEADER IS "SAMPLE"/"PRICE"
       DFN>     EDIT_STRING IS $$$,$$$
       DFN>     USING LOA : PRICE
       DFN>     ELSE "NO BOATS IN STOCK WITH THAT LOA."
       DFN> END_TABLE
       DTR> PRINT 26 VIA LOA_PRICE_TABLE

       SAMPLE
       PRICE

       $17,900

       DTR>

24  –  DECLARE Statement

       Defines a global or a local variable.

       Format

         DECLARE  variable-name  variable-definition .

24.1  –  Arguments

    variable-name

       Is the name of the variable being defined. The name must conform
       to the rules for names listed in the DEC DATATRIEVE User's Guide.

    variable-definition

       Is the definition of the variable, which consists of field
       definition clauses. If you include more than one such clause,
       separate them with spaces, tab characters, or carriage returns.
       Refer to the chapter on record definitions in the DEC DATATRIEVE
       User's Guide for information on field definition clauses.

    . (period)

       Ends the DECLARE statement.

24.2  –  Examples

       Declare the global variable NEW_BEAM as a 2-digit numeric field
       with a DEFAULT value of 10:

       DTR> DECLARE NEW_BEAM PIC 99 DEFAULT VALUE IS 10.
       DTR> PRINT NEW_BEAM

       NEW
       BEAM

        10

       DTR>

       Declare the global variable X as a single-precision floating-
       point number, with a MISSING VALUE of 36:

       DTR> DECLARE X REAL MISSING VALUE IS 36.
       DTR> PRINT X

           X

       36.0000000

       DTR> SHOW VARIABLES
       Global variables
          X    <Number>
          Declared as: X REAL MISSING VALUE IS 36.

       DTR> RELEASE X
       DTR> SHOW FIELDS
       No ready sources or global variables declared.
       DTR>

       Declare the variable DUE as a date. Assign today's date to DUE
       and suppress the header with a hyphen in parentheses:

       DTR> DECLARE DUE USAGE IS DATE.
       DTR> DUE = "TODAY"
       DTR> PRINT DUE (-)

       22-Sep-90

       DTR>

25  –  DECLARE ATT Statement (Report Writer)

       Specifies text control elements (font family, character size,
       weight, slant, underline) overriding or complementing the default
       attributes for the ATT argument used by the Report Writer's PRINT
       and SET statements.

       Format

                               { FAMILY= font-option }
                               { SIZE= point-size    }
                               {      {BOLD       }  }
         DECLARE_ATT  att-name {      {           }  }  [,...]
                               { [NO] {ITALIC     }  }
                               {      {UNDERLINE  }  }
                               {      {REVERSE    }  }
                               {                     }

25.1  –  Arguments

    att-name

       Is the user-defined name of the attribute list. This name is used
       by the ATT clause in the Report Writer Print statement.

       DECLARE_ATT Print Attributes shows the options which can be
       controlled by the DECLARE_ATT statement.

       Table 1-1 DECLARE_ATT Print Attributes

                            Header
       AttributOptions      default     Body default

       Family  HELVETICA    HELVETICA   HELVETICA
               TIMES
               COURIER
               AVANTGARDE
               SYMBOL
               LUBALIN_
               GRAPH
               NC_
               SCHOOLBOOK
               SOUVENIR
       Point   8 10 12 14   14          10
       Size    18 24 36 48
               72 96
       Bold    BOLD         BOLD        NO BOLD
               NO BOLD
       Italic  ITALIC       NO ITALIC   NO ITALIC
               NO ITALIC
       UnderlinUNDERLINE    NO          NO UNDERLINE
               NO           UNDERLINE
               UNDERLINE
       Reverse REVERSE      NO          NO REVERSE
               NO REVERSE   REVERSE

    font-option

       Is the font family chosen. Available options are listed in
       DECLARE_ATT Print Attributes.

    point-size

       Is the point size for the chosen font family. Available options
       are listed in DECLARE_ATT Print Attributes.

25.2  –  Example

       The following example shows a number of DECLARE_ATT statements:

      DTR> REPORT PAYABLES WITH INVOICE_DUE NOT MISSING -
      RW>           SORTED BY AGE ON AGING_REPORT.PS FORMAT PS
      RW>
      RW> DECLARE_ATT TITLE      FAMILY = TIMES, SIZE = 24, BOLD, NOITALIC
      RW> DECLARE_ATT DATE_PAGE  FAMILY = TIMES, SIZE = 14, NOBOLD, ITALIC
      RW> DECLARE_ATT COL_HDR    FAMILY = TIMES, SIZE = 12, BOLD, ITALIC
      RW> DECLARE_ATT DETAIL     FAMILY = NC_SCHOOLBOOK, SIZE = 10
      RW> DECLARE_ATT TOT_ACCNTS FAMILY = HELVETICA, SIZE = 12, NOBOLD
      RW> DECLARE_ATT TOTAL      FAMILY = HELVETICA, SIZE = 14, BOLD
      RW> DECLARE_ATT ULINE      UNDERLINE
      RW> DECLARE_ATT NO_ULINE   NOUNDERLINE
      RW> DECLARE_ATT GRAND_TOTAL FAMILY = HELVETICA, SIZE = 14,
                                                    BOLD, ITALIC

26  –  DECLARE PORT Statement

       Creates a temporary DEC DATATRIEVE port with the name you specify
       and readies the port for WRITE access. DEC DATATRIEVE does not
       enter a definition of the port in the Oracle CDD/Repository data
       dictionary.

       Format

         DECLARE PORT  port-name USING

               level-number-1 field-definition-1.

               [level-number-2 field-definition-2.]
                      .          .
                      .          .
                      .          .
               [level-number-n field-definition-n.]
          ;

26.1  –  Arguments

    port-name

       Is the name of the port. It cannot duplicate a DEC DATATRIEVE
       keyword or the given name of any domain you may bring into your
       workspace.

    level-number

       Is the level number for the field in the port declaration. It
       indicates the relationship of the field to the other fields of
       the port.

    field-definition

       Is a field definition. A port declaration must have at least one
       field definition. Each field definition ends with a period.

    ; (semicolon)

       Ends the port declaration.

26.2  –  Example

       The following example shows a port declared for YACHTS records in
       a DEC Fortran program:

       CALL DTR$COMMAND (DAB,'DECLARE PORT BOAT_PORT USING
       1 01 YACHT.
       2    03 BOAT.
       3       06 BUILDER PIC X(9).
       4       06 MODEL PIC X(10).
       5       06 RIG PIC X(6).
       6       06 LOA PIC X(3).
       7       06 DISP PIC X(5).
       8       06 BEAM PIC XX.
       9       06 PRICE PIC X(5).;')

27  –  DECLARE SYNONYM Command

       Defines a synonym for a DEC DATATRIEVE keyword.

       Format

         DECLARE SYNONYM  { synonym  [FOR]  keyword }  [,...]

27.1  –  Arguments

    synonym

       Is the name of the synonym being defined. The name must conform
       to the rules for names listed in the DEC DATATRIEVE User's Guide.

    FOR

       Is an optional word to clarify syntax.

    keyword

       Is the name of a DEC DATATRIEVE keyword for which a synonym is
       being defined.

27.2  –  Examples

       Define synonyms for the keywords FIND and PRINT. Use the synonyms
       to form a collection of the first two yachts, and then print the
       collection.

       DTR> READY YACHTS
       DTR> DECLARE SYNONYM FD FOR FIND, PT FOR PRINT
       DTR> FD FIRST 2 YACHTS; PT CURRENT

                                      LENGTH
                                       OVER
       MANUFACTURER   MODEL     RIG    ALL   WEIGHT BEAM  PRICE

        ALBERG      37 MK II   KETCH   37    20,000  12  $36,951
        ALBIN       79         SLOOP   26     4,200  10  $17,900

       DTR>

       Calculate the price per foot and per pound for the first five
       yachts. To save typing, define synonyms for COMPUTED, EDIT_
       STRING, and PRINT.

       DTR> SET NO PROMPT
       DTR> DECLARE SYNONYM CD FOR COMPUTED
       CON>     E_S FOR EDIT_STRING, PT FOR PRINT
       DTR> DECLARE PER_FT CD BY (PRICE/LOA) E_S $$$$.99.
       DTR> DECLARE PER_LB CD BY (PRICE/DISP) E_S $$.99.
       DTR> FOR FIRST 5 YACHTS
       CON>     PT TYPE, PRICE, PER_FT, PER_LB

                                          PER     PER
       MANUFACTURER   MODEL     PRICE     FT      LB

        ALBERG      37 MK II   $36,951   $998.68  $1.85
        ALBIN       79         $17,900   $688.46  $4.26
        ALBIN       BALLAD     $27,500   $916.67  $3.78
        ALBIN       VEGA       $18,600   $688.89  $3.67
        AMERICAN    26          $9,895   $380.58  $2.47

       DTR>

28  –  DEFAULT VALUE Clause

       Specifies a default value for initializing a field to which
       you do not make a direct assignment in STORE or Restructure
       statements.

       Format

         DEFAULT  [VALUE]  [IS]  literal

28.1  –  Argument

    VALUE IS

       Are optional keywords you can use to clarify the syntax of the
       clause.

    literal

       Is either a numeric or character string literal.

28.2  –  Examples

       Define a field in a student record that sets a default value for
       tuition owed at registration.

       09 TUITION_DUE PIC Z(4)9.99
          EDIT_STRING IS $$$,$$$.99
          DEFAULT VALUE IS 4800.

       Define a date field with the default value of the day you store
       the record:

       03 DATE_IN USAGE DATE DEFAULT "TODAY".

29  –  DEFINE DATABASE Command

       Defines a path name for a relational database (Format 1) or a
       path name for a Oracle CODASYL DBMS database instance (Format 2).

       Format 1

         DEFINE DATABASE  rdb-database-path  ON  root-file-spec;

       Format 2

         DEFINE DATABASE  dbms-database-path

              [USING]  [SUBSCHEMA]  subschema-name

              [OF]  [SCHEMA]  schema-path-name

              ON  root-file-spec;

29.1  –  Arguments

    rdb-database-path

       Is the Oracle CDD/Repository path name of the relational database
       you want to define. The path name can be either a DMU or a CDO
       style path name.

    root-file-spec

       Is the name of the database root file. For relational databases,
       the default file type is .RDB; for Oracle CODASYL DBMS, the
       default file type is .ROO. A complete file specification has
       the following format:

       node-spec::device:[directory]file-name.type;version

    dbms-database-path

       Is the Oracle CDD/Repository path name you choose for the Oracle
       CODASYL DBMS database instance. The path name can be either a DMU
       or a CDO style path name. Although a DMU style path name is still
       accepted, you are recommended to use a CDO path name.

    subschema-name

       Is the name of a subschema for the specified schema.

    schema-path-name

       Is the CDO path name of a Oracle CODASYL DBMS schema.

    ;(semicolon)

       Ends the DEFINE DATABASE command.

29.2  –  Examples

       Define a relational database path name:

       DTR> DEFINE DATABASE CDD$TOP.DEPT29.PERSONNEL ON
       DFN>                 DBA2:[D29.DAT]PERSONNEL.RDB;
       DTR>

       Define a Oracle CODASYL DBMS database instance. The Oracle
       CDD/Repository path name of the schema is
       SYS$COMMON:[CDDPLUS]DBMS.PARTS. The name of the subschema is
       PARTSS1, and the root file is DB0:[BULGAKOV]PARTSDB.ROO:

       DTR> DEFINE DATABASE PARTS_DB
       DFN>     USING PARTSS1
       DFN>     OF SYS$COMMON:[CDDPLUS]DBMS.PARTS
       DFN>     ON DB0:[BULGAKOV]PARTSDB.ROO;
       DTR>

30  –  DEFINE DICTIONARY Command

       Creates a dictionary directory in the Oracle CDD/Repository data
       dictionary system.

       Format

         DEFINE DICTIONARY  path-name

30.1  –  Argument

    path-name

       Is the given name, the full dictionary path name, or a relative
       dictionary path name of the dictionary you want to create. The
       DEFINE DICTIONARY command accepts both DMU and CDO style path
       names. A complete CDO style path name has the following format:

       node-spec::device:[directory]file-name.type;version

30.2  –  Examples

       Use a given name to define a dictionary directory named TEST when
       CDD$TOP.RESEARCH is your default directory:

    DTR> SHOW DICTIONARY
    The default directory is CDD$TOP.RESEARCH
    DTR> DEFINE DICTIONARY TEST
    DTR> SHOW DICTIONARIES
    Dictionaries:
            DEMO            TEST
    DTR> SET DICTIONARY TEST
    DTR> SHOW DICTIONARY
    The default dictionary is CDD$TOP.RESEARCH.TEST
    DTR> SHOW PRIVILEGES
    Privileges for CDD$TOP.RESEARCH.TEST
     R (DTR_READ)     - may ready for READ, use SHOW and EXTRACT
     W (DTR_WRITE)    - may ready for READ, WRITE, MODIFY, or EXTEND
     M (DTR_MODIFY)   - may ready for READ, MODIFY
     E (DTR_EXTEND/EXECUTE) - may ready to EXTEND, or access table or procedure
     C (CONTROL)      - may issue DEFINEP, SHOWP, DELETEP commands
     D (LOCAL_DELETE) - may delete a dictionary object
     F (FORWARD)      - may create a subdictionary
     H (HISTORY)      - may add entries to object's history list
     P (PASS_THRU)    - may use given name of directory or object in pathname
     S (SEE)          - may see (read) dictionary
     U (UPDATE)       - may update dictionary object
     X (extend)       - may create directory or object within directory

    DTR>

       Use a relative dictionary path name to define a dictionary
       directory in the CDD$TOP.MANUFACTURING directory when
       CDD$TOP.DTR$LIB is your default directory:

       DTR> SHOW DICTIONARY
       The default directory is CDD$TOP.DTR$LIB
       DTR> DEFINE DICTIONARY
       DFN> -.MANUFACTURING.TEST
       DTR> SET DICTIONARY -.MANUFACTURING
       DTR> SHOW DICTIONARIES
               INVENTORY       TEST
       DTR> SHOWP TEST
         1:    [*,*], Username: "JONES"
               Grant - CDHPSX, Deny - None, Banish - none

       DTR>

       Use a full name to define a CDO dictionary directory named TEST.
       DISK1:[SWANSON.DTRWORK] is your default directory:

       DTR> SHOW DICTIONARY
       The default directory is DISK1:[SWANSON.DTRWORK]
       DTR> DEFINE DICTIONARY DISK1:[SWANSON.DTRWORK]TEST
       DTR> SHOW DICTIONARIES
       Dictionaries:
               MYDICT            TEST

       DTR>

31  –  DEFINE DOMAIN Command

       Stores a domain definition in the Oracle CDD/Repository data
       dictionary system.

       The following sections explain how to define domains for
       CDD$DATABASE objects, Oracle CODASYL DBMS databases, network
       domains based on domains residing at other DECnet[TM] nodes,
       domains based on relational databases, domains based on single
       RMS files, and views based on one or more domains.

       Format

         To define a CDD$DATABASE domain, use the following syntax:

         DEFINE DOMAIN  domain-name  [USING]  database-name

             [FORM [IS] form-name [IN] file-name [USING exchange-rec]]

             [WITH]  RELATIONSHIPS ;

         To define a Oracle CODASYL DBMS domain, use the following
         syntax:

         DEFINE DOMAIN  domain-name  [USING]  record-name

             [OF]  [DATABASE]  database-path-name

             [FORM [IS] form-name [IN] file-name [USING exchange-rec]] ;

         To define a network domain, use the following syntax:

         DEFINE DOMAIN  domain-name [USING] remote-path-name AT
                        node-spec

             [FORM  [IS]  form-name  [IN] file-name [USING exchange-rec]]

             [[WITH] RELATIONSHIPS] ;

         To define a relational domain, use the following syntax:

         DEFINE DOMAIN  domain-name [USING] relation-name

             [OF]  [DATABASE]  database-path-name

             [FORM [IS] form-name [IN] file-name [USING exchange-rec]]

             [[WITH] RELATIONSHIPS] ;

         To define a domain based on a RMS file, use the following
         syntax:

         DEFINE DOMAIN  path-name [USING] record-name ON file-spec

             [FORM [IS] form-name [IN] file-name [USING exchange-rec]]

             [[WITH]  RELATIONSHIPS] ;

       To define a view domain, use the following syntax:

       DEFINE DOMAIN view-path-name OF domain-name-1 [,...][BY   ]
               [USING]

           level-number-1  field-name-1    OCCURS FOR rse-1.

           level-number-2  field-name-2  { OCCURS FOR rse-n        } .
             { FROM domain-name-n }

             .         .                   .
             .         .                   .
             .         .                   .

           [FORM [IS] form-name [IN] file-name [USING exchange-rec]]

           [[WITH] RELATIONSHIPS] ;

31.1  –  Arguments

    domain-name

       Is the Oracle CDD/Repository dictionary path name of the domain
       you are defining. The domain-name can be either a DMU or CDO
       style path name.

    database-name

       Is the name of a CDD$DATABASE object, defined through CDO using
       the DEFINE DATABASE command, that points to a CDD$RMS_DATABASE
       object. Refer to the Oracle CDD/Repository documentation for more
       information on CDD$RMS_DATABASE objects.

    record-name

       Is the name of a record type contained in a subschema of the
       specified Oracle CODASYL DBMS database.

    database-path-name

       Is the DEC DATATRIEVE definition of the database instance. The
       database-path-name can be both DMU and CDO style path name.

    remote-path-name

       Is the given name, full dictionary path name, or relative
       dictionary path name of a domain definition at another node
       in a network of computers linked by DECnet. That domain, the
       associated record definition, and the associated data file must
       already exist in the data dictionary at the remote node before
       you can ready the network domain. The domain-name can be either a
       DMU or CDO style path name.

    node-spec

       Specifies the network address.

       If the login procedure used by the remote process does not
       supply the necessary login information (user name, password,
       and, optionally, account name), either the person readying the
       network domain or the network domain definition must supply this
       information.

       You can use any of the following formats to specify the network
       address and to provide the best level of access security for your
       installation:

          Examples of this format are:

          BIGVAX"WARTON KNOCKKNOCK DEPT32"

          ELEVEN"LINTE LETMEIN"

          When you specify the network address using this format, users
          do not have to supply login information when readying the
          network domain.

          Examples of this format are:

          WINKEN"*.USERNAME *.PASSWORD *.ACCOUNT"

          VAXTWO"*.'user name' *.'password'"

          PDPTWO"*.'user name' *.'password'"

          When you specify the network address using this format, users
          are prompted for login information when they ready the network
          domain. This method provides the best security.

          Two examples of this format are:

          BIGVAX

          DEC:.zko.star

          Note that Poor Man's Routing is not accepted in AT clauses.

          When you specify the network address with this format,
          the account used by the remote process must provide login
          information automatically.

       If you prefer, you can combine elements from the first two
       formats. For example, you can explicitly specify the user name
       and specify a prompting value expression for the password:

       SNOOPY"CLARK *.PASSWORD"

    relation-name

       Is the name assigned to the relation when the database was
       created.

    path-name

       Is the given name, full dictionary path name, or relative
       dictionary path name of the domain being defined. The path name
       cannot resolve to the full dictionary path name of any other
       object or directory in the data dictionary system. The path-name
       can be either a DMU or CDO style path name.

    record-name

       Is the given name, full dictionary path name, or relative
       dictionary path name of the record definition to be associated
       with the domain. You must enter this record definition in the
       data dictionary (with the DEFINE RECORD command) before you can
       ready the domain. The dictionary path name of the record cannot
       resolve to the full dictionary path name of any other directory
       or object in the data dictionary. The record-name can be either a
       DMU or CDO style path name.

    file-spec

       Is the OpenVMS file specification of the RMS file containing
       the data for the domain. This file must exist when you ready the
       domain. A complete file specification has the following format:

       node-spec::device:[directory]file-name.type;version

    view-path-name

       Is the given name, full dictionary path name, or relative
       dictionary path name of the view being defined. The path name
       cannot resolve to the full dictionary path name of any other
       object or directory in the data dictionary. The view-path-name
       may be either a DMU or CDO style path name.

    domain-name-1

       Is either the given name, full dictionary path name, or relative
       dictionary path name of a domain containing records to be
       included in the view. If the domain name is a domain path name,
       it cannot duplicate the name of the view. When specifying more
       than one domain path name, use a comma to separate each name from
       the next. The domain-name may be either a DMU or CDO style path
       name.

    level-number

       Is the level number for a field in the view definition.

    field-name

       Is the name of a field in the view definition. If field-name is
       followed by an OCCURS FOR clause, field-name has no relationship
       to any field in the domain or domains specified in the RSE.
       Whether or not field-name is the same as the names of any of
       those fields does not matter. If field-name is followed by a
       FROM clause, field-name must be the name of a field in a domain
       specified in the OF domain-name-1 [,...] clause.

    OCCURS FOR rse

       Indicates that the associated field is to be included in the view
       only for those records specified by the RSE. The RSE must contain
       a reference to one of the domains, relations, or Oracle CODASYL
       DBMS records listed in the OF clause.

    FROM domain-name

       Indicates that the definition of the associated field is
       identical to that of the field of the same name in the domain,
       relation, or Oracle CODASYL DBMS record specified by domain-name-
       n. The argument domain-name must be the same as that used in the
       preceding OCCURS FOR clause.

    . (period)

       Ends a field definition.

    form-name

       Is a form name.

    file-name

       For VAX TDMS and DEC FMS[TM] forms it is the name of a form
       library. For DECforms[TM] forms it is the form file name,
       which can either be a .FORM or a .EXE file. A complete file
       specification has the following format:

       node-spec::device:[directory]file-name.type;version

    exchange-rec

       Is the Oracle CDD/Repository path name (either DMU or CDO) of a
       record used to send and receive data with DECforms.

    RELATIONSHIPS

       Causes relationships to be set up between the domain being
       defined and one of the following items:

       o  The CDD$DATABASE object

       o  The domain specified on the remote node

       o  The record definition

       o  The objects referenced by the view

    ; (semicolon)

       Ends the domain definition.

31.2  –  Examples

       Define the CDD$DATABASE domain NEWYACHTS. Use the already defined
       CDD$DATABASE YACHTS.

       DTR> DEFINE DOMAIN NEWYACHTS USING YACHTS_DB
       DFN> WITH RELATIONSHIPS;

       Define the Oracle CODASYL DBMS domain EMPLOYEES. The name of the
       record-type is EMPLOYEE, and the name of the database instance is
       PARTS_DB. The domain definition includes the FORM clause.

       DTR> DEFINE DOMAIN EMPLOYEES
       DFN>     USING EMPLOYEE OF DATABASE PARTS_DB
       DFN>     FORM IS EMPFOR IN FORMS:PARTS.FLB;
       DTR>

       Define a network domain called REMOTE_YACHTS:

       DTR> DEFINE DOMAIN REMOTE_YACHTS USING
       DFN>    CDD$TOP.DTR$LIB.DEMO.YACHTS AT
       DFN>    VAX32"SMITH ADRIENNE" FORM IS YACHT1 IN DTRFRM;
       DTR>

       The following example defines a DEC DATATRIEVE domain that
       automatically uses a form. The domain is defined for the relation
       EMPLOYEES.

       DTR> DEFINE DOMAIN EMPLOYEES
       DFN>     USING EMPLOYEES OF DATABASE PERSONNEL
       DFN>     FORM IS EMPFOR IN FORMSLIB;
       DTR>

       Define the domain PHONES. Use the record definition PHONE_REC
       that is cataloged in the directory CDD$TOP.DEPARTMENT. Specify
       PHONE.DAT as the data file:

       DTR> DEFINE DOMAIN PHONES USING
       DFN> CDD$TOP.DEPARTMENT.PHONE_REC ON PHONE.DAT;
       DTR>

       Define a view of yacht and owner information:

       DTR> SHOW BOAT_VIEW
       DOMAIN BOAT_VIEW OF YACHTS, OWNERS USING
       01 BOAT_INFO OCCURS FOR YACHTS.
          03 TYPE FROM YACHTS.
          03 SKIPPERS OCCURS FOR OWNERS WITH TYPE EQ BOAT.TYPE.
             05 NAME FROM OWNERS.
             05 BOAT_NAME FROM OWNERS.
       ;

       DTR> READY BOAT_VIEW
       DTR> PRINT FIRST 4 BOAT_VIEW

                                                BOAT
       MANUFACTURER   MODEL       NAME          NAME

        ALBERG      37 MK II
        ALBIN       79
        ALBIN       BALLAD
        ALBIN       VEGA       STEVE      DELIVERANCE
                               HUGH       IMPULSE

       DTR>

       You can use a view domain such as BOAT_VIEW as a source for
       modifying data in a domain based on a RMS file.

32  –  DEFINE FILE Command

       Creates an RMS sequential or indexed sequential data file for the
       DEC DATATRIEVE RMS domain specified by the dictionary path name.

       Format for Defining a Sequential File

         DEFINE FILE  [FOR]  path-name

         [ ALLOCATION = n ]
         [ SUPERSEDE      ]  [,...]
         [ MAX            ]
         [                ]

       Format for Defining an Indexed File

         DEFINE FILE  [FOR]  path-name

         [ ALLOCATION = n ]
         [ SUPERSEDE      ]  [,...]
         [ MAX            ]
         [                ]

         { KEY = field-name-1  [ ( [NO]CHANGE[,] [NO]DUP) ] }  [,...]

       Format for Defining an RMS File Using a FDL File

         DEFINE FILE  [FOR]  domain-name  USING  fdl-file-spec

32.1  –  Arguments

    path-name

       Is the dictionary path name of the DEC DATATRIEVE domain based on
       a RMS file for which you want to create a data file.

    domain-name

       Is the name of the DEC DATATRIEVE domain for which you want to
       create a data file.

    ALLOCATION = n

       Specifies an unsigned nonzero integer that determines the number
       of disk blocks initially allocated for the data file. If you
       omit this argument, zero blocks are allocated for the file. When
       you store records into the data file, RMS automatically extends
       the data file according to the cluster size established by your
       system manager.

    SUPERSEDE

       Causes DEC DATATRIEVE to delete any existing data file that
       exactly matches the complete file specification, including the
       version number, in your RMS domain definition. The new file you
       are defining replaces the existing data file. If your domain
       based on a RMS file does not include a file version number, the
       old file is not deleted, and the new file is assigned the next
       higher version number.

    MAX

       Causes DEC DATATRIEVE to create a fixed-length RMS file for a
       domain whose record definition contains an OCCURS . . . DEPENDING
       clause. The length of every record in the data file has the
       maximum possible size, as determined by the value of the MAX
       argument in the OCCURS . . . DEPENDING clause:

       OCCURS min TO max TIMES DEPENDING ON field-name

       Each record can then store the maximum number of items in the
       list defined by the OCCURS . . . DEPENDING clause.

       If you omit this argument, DEC DATATRIEVE does not create a
       file with fixed-length records of the maximum possible size.
       The size of each record is determined when you store the record.
       If the file is defined as a sequential file, a record size cannot
       be increased to include more list items after it is initially
       stored.

    KEY = field-name

       Causes DEC DATATRIEVE to create an RMS indexed file and specifies
       a field in the domain's record definition to be used as an index
       key for the domain's data file. The first key field specified in
       the DEFINE FILE command is the primary key, and all subsequent
       ones are alternate keys. If you specify more than one KEY clause,
       use a comma (,) to separate each clause from the next. If you
       are defining a file for a hierarchical record, do not make a list
       field the primary key.

       If you omit this clause, DEC DATATRIEVE creates an RMS sequential
       file.

    CHANGE

       Determines whether or not you can modify the content of the
       associated key field. The default is NOCHANGE for the primary
       key field and CHANGE for alternate key fields. See Allowed
       Combinations of Key Field Attributes for the allowed combinations
       of key field attributes.

    DUP

       Determines whether or not you can assign the same value to the
       specified key fields of two or more records. The default is NO
       DUP for the primary key field and DUP for alternate key fields.
       See Allowed Combinations of Key Field Attributes for the allowed
       combinations of key field attributes.

       Table 1-2 Allowed Combinations of Key Field Attributes

                                  Key Field Attributes

                         CHANGE   NO
       Key     CHANGE    + NO     CHANGE    NO CHANGE
       Type    + DUP     DUP      + DUP     + NO DUP

       Primary Not       Not      Allowed   Allowed
               Allowed   Allowed
       AlternatAllowed   Allowed  Allowed   Allowed

    USING fdl-file-spec

       Specifies the FDL file to be used in creating the RMS file. A
       complete file specification has the following format:

       node-spec::device:[directory]file-name.type;version

32.2  –  Examples

       The following example shows how to define an indexed file for the
       domain PAYABLES using the field NAME as the primary key and TYPE
       as the alternate key, and allowing no changes to the alternate
       key:

       DTR> DEFINE FILE FOR PHONES KEY=NAME(DUP), KEY=TYPE(NO CHANGE)
       DTR>

       The following example defines a sequential file for the domain
       FAMILIES:

       DTR> DEFINE FILE FOR FAMILIES
       DTR>

       The following example shows how to define a new indexed file for
       the domain YACHTS using the group field TYPE as the primary key,
       allowing duplicate values for this key. This command replaces the
       previous data file for YACHT.

       DTR> DEFINE FILE FOR YACHTS SUPERSEDE, KEY=TYPE (DUP)
       DTR>

       The following example defines a new file for the YACHTS domain
       using the specifications included in YACHTS.FDL, a file created
       outside of DEC DATATRIEVE:

       DTR> DEFINE FILE FOR YACHTS USING YACHTS.FDL
       DTR>

33  –  DEFINE PORT Command

       Enters the definition of a DEC DATATRIEVE port in the specified
       or implied directory of the Oracle CDD/Repository data dictionary
       system and creates an access control list (ACL) for the port.

       Format

         DEFINE PORT  path-name  [USING]  record-name ;

33.1  –  Arguments

    path-name

       Is the given name, full dictionary path name, or relative
       dictionary path name of the port being defined. The path name
       cannot resolve to the full dictionary path name of any other
       object or directory in the data dictionary system. DEFINE PORT
       will accept both DMU and CDO style path names.

    record-name

       Is the given name, full dictionary path name, or relative
       dictionary path name of the record definition to be associated
       with the port. The dictionary path name of the record cannot
       resolve to the full dictionary path name of any other object or
       directory in the data dictionary system. DEFINE PORT will accept
       both DMU and CDO style path names.

    ; (semicolon)

       Ends the port definition.

33.2  –  Example

       The following example defines a port for transferring records
       between the YACHTS domain and an application program:

       DTR> DEFINE PORT YPORT USING CDD$TOP.DTR$LIB.DEMO.YACHT;
       DTR>

34  –  DEFINE PROCEDURE Command

       Enters a procedure definition into the Oracle CDD/Repository data
       dictionary system and creates an access control list (ACL) for
       the procedure.

       Format

         DEFINE PROCEDURE  procedure-name

               .
               .
               .

         END_PROCEDURE

34.1  –  Arguments

    procedure-name

       Is the given name, full dictionary path name, or relative
       dictionary path name of the procedure you want to define. The
       path name cannot resolve to the full dictionary path name of any
       other object or directory in the data dictionary. Procedures can
       be defined in either the DMU or CDO dictionary.

    END_PROCEDURE

       Ends the procedure definition.

34.2  –  Examples

       The following example shows how to define a procedure to set
       your default directory to the DEMO directory, which contains the
       sample data for the YACHTS, OWNERS, and FAMILIES domains:

       DTR> DEFINE PROCEDURE DEMO
       DFN> SET DICTIONARY CDD$TOP.DTR$LIB.DEMO
       DFN>     SHOW DICTIONARY
       DFN> END_PROCEDURE
       DTR> :DEMO
       The default directory is CDD$TOP.DTR$LIB.DEMO
       DTR>

       The following example shows how to define a procedure that
       displays a group of boats with a price less than a figure you
       supply when the procedure runs:

       DTR> DEFINE PROCEDURE PRICE_LIST
       DFN>     READY YACHTS
       DFN>     PRINT SKIP, COL 20,
       DFN>           '*** Price List of YACHTS ***', SKIP
       DFN>     FOR YACHTS WITH PRICE NE 0 AND
       DFN>         PRICE LE *.'the ceiling price'
       DFN>           PRINT BOAT
       DFN>     PRINT SKIP, COL 10, 'See anything interesting?'
       DFN> END_PROCEDURE
       DTR> :PRICE_LIST

                          *** Price List of YACHTS ***

       Enter the ceiling price: 5,000

                                      LENGTH
                                       OVER
       MANUFACTURER   MODEL     RIG    ALL   DISPLACEMENT BEAM  PRICE

        CAPE DORY   TYPHOON    SLOOP   19        1,900     06   $4,295
        VENTURE     21         SLOOP   21        1,500     07   $2,823
        VENTURE     222        SLOOP   22        2,000     07   $3,564
        WINDPOWER   IMPULSE    SLOOP   16          650     07   $3,500

                See anything interesting?

       DTR>

       The following example shows how to use a OpenVMS command line to
       invoke the procedure created in the first example:

       $ DTR32 EXECUTE DEMO
       The default directory is CDD$TOP.DTR$LIB.DEMO

       $

35  –  DEFINE RECORD Command

       Enters a record definition in the Oracle CDD/Repository data
       dictionary and creates an access control list (ACL) for the
       record.

       Format

         DEFINE RECORD  record-name  [USING]  [OPTIMIZE]

         [               {MAJOR-MINOR          } ]
         [ ALLOCATION IS {ALIGNED-MAJOR-MINOR  } ]
         [               {LEFT-RIGHT           } ]
         [               {                     } ]

         definition [,...]

         ;

35.1  –  Arguments

    record-name

       Is the given name, full dictionary path name, or relative
       dictionary path name of the record being defined. The record
       path name cannot resolve to the full dictionary path name of any
       other object or directory in the data dictionary system. DEFINE
       RECORD will accept both DMU and CDO style path names.

    [USING] OPTIMIZE

       Allows you to optimize record definitions, reducing the central
       processing unit (CPU) time needed to ready a domain that
       refers to the record. See the Usage Notes section for special
       considerations.

                  { MAJOR-MINOR         }
    ALLOCATION IS { ALIGNED-MAJOR-MINOR }
                  { LEFT-RIGHT          }

       Specifies the type of word-boundary alignment DEC DATATRIEVE uses
       when storing records in the data file. It also controls the way
       DEC DATATRIEVE retrieves data from data files created by user
       programs or other application software. The default allocation
       is no alignment. See the DEC COBOL[TM] documentation set for more
       information on word-boundary alignment and allocation of fill
       bytes.

    definition

       Is the description of the fields in the record. Each definition
       has one of the following formats:

         level-number-1  field-name-1.
         level-number-2  field-name-2  field-definition-2.
         [level-number-n  field-name-n  field-definition-n.]
               .        .        .
               .        .        .
               .        .        .

       or

                                {FIELD  }
         level-number-n  FROM   {GROUP  }  path-name.
                                {       }

    level-number

       Is the level number for the field in the record definition. It
       indicates the relationship of the field to the other fields in
       the record definition.

    field-name

       Is the name of the field. Every field must have a name. The
       keyword FILLER is a special field name that can be repeated at
       the same level in the record definition.

    field-definition

       Is a field definition. A record definition must contain at least
       one field definition. Elementary fields must have at least one
       field definition clause, but group fields are not required to
       have any field definition clauses.

       Each field definition must end with a period (.).

    FROM

       Allows you to create a definition using fields imported from CDO
       field/record definitions.

    FIELD

       Specifies that you are referencing an existing CDO field.

    GROUP

       Specifies that you are referencing an existing CDO group field.

    path-name

       Specifies the path name of the field or record referenced by a
       FROM field. The record or field specified by this path name must
       reside in a CDO format dictionary.

    ; (semicolon)

       Ends the record definition.

35.2  –  Examples

       The following example defines the record PHONE_REC:

       DTR> DEFINE RECORD PHONE_REC USING
       DFN> 01 PHONE.
       DFN>    02 NAME PIC X(20).
       DFN>    02 NUMBER PIC 9(7) EDIT_STRING IS XXX-XXXX.
       DFN>    02 LOCATION PIC X(9).
       DFN>    02 DEPARTMENT PIC XX.
       DFN> ;
       [Record is 38 bytes long.]
       DTR>

       The following example defines the record FAMILY:

       DTR> DEFINE RECORD FAMILY USING
       DFN> 01 FAMILY.
       DFN>    03 PARENTS.
       DFN>        06 FATHER PIC X(10).
       DFN>        06 MOTHER PIC X(10).
       DFN>    03 NUMBER_KIDS PIC 99 EDIT_STRING IS Z9.
       DFN>    03 KIDS OCCURS 0 TO 10 TIMES DEPENDING ON NUMBER_KIDS.
       DFN>        06 EACH_KID.
       DFN>            09 KID_NAME PIC X(10) QUERY_NAME IS KID.
       DFN>            09 AGE PIC 99 EDIT_STRING IS Z9.
       DFN> ;
       [Record is 142 bytes long.]
       DTR>

       The following example defines the record ACCOUNT_BALANCE_REC
       using the OPTIMIZE qualifier. Note that the USING clause is
       optional.

       DTR> DEFINE RECORD ACCOUNT_BALANCE_REC USING OPTIMIZE
            .
            .
            .
       DFN> ;
       DTR>

       The following example defines the record YACHT_REC in the CDO
       format dictionary using fields from a CDO dictionary. Note that
       you can mix fields from an existing CDO dictionary and fields
       private to DEC DATATRIEVE in the same record definition. Field
       BEAM uses CDD$DEFAULT.BEAM as a path. Fields LOA and PRICE are
       defined only for this record.

       DTR> DEFINE RECORD YACHT_REC USING
       DFN> 01 BOAT.
       DFN>    03 FROM GROUP SYS$COMMON:[CDDPLUS]DTR32.TYPE.
       DFN>    03 SPECIFICATIONS.
       DFN>        06 LOA PIC 99.
       DFN>        06 FROM FIELD BEAM.
       DFN>        06 PRICE PIC 999999.
       DFN> ;
       DTR>

36  –  DEFINE TABLE Command

       Enters the definition of a dictionary or domain table in the data
       dictionary (Oracle CDD/Repository) and creates an access control
       list (ACL) for the table. The following sections explain how to
       define dictionary and domain tables.

       Format

         To define a dictionary table use the following syntax:

         DEFINE TABLE path-name

          [QUERY_HEADER [IS] "header-segment"[/...]]

          [EDIT_STRING [IS] edit-string]

          [USING] code-field : translation-field [,]
          {"code-1"  }  { "translation-1" }
          {code-1    }: { translation-1   }[,]
          {          }  {                 }

          [ {"code-2"  }  {"translation-2"  } ]
          [ {code-2    }: {translation-2    } ][,]
          [ {          }  {                 } ]

           .                .
           .                .
           .                .

          [     { "translation-n"  } ]
          [ ELSE {translation-n    } ]
          [     {                  } ]

         END_TABLE

         To define a domain table use the following syntax:

         DEFINE TABLE  path-name FROM [DOMAIN] domain-name

          [QUERY_HEADER [IS] "header-segment"[/...]]

          [EDIT_STRING [IS] edit-string]

          [USING] code-field : translation-field [,]
          [     { "translation-string"  } ]
          [ ELSE {translation-string    } ]
          [     {                       } ]

         END_TABLE

36.1  –  Arguments

    path-name

       Is the given name, full dictionary path name, or relative
       dictionary path name of the dictionary table being defined. The
       full dictionary path name of the table cannot resolve to the full
       dictionary path name of any other object or directory in the data
       dictionary system. The DEFINE TABLE command accepts both DMU or
       CDO style path names.

    "code" : "translation"

       Is a code-and-translation pair. You must separate each pair with
       a colon. The comma after each pair is optional. If the code or
       translation conforms to the rules for DEC DATATRIEVE names given
       in the DEC DATATRIEVE User's Guide, you do not have to enclose it
       in quotation marks. However, DEC DATATRIEVE converts to uppercase
       any lowercase letters in an unquoted code or translation.

       If the code or translation does not conform to the rules for DEC
       DATATRIEVE names (especially if it contains any spaces), or if
       you want to preserve lowercase letters, you must enclose the code
       or translation in quotation marks (" ") and follow the rules for
       character string literals.

    ELSE "translation"

       Is the translation to be used if you specify a code not
       defined in the dictionary table. The rules for specifying
       this translation string are the same as those for codes and
       translations.

    END_TABLE

       Ends the dictionary table definition.

36.2  –  Examples

       The following example defines a table of department codes and
       specifies a query header for the translations of the table:

       DTR> DEFINE TABLE DEPT_TABLE
       DFN> QUERY_HEADER IS "Responsible"/"Department"
       DFN> CE : "Commercial Engineering"
       DFN> PE : "Plant Engineering"
       DFN> CS : "Customer Support"
       DFN> RD : "Research and Development"
       DFN> SD : "Sales Department"
       DFN> ELSE "UNKNOWN DEPARTMENT"
       DFN> END_TABLE
       DTR>

       The following example defines a table with a translation for each
       possible rig and includes an edit string in the definition that
       displays the translation in a 10 character wide column:

       DTR> DEFINE TABLE RIGGING
       DFN> EDIT_STRING IS T(10)
       DFN> QUERY_HEADER "TYPE OF"/"RIGGING"
       DFN> SLOOP : "ONE MAST"
       DFN> KETCH : "TWO MASTS, BIG ONE IN FRONT"
       DFN> YAWL  : "SIMILAR TO KETCH"
       DFN> MS    : "SAILS AND A BIG MOTOR"
       DFN> ELSE    "SOMETHING ELSE"
       DFN> END_TABLE
       DTR> PRINT "KETCH" VIA RIGGING

        TYPE OF
        RIGGING

       TWO MASTS,
       BIG ONE IN
       FRONT

       DTR>

       The following example shows how to define a domain table that
       returns the price of a yacht when you enter a value for LENGTH_
       OVER_ALL. The example specifies a query header and an edit string
       for the translation field:

       DTR> DEFINE TABLE LOA_PRICE_TABLE
       DFN>     FROM YACHTS
       DFN>     QUERY_HEADER IS "SAMPLE"/"PRICE"
       DFN>     EDIT_STRING IS $$$,$$$
       DFN>     USING LOA : PRICE
       DFN>     ELSE "NO BOATS IN STOCK WITH THAT LOA."
       DFN> END_TABLE
       DTR> PRINT 26 VIA LOA_PRICE_TABLE

       SAMPLE
       PRICE

       $17,900

       DTR>

37  –  DEFINEP Command

       Adds an entry to the access control list (ACL) for a dictionary
       object or dictionary directory.

       Format

         DEFINEP [FOR]  path-name sequence-number [,]

         { PW = password           }
         { UIC = [uic-spec]        }
         { USER = username         }
         {                         }
         {             TTnn:       }
         {            {          } } [,...] {,}
         {            {LOCAL     } }
         { TERMINAL = {NONLOCAL  } }
         {            {BATCH     } }
         {            {          } }
         {            {NETWORK   } }

         { {GRANT  }   {privilege-list  } }
         { {DENY   } = {                } } [,...]
         { {BANISH }   {ALL             } }
         { {       }                      }

37.1  –  Arguments

    path-name

       Is the given name, full dictionary path name, or relative
       dictionary path name of the dictionary object or dictionary
       directory whose ACL list you want to change. DEFINEP accepts
       both DMU and CDO style path names.

    sequence-number

       Is the sequence number of the entry to be added to the ACL. This
       number must be an unsigned, nonzero integer.

    PW = password

       Specifies a password to be appended to the given name of the
       dictionary object or dictionary directory when used alone in a
       command or statement or as part of a full or relative dictionary
       path name. You can specify a password in an ACL entry on a
       directory or object either in the DMU or in the CDO format
       dictionary.

    UIC = [uic-spec]

       Specifies the UIC or group of UICs to which the added ACL entry
       applies. The UIC specification must be enclosed in square
       brackets and must conform to the OpenVMS rules for specifying
       UICs (see the OpenVMS documentation set). You can specify
       numeric and alphanumeric UICs and rights identifiers. (A rights
       identifier is a single text string enclosed in brackets. The
       system manager defines a rights identifier in the system rights
       database. The identifier indicates all members of a particular
       group.)

    USER = username

       Specifies the OpenVMS user name to which the added ACL entry
       applies. Do not put the user name in parentheses or brackets.

                LOCAL
    TERMINAL =  NONLOCAL
                BATCH
                NETWORK

       Specifies a particular terminal or a type of terminal to which
       the added ACL entry applies.

       o  TTnn: is the number of a specific terminal line to which the
          added ACL entry applies. You can specify a particular terminal
          only in ACL entries in the DMU format dictionary.

       o  LOCAL specifies that the added ACL entry applies to all
          terminals hard-wired to your local system.

       o  NONLOCAL specifies that the added ACL entry applies to the
          local system's dial-up terminal lines, to batch jobs on the
          local system, to remote terminals logged in to the system
          by DECnet, and to processes initiated by a DEC DATATRIEVE
          Distributed Data Manipulation Facility (DDMF) on a remote node
          in a network of Digital computers.

       o  BATCH specifies that the added ACL entry applies to all batch
          jobs run on the local system.

       o  NETWORK specifies that the added ACL entry applies to all
          processes initiated by a DEC DATATRIEVE Distributed Data
          Manipulation Facility (DDMF) on a remote node in a network
          of Digital computers.

    , (comma)

       Separates user identification criteria and privilege
       specifications.

    GRANT

       Specifies the privileges granted by the added ACL entry.

    DENY

       Specifies the privileges denied by the added ACL entry.

    BANISH

       Specifies, for a dictionary directory and all its descendants,
       the access privileges that the entry denies and the privileges
       that no ACL of any of the descendants can grant. The BANISH
       clause is valid in ACL entries either in the DMU or in the CDO
       format dictionary.

    privilege-list

       Is a letter or string of letters, each one of which is the
       abbreviation for the access privilege granted, denied, or
       banished by the added ACL entry.

37.2  –  Example

       The following example defines an ACL entry for a DMU format
       dictionary directory that uses all the user identification
       criteria and all the privilege specifications:

       DTR> DEFINEP FOR MONTHLY_DATA 1 PW = "SECRET", USER = JONES,
       [Looking for define privilege option]
       CON>    UIC = [240,240], TERMINAL = NETWORK, GRANT = PSRWME,
       [Looking for define privilege option]
       CON>    DENY = CDUXH, BANISH = FG
       DTR>

38  –  DELETE Command

       Deletes one or more dictionary objects and their access control
       lists from the Oracle CDD/Repository data dictionary system.

       Format

         DELETE  path-name-1  [,...] ;

38.1  –  Arguments

    path-name

       Is the given name, full dictionary path name, or relative path
       name of the dictionary object you want to remove from the
       data dictionary system. DELETE accepts both DMU and CDO style
       path names. If you specify more than one dictionary path name,
       separate each path name from the next with a comma.

    ; (semicolon)

       Ends the DELETE command.

38.2  –  Examples

       The following example shows how to delete two domain versions
       from your default dictionary:

       DTR> SHOW DOMAINS
       Domains:
         * YACHTS;4  * YACHTS;3  * YACHTS;2  * YACHTS;1

       The following example does not specify a version number, so DEC
       DATATRIEVE deletes the highest version, YACHTS;4.

       DTR> DELETE YACHTS;
       DTR> SHOW DOMAINS
       Domains:
         * YACHTS;3  * YACHTS;2  * YACHTS;1

       DTR> DELETE YACHTS;2;
       DTR> SHOW DOMAINS
       Domains:
         * YACHTS;3  * YACHTS;1

39  –  DELETEP Command

       Deletes an entry from the access control list (ACL) of an object
       or directory in the data dictionary system.

       Format

         DELETEP  path-name  sequence-number

39.1  –  Arguments

    path-name

       Is the dictionary path name of the object or directory whose ACL
       you want to change. DELETEP accepts both DMU and CDO style path
       names.

    sequence-number

       Is a nonzero integer indicating the entry's position in the ACL.

39.2  –  Example

       The following example shows the ACL of the DMU YACHTS domain and
       deletes an entry from it:

       DTR> SHOWP YACHTS
         1:    [*,*], Username: "STARKEY"
               Grant - CDEFGHMPRSUWX, Deny - none, Banish - none
         2:    [*,*], Username: "DUNCAN"
               Grant - EHMPRSUW, Deny - CDFGX, Banish - none
         3:    [*,*], Username: "HARRISON"
               Grant - CDEFGHMPRSUWX, Deny - none, Banish - none
         4:    [*,*]
               Grant - none, Deny - CDEFGHMPRSUWX,  Banish - none

       DTR> DELETEP YACHTS 2
       DTR> SHOWP YACHTS
         1:    [*,*], Username: "STARKEY"
               Grant - CDEFGHMPRSUWX, Deny - none, Banish - none
         2:    [*,*], Username: "HARRISON"
               Grant - CDEFGHMPRSUWX, Deny - none, Banish - none
         3:    [*,*]
               Grant - none, Deny - CDEFGHMPRSUWX,  Banish - none

       DTR>

       See the chapter on ACL in the DEC DATATRIEVE User's Guide for
       other examples of working with ACLs.

40  –  DISCONNECT Statement

       Removes records from the sets you specify in the TO list of the
       CONNECT statement. The DISCONNECT statement can be used only for
       sets in which Oracle CODASYL DBMS retention is optional.

       Format

         DISCONNECT  context-name-1  [FROM]  set-name-1  [,...]

40.1  –  Arguments

    context-name-1

       Is the name of a valid context variable or the name of a
       collection with a selected record. The target record must be a
       member of the specified sets.

    set-name

       Is the name of a Oracle CODASYL DBMS set.

40.2  –  Examples

       The following example removes a part with a specified PART_ID
       from its membership in the set ALL_PARTS_ACTIVE:

       DTR> FOR P IN PART WITH PART_ID = "TU4722AS"
       CON>     DISCONNECT P FROM ALL_PARTS_ACTIVE
       DTR>

       The following example removes the group named PLANT ENGINEERING
       from the set MANAGES:

       DTR> FIND GROUPS WITH GROUP_NAME = "PLANT ENGINEERING"
       DTR> SELECT
       DTR> DISCONNECT CURRENT FROM MANAGES
       DTR>

41  –  DISPLAY Statement

       Displays the value of a single DEC DATATRIEVE value expression.
       The value displayed is not formatted by any edit string
       associated with the value expression.

       Format

         DISPLAY  value-expression

41.1  –  Argument

    value-expression

       Is a DEC DATATRIEVE value expression.

41.2  –  Examples

       The following example shows how to declare a numeric variable
       with a money edit string, give it a value, and use both the PRINT
       statement and the DISPLAY statement to display that value:

       DTR> DECLARE SALARY PIC Z(5)9V99 EDIT_STRING $$$$$$.99.
       DTR> SALARY = 15753.67
       DTR> PRINT SALARY

        SALARY

       $15753.67

       DTR> DISPLAY SALARY
       DISPLAY: 15753.67
       DTR>

       The following example redeclares the above variable as a
       character variable, assigns a new value, and displays that value:

       DTR> DECLARE SALARY PIC X(15).
       DTR> SALARY = "MUCH TOO LOW"
       DTR> PRINT SALARY

          SALARY

       MUCH TOO LOW

       DTR> DISPLAY SALARY
       DISPLAY: MUCH TOO LOW

       The following example displays the group fields TYPE and SPECS
       from the domain YACHTS:

       DTR> READY YACHTS
       DTR> FIND FIRST 1 YACHTS
       [1 Record found]
       DTR> SELECT; PRINT

                                      LENGTH
                                       OVER
       MANUFACTURER   MODEL     RIG    ALL   WEIGHT BEAM  PRICE

        ALBERG      37 MK II   KETCH   37    20,000  12  $36,951

       DTR> DISPLAY TYPE
       DISPLAY: ALBERG    37 MK II
       DTR> DISPLAY SPECS
       DISPLAY: KETCH 37 200001236951
       DTR>

42  –  DISPLAY FORM Statement

       Lets you display data on a form and collect data from a VAX TDMS
       or DEC FMS form.

       Format

         DISPLAY_FORM  form-name  IN  file-name

              [USING  statement-1]

              [RETRIEVE  [USING]  statement-2]

42.1  –  Arguments

    form-name

       Is the name of the VAX TDMS or DEC FMS form to be used with the
       domain.

    file-name

       Is the file specification of the form library file containing
       the form. File-name can be a VAX TDMS request library file or
       an DEC FMS forms library. The default file type for VAX TDMS
       request library files is .RLB; the default file type for DEC FMS
       form libraries is .FLB. A complete file specification has the
       following format:

       node-spec::device:[directory]file-name.type;version

    statement-1

       Is a DEC DATATRIEVE statement or a series of statements within
       a BEGIN-END block. Statement-1 can include one or more PUT_FORM
       assignment statements for assigning values to fields on a form.

       The PUT_FORM statement has the following format:

       PUT_FORM form-field = value-expression

    form-field

       Is the name of a field in a form.

    value-expression

       Is any DEC DATATRIEVE value expression.

    statement-2

       Is a DEC DATATRIEVE statement or a series of statements within
       a BEGIN-END block. Statement-2 can include GET_FORM value
       expressions for assigning values on a form to DEC DATATRIEVE
       fields or variables.

       The GET_FORM value expression has the following format:

       GET_FORM form-field

    form-field

       Is the name of a field in a form.

42.2  –  Examples

       The following example shows that you can display a form for
       a domain even if the form was not specified in the domain
       definition:

       DTR> DISPLAY_FORM YACHTF IN FORMSLIB;

       The following example displays the MANUFACTURER and MODEL fields
       on a form for the first five records of YACHTS:

       DTR> FOR FIRST 5 YACHTS
       CON>      DISPLAY_FORM YACHTF IN FORMSLIB USING
       CON>          BEGIN
       CON>             PUT_FORM MANUFA = MANUFACTURER
       CON>             PUT_FORM MODEL = MODEL
       CON>          END;

       The following example displays the MANUFACTURER and MODEL fields
       on a form for the first record of YACHTS and assigns the values
       to two variables, BUILT and MODELLER:

       DTR> DECLARE BUILT PIC X(10).
       DTR> DECLARE MODELLER PIC X(10).
       DTR> FOR FIRST 1 YACHTS
       CON> DISPLAY_FORM BOATS IN [MORRIS]DTR32.FLB USING
       CON>     BEGIN
       CON>       PUT_FORM MANUFA = MANUFACTURER
       CON>       PUT_FORM MODEL = MODEL
       CON>     END  RETRIEVE USING
       CON>        BEGIN
       CON>          BUILT = GET_FORM MANUFA
       CON>          MODELLER = GET_FORM MODEL
       CON>        END
       DTR> PRINT BUILT

         BUILT

       ALBERG

       DTR> PRINT MODELLER

        MODELLER

       37 MK II

       DTR>

       You can use a form to store and modify values for selected
       fields. You can also associate more than one form with a single
       domain. See the DEC DATATRIEVE Guide to Interfaces for more
       examples.

43  –  DROP Statement

       Removes the selected record from a collection, but does not
       remove that record from the data file in which it resides.

       Format

         DROP  [collection-name]

43.1  –  Argument

    collection-name

       Is the name of a collection. If the DROP statement does not
       contain this argument, it affects the CURRENT collection.

43.2  –  Example

       In the following example, a record is stored in YACHTS and
       a series of collections is formed. The DROP statement is
       illustrated using the SELECT, DROP, ERASE, and PRINT statements
       and the SHOW collection-name command:

       DTR> READY YACHTS WRITE
       DTR> STORE YACHTS USING BUILDER = "HINKLEY",
       DTR> FIND YACHTS WITH BUILDER = "HINKLEY"
       [1 record found]
       DTR> FIND A IN CURRENT
       [1 record found]
       DTR> FIND B IN YACHTS
       [114 records found]
       DTR> SELECT B; PRINT B.BOAT

                                      LENGTH
                                       OVER
       MANUFACTURER   MODEL     RIG    ALL   WEIGHT BEAM  PRICE

        ALBERG      37 MK II   KETCH   37    20,000  12  $36,951

       DTR> FIND C IN YACHTS
       [114 records found]
       DTR> SELECT LAST; PRINT

                                      LENGTH
                                       OVER
       MANUFACTURER   MODEL     RIG    ALL   WEIGHT BEAM  PRICE

        WRIGHT      SEAWIND II SLOOP   32    14,900  00  $34,480

       DTR> SHOW C
       Collection C
           Domain: YACHTS
           Number of Records: 114
           Selected Record: 114
       DTR> DROP
       DTR> SHOW C
       Collection C
           Domain: YACHTS
           Number of Records: 114
           Selected Record: 114 (Dropped)
       DTR> PRINT

                                      LENGTH
                                       OVER
       MANUFACTURER   MODEL     RIG    ALL   WEIGHT BEAM  PRICE

        ALBERG      37 MK II   KETCH   37    20,000  12  $36,951

       DTR> DROP

       Target record has already been dropped.
       DTR> SHOW B
       Collection B
           Domain: YACHTS
           Number of Records: 114
           Selected Record: 1
       DTR> DROP B
       DTR> SHOW B
       Collection B
           Domain: YACHTS
           Number of Records: 114
           Selected Record: 1 (Dropped)
       DTR> RELEASE C
       DTR> DROP
       Target record has already been dropped.
       DTR> ERASE
       No target record for ERASE.
       DTR> RELEASE B
       DTR> PRINT
       No record selected, printing whole collection

                                      LENGTH
                                       OVER
       MANUFACTURER   MODEL     RIG    ALL   WEIGHT BEAM  PRICE

        HINKLEY                                   0  00

       DTR> DROP
       No collection with selected record for DROP.
       DTR> SHOW CURRENT
       Collection A
           Domain: YACHTS
           Number of Records: 1
           No Selected Record
       DTR> SELECT; ERASE; SHOW CURRENT
       Collection A
           Domain: YACHTS
           Number of Records: 1
           Selected Record: 1 (Erased)
       DTR> DROP
       No collection with selected record for DROP.
       DTR>

44  –  EDIT Command

       Invokes an editor to edit the previous command or statement, one
       or more types of object definitions, or the dictionary object
       specified by the dictionary path name.

       Format

               [           {DOMAINS     }                    ]
               [           {PLOTS       }                    ]
               [           {            }                    ]
               [   [ALL]   {PROCEDURES  }  [,...]  [RECOVER] ]
               [           {RECORDS     }                    ]
         EDIT  [           {TABLES      }                    ]
               [                                             ]
               [                                             ]
               [   ALL  [RECOVER]                            ]
               [                                             ]
               [   [path-name]  [RECOVER]                    ]
               [                                             ]

44.1  –  Arguments

    ALL

       Places all the objects in your Oracle CDD/Repository default
       directory in an editing buffer. The keyword ALL is optional when
       used with the object types, but required when used alone or with
       only RECOVER.

    path-name

       Is the given name, full dictionary path name, or relative path
       name of a DEC DATATRIEVE domain, record, procedure, or table
       definition you want to edit. EDIT accepts both DMU and CDO style
       path names.

    DOMAINS

       You can specify one or more types of object definitions with the
       EDIT command. This allows you to edit all the domains, plots,
       procedures, records, or tables from your current default Oracle
       CDD/Repository directory.

    RECOVER

       Allows recovery for edited dictionary objects.

44.2  –  Example

       The following example shows how to edit the definition for the
       record YACHT:

       DTR> EDIT YACHT
       REDEFINE RECORD YACHT USING
       01 BOAT.
         03 TYPE.
            06 MANUFACTURER PIC X(10)
               QUERY_NAME IS BUILDER.
            06 MODEL PIC X(10).
         03 SPECIFICATIONS
            QUERY_NAME SPECS.
            06 RIG PIC X(6)
               VALID IF RIG EQ "SLOOP","KETCH","MS","YAWL".
            06 LENGTH_OVER_ALL PIC XXX
               VALID IF LOA BETWEEN 15 AND 50
               QUERY_NAME IS LOA.
            06 DISPLACEMENT PIC 99999
               QUERY_HEADER IS "WEIGHT"
               EDIT_STRING IS ZZ,ZZ9
               QUERY_NAME IS DISP.
            06 BEAM PIC 99 MISSING VALUE IS 0.
            06 PRICE PIC 99999
               MISSING VALUE IS 0
               VALID IF PRICE>DISP*1.3 OR PRICE EQ 0
               EDIT_STRING IS $$$,$$$.
       ;
       [Record is 41 bytes long.]

       You can now edit the record definition. If SET EDIT_BACKUP is in
       effect, the old version of the YACHT record is retained in the
       data dictionary when you exit the editor.

45  –  EDIT STRING Clause

       Specifies the output format of a field value.

       Format

         EDIT_STRING  [IS]  edit-string

45.1  –  Argument

    edit-string

       Is one or more edit string characters describing the output
       format of the field value.

46  –  END REPORT Statement (Report Writer)

       Ends the report specification.

       Format

         END_REPORT

46.1  –  Example

       For examples of report specifications, see the chapters on
       writing reports in the DEC DATATRIEVE User's Guide.

47  –  ERASE Statement

       Permanently removes one or more data records from an indexed
       or relative data file, a Oracle CODASYL DBMS database, or a
       relational database.

       Format

         ERASE  [ALL  [OF rse] ]

47.1  –  Arguments

    ALL

       Causes DEC DATATRIEVE to permanently remove from the data file
       every record in the current collection.

    ALL OF rse

       Causes DEC DATATRIEVE to permanently remove from the data file
       every record identified by the record selection expression.

47.2  –  Examples

       The following example shows how to erase all the yachts built by
       Albin:

       DTR> FIND YACHTS WITH BUILDER EQ "ALBIN"
       [3 records found]
       DTR> ERASE ALL

       In the following example, a procedure is defined that erases
       selected yachts:

       DTR> DEFINE PROCEDURE SELL_BOAT
       DFN>     FIND YACHTS WITH BUILDER EQ *.BUILDER AND
       DFN>          MODEL = *.MODEL
       DFN>     PRINT ALL
       DFN>     IF *."Y IF BOAT SOLD" CONT "Y" THEN ERASE ALL
       DFN> END_PROCEDURE
       DTR>

48  –  EXIT Command

       Ends a DEC DATATRIEVE session.

       Format

         { EXIT  }
         { CTRL/Z}
         {       }

48.1  –  Parameters

    None.

48.2  –  Examples

       The following example shows how to end a DEC DATATRIEVE session:

       DTR> EXIT
       $

       The following example shows the result of entering CTRL/Z to the
       Enter prompt of a STORE statement:

       DTR> READY YACHTS WRITE
       DTR> STORE YACHTS
       Enter MANUFACTURER: <CTRL/Z>
       Execution terminated by operator
       DTR>

49  –  EXTRACT Command

       Copies the Oracle CDD/Repository data dictionary definition of
       one or more dictionary objects or types of object definitions to
       a command file.

       Format

                  {          {DOMAINS     }                          }
                  {          {PLOTS       }                          }
                  {  [ALL]   {PROCEDURES  }  [,...]  [ON]  file-spec }
                  {          {            }                          }
                  {          {RECORDS     }                          }
                  {          {TABLES      }                          }
         EXTRACT  {                                                  }
                  {  ALL  [ON]  file-spec                            }
                  {                                                  }
                  {                                                  }
                  {  [ON]  file-spec  path-name  [,...]              }
                  {                                                  }
                  {                                                  }
                  {  path-name  [,...]  [ON]  file-spec              }

49.1  –  Arguments

    ALL

       Causes DEC DATATRIEVE to copy into the specified command file
       the definitions of one or more dictionary objects in your default
       dictionary directory.

       The keyword ALL is optional when used with the types of object
       definitions such as PLOTS or DOMAINS.

       The keyword ALL is required, however, when used with the EXTRACT
       ALL [ON] file-spec syntax.

    DOMAINS

       Allows you to extract all the domains, plots, procedures,
       records, or tables from your current default Oracle
       CDD/Repository directory.

    file-spec

       Is the OpenVMS specification of the RMS file to contain the
       definitions. A complete file specification has the following
       format:

       node-spec::device:[directory]file-name.type;version

    path-name

       Is the given name, full dictionary path name, or relative path
       name of the dictionary object whose definition you want to copy.
       If you specify more than one dictionary path name, use a comma to
       separate each one from the next. EXTRACT accepts both DMU and CDO
       style path names.

49.2  –  Example

       Extract all the definitions in a dictionary directory to create a
       backup file:

       DTR> EXTRACT ALL ON BAKUP1
       DTR>

50  –  FIND Statement

       Establishes a collection of records from a domain, view,
       collection, or list. The collection formed with the FIND
       statement becomes the current collection.

       Format

         FIND  rse

50.1  –  Argument

    rse

       Is a record selection expression specifying the records to be
       included in the collection.

50.2  –  Examples

       The following example forms a collection of yachts longer than 30
       feet and gives the collection the name BIG-ONES:

       DTR> FIND BIG-ONES IN YACHTS WITH LOA GT 30
       [57 records found]
       DTR>

       The following example forms a collection of the 10 most expensive
       yachts:

       DTR> FIND FIRST 10 YACHTS SORTED BY DESC PRICE
       [10 records found]
       DTR>

51  –  FINISH Command

       Ends your access to domains, domain tables, relations, and
       Oracle CODASYL DBMS records. The FINISH command also releases
       any collections associated with the domains.

       For Oracle CODASYL DBMS, when the last Oracle CODASYL DBMS domain
       or record is finished, collections are purged, a commit with
       no retention is performed, and databases are unbound. The last
       FINISH commits all Oracle CODASYL DBMS databases. A commit is
       not done until you finish the last Oracle CODASYL DBMS record or
       domain.

       For relational sources, when the last domain or relation is
       finished, a commit is performed and no collections are retained.

       Format

                 [ ALL                            ]
                 [ [ domain-name        ]         ]
         FINISH  [ [                    ] [,...]  ]
                 [ [ dbms-record-name   ]         ]
                 [ [ rdb-relation-name  ]         ]
                 [                                ]

51.1  –  Arguments

    ALL

       Ends your control over all readied domains, relations, Oracle
       CODASYL DBMS records, and all domain or dictionary tables loaded
       in your workspace.

    domain-name

       Is the given name of a readied domain or domain table you want
       to finish. If you specify the names of more than one domain or
       domain table, separate each from the next with a comma (,).

    rdb-relation-name

       Is the given name of a readied relation you want to finish. If
       you specify the names of more than one relation, separate each
       from the next with a comma (,).

    dbms-record-name

       Is the given name of a Oracle CODASYL DBMS record readied with
       the READY database command. If you specify the names of more than
       one record, separate each from the next with a comma (,).

51.2  –  Example

       The following example releases control of the domain YACHTS:

       DTR> SHOW READY
       Ready sources:
          YACHTS:  Domain, RMS indexed, protected read
                  <CDD$TOP.DTR$LIB.DEMO.YACHTS;1>
       No loaded tables.

       DTR> FINISH YACHTS
       DTR> SHOW READY
       No ready sources.
       No loaded tables.
       DTR>

52  –  FOR Statement

       Causes DEC DATATRIEVE to execute a statement or group of
       statements once for each record in the record stream formed by
       a record selection expression (RSE). The FOR statement provides
       repeating loops for DEC DATATRIEVE operations.

       Format

         FOR  rse  statement

52.1  –  Arguments

    rse

       Is a record selection expression that forms the record stream
       that controls the number of times DEC DATATRIEVE executes
       the statement and controls the single-record context for the
       statement.

    statement

       Is either a simple or a compound statement you want DEC
       DATATRIEVE to execute once for each record in the record
       stream formed by the RSE. You can form compound DEC DATATRIEVE
       statements with the BEGIN-END, IF-THEN-ELSE, and THEN statements,
       which are described in this chapter.

52.2  –  Examples

       The following example assigns a value to the field PRICE for
       three yachts with prices equal to zero:

       DTR> READY YACHTS MODIFY
       DTR> SET NO PROMPT
       DTR> FIND FIRST 3 A IN YACHTS WITH PRICE = 0
       [3 records found]
       DTR> PRINT A

                                      LENGTH
                                       OVER
       MANUFACTURER   MODEL     RIG    ALL   WEIGHT BEAM  PRICE

        BLOCK I.    40         SLOOP   39    18,500  12
        BUCCANEER   270        SLOOP   27     5,000  08
        BUCCANEER   320        SLOOP   32    12,500  10

       DTR> FOR A
       CON> MODIFY USING PRICE = DISP * 1.3 + 5000
       DTR> PRINT A

                                      LENGTH
                                       OVER
       MANUFACTURER   MODEL     RIG    ALL   WEIGHT BEAM  PRICE

        BLOCK I.    40         SLOOP   39    18,500  12  $29,050
        BUCCANEER   270        SLOOP   27     5,000  08  $11,500
        BUCCANEER   320        SLOOP   32    12,500  10  $21,250

       DTR>

       The following example uses a variable to force an end to a FOR
       loop before all records in the record stream have been acted
       upon:

       DTR> READY YACHTS
       DTR> DECLARE A PIC 9.
       DTR> PRINT A

       A

       0

       DTR> SET NO PROMPT
       DTR> FOR YACHTS
       CON> BEGIN
       CON>   A = A + 1
       CON>   PRINT A, BOAT
       CON>   IF A = 5 THEN ABORT "END OF LOOP"
       CON> END

                                        LENGTH
                                         OVER
       A MANUFACTURER   MODEL     RIG    ALL   WEIGHT BEAM  PRICE

       1  ALBERG      37 MK II   KETCH   37    20,000  12  $36,951
       2  ALBIN       79         SLOOP   26     4,200  10  $17,900
       3  ALBIN       BALLAD     SLOOP   30     7,276  10  $27,500
       4  ALBIN       VEGA       SLOOP   27     5,070  08  $18,600
       5  AMERICAN    26         SLOOP   26     4,000  08   $9,895
       ABORT: END OF LOOP

       DTR>

       The following example contains a SORTED BY clause that allows the
       FOR loop to select records according to their length. The context
       variable X identifies the record stream in the FOR statement.

       DTR> READY YACHTS
       DTR> FOR FIRST 4 X IN YACHTS SORTED BY LOA
       CON> PRINT BUILDER, LOA

                    LENGTH
                     OVER
       MANUFACTURER  ALL

        WINDPOWER    16
        CAPE DORY    19
        ENCHILADA    20
        VENTURE      21

       DTR>

       The following example uses nested FOR loops to increase by one
       year the age of each child in the first two records of the domain
       FAMILIES:

       DTR> READY FAMILIES MODIFY
       DTR> PRINT FIRST 2 FAMILIES

                             NUMBER    KID
         FATHER     MOTHER    KIDS     NAME    AGE

       JIM        ANN           2   URSULA      7
                                    RALPH       3
       JIM        LOUISE        5   ANNE       31
                                    JIM        29
                                    ELLEN      26
                                    DAVID      24
                                    ROBERT     16

       DTR> SET NO PROMPT
       DTR> FOR FIRST 2 FAMILIES
       CON>   FOR KIDS
       CON>     MODIFY USING AGE = AGE + 1
       DTR> PRINT FIRST 2 FAMILIES

                             NUMBER    KID
         FATHER     MOTHER    KIDS     NAME    AGE

       JIM        ANN           2   URSULA      8
                                    RALPH       4
       JIM        LOUISE        5   ANNE       32
                                    JIM        30
                                    ELLEN      27
                                    DAVID      25
                                    ROBERT     17

53  –  HELP Command

       Provides on-line information about the use of DEC DATATRIEVE
       commands, statements, and language elements.

       Format

         { HELP }
         { ?    }  [ERROR]  [topic][...]
         {      }

53.1  –  Arguments

    ERROR

       Provides additional information on the last error message that
       you received.

    topic

       Is a DEC DATATRIEVE command, statement, statement element, or
       error. Use commas to separate each topic from the next.

     . . . (ellipsis)

       Indicates that all help subtopics and any of their subtopics
       should be displayed.

    ? (question mark)

       Is a synonym for HELP.

53.2  –  Examples

       The following example shows how to ask for a list of the help
       that is available:

       DTR> HELP

       The following example shows how to ask for help on the screen-
       oriented Help facility:

       DTR> HELP VIDEO

       The following example shows how to ask for help on the last error
       message you received. For example, if you use the SORT statement
       without first forming a collection, DEC DATATRIEVE displays an
       error message:

       DTR> READY YACHTS
       DTR> SORT BY LOA
       No collection for sort.

       You can issue the HELP ERROR command to find out the reason for
       the error message, possible actions to correct the error, and how
       to obtain more on-line information:

       DTR> HELP ERROR
       No collection for sort.

       ERROR_MESSAGES

       Errors

       NOCOLSOR

          008D8352 No collection for sort.

          Explanation:

          You can use the SORT statement only with an established
          collection.

          User Action:

          Use the SORTED BY clause in an RSE to order records not
          contained in an established collection. For example:
          PRINT EMPLOYEES SORTED BY LAST_NAME.

          You can also use the SORTED BY clause in the RSE of the FIND
          statement to order records when a collection is being created.
          In addition, you can use a SORT statement to reorder records
          after the collection is created.

54  –  IF THEN ELSE Statement

       Causes DEC DATATRIEVE to execute one of two statements or
       compound statements, depending on the evaluation of a conditional
       (Boolean) expression.

       Format

         IF  boolean-expression  [THEN] statement-1 [ELSE statement-2]

54.1  –  Arguments

    boolean-expression

       Is a Boolean expression.

    THEN

       Is an optional language element you can use to clarify syntax.

    statement-1

       Is a simple or compound statement you want DEC DATATRIEVE to
       execute if the Boolean expression evaluates to true.

    ELSE statement-2

       Specifies the statement you want DEC DATATRIEVE to execute if the
       Boolean expression evaluates to false.

54.2  –  Examples

       The following example shows how to print each yacht built by
       Pearson, and modify the price if you want to:

       DTR> SET NO PROMPT
       DTR> READY YACHTS WRITE
       DTR> FOR YACHTS WITH BUILDER = "PEARSON"
       CON>    BEGIN
       CON>         PRINT
       CON>         IF *."Y TO MODIFY PRICE, N TO SKIP" CONT "Y"
       CON>            THEN MODIFY PRICE ELSE
       CON>            PRINT "NO CHANGE"
       CON>         IF *."Y TO CONTINUE" NOT CONT "Y" THEN
       CON>            ABORT "END OF PRICE CHANGES"
       CON>    END

                                       LENGTH
                                       OVER
       MANUFACTURER   MODEL     RIG    ALL   WEIGHT BEAM  PRICE

        PEARSON     10M        SLOOP   33    12,441  11
       Enter Y TO MODIFY PRICE, N TO SKIP: N
       NO CHANGE
       Enter Y TO CONTINUE, N TO ABORT: Y
        PEARSON     26         SLOOP   26     5,400  08
       Enter Y TO MODIFY PRICE, N TO SKIP: N
       NO CHANGE
       Enter Y TO CONTINUE, N TO ABORT: N
       ABORT: END OF PRICE CHANGES

       DTR>

       In the following example the IF statement is used to select
       families with fathers named Jim and list the children in those
       families:

       DTR> READY FAMILIES
       DTR> FOR FAMILIES WITH ANY KIDS
       CON>      IF FATHER EQ "JIM" THEN
       CON>         PRINT "The Kids of JIM and"|||MOTHER,
       CON>         ALL KID_NAME ("Kids with Fathers"/
       CON>             "Named Jim") OF KIDS, SKIP

                                      Kids with Fathers
                                          Named Jim

       The Kids of JIM and ANN           URSULA
                                         RALPH

       The Kids of JIM and LOUISE        ANNE
                                         JIM
                                         ELLEN
                                         DAVID
                                         ROBERT

       DTR>

55  –  LIST Statement

       Causes DEC DATATRIEVE to format and write to your terminal, to a
       file, or to a unit record device one or more values of implied or
       specified fields from records in one or more readied domains.

       Format

         For retrieving from selected records and target record streams
         formed by FOR loops:

                            [    {file-spec  } ]
         LIST  [print-list] [ ON {*.prompt   } ]
                            [    {           } ]

         For retrieving from the current collection:

                                 [    {file-spec  } ]
         LIST  ALL  [print-list] [ ON {*.prompt   } ]
                                 [    {           } ]

         For retrieving from record streams formed by the LIST statement
         using one RSE:

                                     [    {file-spec  } ]
         LIST  [print-list  OF]  rse [ ON {*.prompt   } ]
                                     [    {           } ]

         For retrieving from record streams formed by the LIST statement
         using two RSEs (the inner print list follows another print
         list):

         LIST  print-list, ALL print-list OF rse-1 [,print-list] OF rse-2

               [    {file-spec  } ]
               [ ON {*.prompt   } ]
               [    {           } ]

         For retrieving from record streams formed by the LIST statement
         using two RSEs (the inner print list precedes any other print
         list):

         LIST  ALL  ALL  print-list  OF  rse-1  [,print-list]  OF  rse-2
               [    {file-spec  } ]
               [ ON {*.prompt   } ]
               [    {           } ]

55.1  –  Arguments

    print-list

       Is a list of field names; it can also include only the print list
       elements SKIP, NEW_PAGE, and inner print lists. You can control
       the format in which DEC DATATRIEVE displays values from the
       specified fields with the USING edit-string modifiers described
       in the Results section of the PRINT command section.

    ALL

       When used alone following LIST, causes the records in the current
       collection to be displayed or written to the specified file or
       device.

       When used with a print list, ALL causes the print list to be
       evaluated for each record in the current collection.

       When used with the OF rse clause, ALL is optional. You can use
       it to clarify the LIST statement, but, regardless of the presence
       of ALL, DEC DATATRIEVE evaluates the LIST statement once for each
       record in the record stream formed by the RSE.

       When the print list begins with an inner print list, ALL is
       required to establish the proper context in which to resolve
       references to the items in the hierarchical list.

    rse

       Is a record selection expression that creates the record stream
       DEC DATATRIEVE uses to evaluate the elements of the print list.

    file-spec

       Is the file specification to which you want to write the output
       of the statement. A complete file specification has the following
       format:

       node-spec::device:[directory]file-name.type;version

    *.prompt-name

       Is a prompting value expression that prompts you for a device
       name or file specification to which you want to write the output
       of the statement.

55.2  –  Examples

       The following example lists three records from YACHTS:

       DTR> READY YACHTS
       DTR> LIST FIRST 3 YACHTS

       MANUFACTURER    : ALBERG
       MODEL           : 37 MK II
       RIG             : KETCH
       LENGTH_OVER_ALL : 37
       DISPLACEMENT    : 20,000
       BEAM            : 12
       PRICE           : $36,951

       MANUFACTURER    : ALBIN
       MODEL           : 79
       RIG             : SLOOP
       LENGTH_OVER_ALL : 26
       DISPLACEMENT    :  4,200
       BEAM            : 10
       PRICE           : $17,900

       MANUFACTURER    : ALBIN
       MODEL           : BALLAD
       RIG             : SLOOP
       LENGTH_OVER_ALL : 30
       DISPLACEMENT    :  7,276
       BEAM            : 10
       PRICE           : $27,500

       The following example lists the first two records in FAMILIES:

       DTR> READY FAMILIES
       DTR> LIST FIRST 2 FAMILIES

       FATHER      : JIM
       MOTHER      : ANN
       NUMBER_KIDS :  2
           KID_NAME    : URSULA
           AGE         :  7
           KID_NAME    : RALPH
           AGE         :  3

       FATHER      : JIM
       MOTHER      : LOUISE
       NUMBER_KIDS :  5
           KID_NAME    : ANNE
           AGE         : 31
           KID_NAME    : JIM
           AGE         : 29
           KID_NAME    : ELLEN
           AGE         : 26
           KID_NAME    : DAVID
           AGE         : 24
           KID_NAME    : ROBERT
           AGE         : 16

       DTR>

56  –  MATCH Statement

       Relates two list names with their subordinate elementary fields,
       so that data from the second list can be stored in the first
       list.

       Format

         MATCH  list-rse-1,  list-rse-2  statement

56.1  –  Arguments

    list-rse-1

       Is an RSE containing a list name from the record definition of
       the domain that is to receive the data.

    list-rse-2

       Is an RSE containing a list name from the record definition of
       the source domain for the data.

    statement

       Is a DEC DATATRIEVE Assignment statement or series of Assignment
       statements enclosed by a BEGIN-END block.

56.2  –  Example

       Consider the following record definition for the domain FAM:

       DTR> SHOW FAM_REC
       RECORD FAM_REC USING
         01 FAMILY.
           03 PARENTS.
              06 FATHER PIC X(10).
              06 MOTHER PIC X(10).
           03 NUMBER_KIDS PIC 99 EDIT_STRING IS Z9.
           03 KIDS_N OCCURS 10 TIMES.
              06 EACH_KID.
                  09 KID_NAME PIC X(10) QUERY_NAME IS KID.
           03 KIDS_A OCCURS 10 TIMES.
              06 EACH_KID.
                  09 AGE PIC 99 EDIT_STRING IS Z9.
       ;

       The fixed-length list format means that values are displayed for
       10 KIDS_N and 10 KIDS_A, no matter what the value for NUMBER_
       KIDS. In displays and reports, this means that most FAM records
       would be separated by strings of blanks (for "empty" occurrences
       of KIDS_N) and zeros (for "empty" occurrences of KIDS_A).

       DTR> PRINT FAM

                             NUMBER    KID
         FATHER     MOTHER    KIDS     NAME    AGE

       JIM        ANN           2   URSULA      7
                                    RALPH       3
                                                0
                                                0
                                                0
                                                0
                                                0
                                                0
                                                0
                                                0
       JIM        LOUISE        5   ANNE       31
                                    JIM        29
                                    ELLEN      26
                                    DAVID      24
                                    ROBERT     16
                                                0
                                                0
                                                0
                                                0
                                                0
                 .          .          .
                 .          .          .
                 .          .          .

       To improve display and report formats for this domain, you could
       restructure it using the MATCH statement so that it contains one
       variable-length list field. In other words, the modified record
       definition would look like the current one for the FAMILIES
       domain.

       DTR> SHOW FAMILY_REC
       RECORD FAMILY_REC
       01 FAMILY.
          03 PARENTS.
             06 FATHER PIC X(10).
             06 MOTHER PIC X(10).
          03 NUMBER_KIDS PIC 99 EDIT_STRING IS Z9.
          03 KIDS OCCURS 0 TO 10 TIMES DEPENDING ON NUMBER_KIDS.
             06 EACH_KID.
                09 KID_NAME PIC X(10) QUERY_NAME IS KID.
                09 AGE PIC 99 EDIT_STRING IS Z9.
       ;

       If you attempted to restructure FAM without using the MATCH
       statement, DEC DATATRIEVE would not store the list elements.
       This problem occurs because the modified record definition
       combines two list fields into one. Therefore, to restructure
       the FAM domain, you must use the MATCH statement within a STORE
       statement that is controlled by a FOR loop. The following series
       of statements stores the data from the records in FAM into the
       records in FAMILIES and then prints the results:

       DTR> READY FAM
       DTR> DEFINE FILE FOR FAMILIES
       DTR> READY FAMILIES WRITE
       DTR> FOR FAM
       CON> STORE FAMILIES USING
       CON>   BEGIN
       CON>     PARENTS = PARENTS
       CON>     NUMBER_KIDS = NUMBER_KIDS
       CON>     MATCH KIDS, KIDS_N
       CON>       KID_NAME = KID_NAME
       CON>     MATCH KIDS, KIDS_A
       CON>       AGE = AGE
       CON>   END
       DTR> PRINT FAMILIES

                             NUMBER    KID
         FATHER     MOTHER    KIDS     NAME    AGE

       JIM        ANN           2   URSULA      7
                                    RALPH       3
       JIM        LOUISE        5   ANNE       31
                                    JIM        29
                                    ELLEN      26
                                    DAVID      24
                                    ROBERT     16
                 .          .          .
                 .          .          .
                 .          .          .

57  –  MISSING VALUE Clause

       Designates a value for a field that DEC DATATRIEVE recognizes,
       not as the literal value, but as a marker that no value is
       stored in the field. DEC DATATRIEVE ignores fields containing the
       "missing value" marker when evaluating statistical expressions
       (AVERAGE, MAX, MIN, TOTAL, and STD_DEV).

       When you store a record and do not directly assign a value to
       a field with a MISSING VALUE defined, DEC DATATRIEVE uses the
       missing value to initialize the field if it contains no DEFAULT
       VALUE clause.

       Format

         MISSING  [VALUE [IS]] literal

57.1  –  Arguments

    VALUE IS

       Are optional keywords you can use to clarify the syntax of the
       clause.

    literal

       Is either a numeric or character string literal.

57.2  –  Examples

       The following example defines a record that contains MISSING
       VALUE clauses:

       DTR> DEFINE DOMAIN THINGS USING THINGREC ON THINGS;
       DTR> DEFINE RECORD THINGREC USING
       DFN> 01 THINGS.
       DFN>    03 NUM PIC 9(5)
       DFN>       MISSING VALUE IS 11111
       DFN>       EDIT_STRING IS ZZ,Z99?"***MISSING***".
       DFN>    03 STR PIC X(10) MISSING VALUE IS "EMPTY"
       DFN>       EDIT_STRING IS X(10)?"***MISSING***".
       DFN> ;

       DTR>

       The following example defines a new domain based on YACHTS that
       uses a new missing value and a MISSING VALUE edit string:

       DTR> DEFINE DOMAIN YACHTS_PRICE_LIST USING YPL_REC ON YPL.DAT;
       DTR> DEFINE RECORD YPL_REC USING
       DFN> 01 BOAT.
       DFN>    03 TYPE.
       DFN>       05 BUILDER PIC X(10).
       DFN>       05 MODEL PIC X(8).
       DFN>    03 PRICE PIC 9(5) MISSING VALUE IS 0
       DFN>       EDIT_STRING $$$,$$$?"NOT LISTED".
       DFN> ;
       [Record is 23 bytes long.]
       DTR> DEFINE FILE FOR YACHTS_PRICE_LIST KEY = TYPE
       DTR> READY YACHTS_PRICE_LIST AS YPL WRITE
       DTR> READY YACHTS
       DTR> YPL = YACHTS WITH LOA GT 35
       DTR> FIND YPL WITH PRICE MISSING
       [12 records found]
       DTR> PRINT FIRST 3 CURRENT

        BUILDER    MODEL     PRICE

       BLOCK I.   40       NOT LISTED
       CABOT      36       NOT LISTED
       DOWN EAST  38       NOT LISTED

       DTR>

58  –  MODIFY Statement

       Changes the value of one or more fields in a selected record or
       in any or all records in a collection or record stream.

       Format 1

                        [ field-name  [,...] ]
         MODIFY  [ALL]  [ USING  statement-1 ]
                        [                    ]

              [VERIFY  [USING]  statement-2]

              [OF  rse]

       Format 2

         MODIFY  [ALL]  rse

              USING  statement-1

              [VERIFY  [USING]  statement-2]

58.1  –  Arguments

    ALL

       Specifies that you want to modify either all records in the
       CURRENT collection or all records in the record stream specified
       in the record selection expression (rse).

    field-name

       Specifies the name of a field in the target records you want to
       modify. If you specify more than one field name, use a comma to
       separate each field name from the next. DEC DATATRIEVE prompts
       you to supply a value for each field you specify.

    USING statement-1

       Specifies a simple or compound DEC DATATRIEVE statement that
       assigns values to one or more fields in the target records
       you want to modify. This clause can also contain any other DEC
       DATATRIEVE statements, such as PRINT, STORE, and other MODIFY
       statements.

    VERIFY [USING] statement-2

       Specifies a statement that DEC DATATRIEVE executes before
       modifying the target record.

    OF rse

       Is a record selection expression that forms a record stream of
       the records you want to modify. An OF rse clause is optional in
       format 1 of the MODIFY statement. In format 2, an rse without OF
       is required.

58.2  –  Examples

       The following example changes one field value in a selected
       record:

       DTR> READY YACHTS MODIFY
       DTR> FIND FAMILIES WITH FATHER = "JOHN"
       [2 records found]
       DTR> PRINT
       No record selected, printing whole collection.

                             NUMBER    KID
         FATHER     MOTHER    KIDS     NAME    AGE
       JOHN       JULIE         2   ANN        29
                                    JEAN       26
       JOHN       ELLEN         1   CHRISTOPHR  0

       DTR> SELECT 1
       DTR> MODIFY FATHER
       Enter FATHER: JON
       DTR> PRINT

                             NUMBER    KID
         FATHER     MOTHER    KIDS     NAME    AGE

       JON        JULIE         2   ANN        29
                                    JEAN       26

       DTR>

       The following example makes a 10 percent increase in the price of
       the first five yachts. Each yacht begins and ends with a unique
       price, but the new price of each yacht is 10 percent greater than
       the old price of that same yacht.

       DTR> MODIFY FIRST 5 YACHTS USING PRICE = PRICE * 1.1
       DTR> PRINT FIRST 5 YACHTS

                                      LENGTH
                                       OVER
       MANUFACTURER   MODEL     RIG    ALL   WEIGHT BEAM  PRICE

        ALBERG      37 MK II   KETCH   37    20,000  12  $40,646
        ALBIN       79         SLOOP   26     4,200  10  $19,690
        ALBIN       BALLAD     SLOOP   30     7,276  10  $30,250
        ALBIN       VEGA       SLOOP   27     5,070  08  $20,460
        AMERICAN    26         SLOOP   26     4,000  08  $10,885

       DTR>

59  –  OCCURS Clause

       The OCCURS clause defines multiple occurrences (or repetitions)
       of a field or group of fields. The multiple occurrences, called a
       list, create a hierarchy in the domain.

       The OCCURS clause has two formats: one format for a fixed number
       of occurrences and one for a variable number of occurrences. Each
       is described in the following sections.

       To define a fixed number of occurrences use the following format:
       OCCURS  n  TIMES

       To define a variable number of occurrences use the following format:
       OCCURS  min  TO  max  TIMES DEPENDING ON  field-name

60  –  ON Statement

       Sends the output of all indicated statements to the specified
       output file or device.

       Format

             { file-spec }
         ON  { *.prompt  } statement
             {           }

60.1  –  Arguments

    file-spec

       Specifies the file to which you want to write the output of the
       statement. The file specification has the following format:

       node-spec::device:[directory]file-name.type;version

    statement

       Is a simple or compound statement you want DEC DATATRIEVE to
       execute and write the output to the specified file.

    *.prompt

       Is a prompting value expression that prompts you for a file
       specification to which you want to write the output of the
       statement.

60.2  –  Examples

       The following example shows how to search all yachts built by
       AMERICAN and print the TYPE, PRICE, and RIG for each sloop. For
       all yachts built by AMERICAN which are not sloops, a line is
       skipped and a message is printed. The output is written to an RMS
       file.

       Since an IF-THEN-ELSE statement is used and the same file name
       is specified in the THEN and ELSE clauses, DEC DATATRIEVE creates
       two versions of the file.

       DTR> FOR YACHTS WITH BUILDER = "AMERICAN"
       CON> IF RIG = "SLOOP" THEN
       CON>     PRINT TYPE, PRICE, RIG ON BOAT.RNO ELSE
       CON>     PRINT SKIP, "NOT A SLOOP" ON BOAT.RNO
       Creating file DB0:[MORRISON.REF]BOAT.RNO;1 ...
       Creating file DB0:[MORRISON.REF]BOAT.RNO;2 ...

       The content of BOAT.RNO;1 is as follows:

       MANUFACTURER   MODEL     PRICE   RIG

        AMERICAN    26          $9,895 SLOOP

       The content of BOAT.RNO;2 is as follows:

       NOT A SLOOP

       However, if you use the ON statement, all of the data can be
       written to the same file as follows:

       DTR> ON SHIP.RNO
       CON> FOR YACHTS WITH BUILDER = "AMERICAN"
       CON> IF RIG = "SLOOP" THEN PRINT TYPE, PRICE, RIG ELSE
       CON> PRINT SKIP, "NOT A SLOOP"
       Creating file DB0:[MORRISON.REF]SHIP.RNO;1 ...

       The contents of SHIP.RNO is as follows:

       MANUFACTURER   MODEL     PRICE   RIG

        AMERICAN    26          $9,895 SLOOP

       NOT A SLOOP

       The following example shows how to write the output of a LIST
       statement to three files and display the output. Data on every
       family with three children is included:

       DTR> ON FAM1.RNO
       CON> ON FAM2.RNO
       CON> ON FAM3.RNO
       CON> ON TT:
       CON> LIST FAMILIES WITH NUMBER_KIDS = 3
       Creating file DB0:[MORRIS.REF]FAM1.RNO;1 ...
       Creating file DB0:[MORRIS.REF]FAM2.RNO;1 ...
       Creating file DB0:[MORRIS.REF]FAM3.RNO;1 ...
       Sending output to terminal TT.

       FATHER      : GEORGE
       MOTHER      : LOIS
       NUMBER_KIDS :  3

           KID_NAME    : JEFF
           AGE         : 23

           KID_NAME    : FRED
           AGE         : 26

           KID_NAME    : LAURA
           AGE         : 21

       FATHER      : HAROLD
       MOTHER      : SARAH
       NUMBER_KIDS :  3
           KID_NAME    : CHARLIE
           AGE         : 31

           KID_NAME    : HAROLD
           AGE         : 35

           KID_NAME    : SARAH
           AGE         : 27

       DTR>

       DEC DATATRIEVE sends the output to the terminal and creates the
       three files specified. All three files contain the data displayed
       on the terminal.

61  –  OPEN Command

       Opens an RMS file to serve as a log of your interactive dialogue
       with DEC DATATRIEVE. DEC DATATRIEVE copies your input and the DEC
       DATATRIEVE output including error messages to the file exactly as
       displayed.

       Format

         OPEN  file-spec

61.1  –  Argument

    file-spec

       Is the OpenVMS file specification of the file to be opened. The
       file specification must be in the following format:

       node-spec::device:[directory]file-name.type;version

61.2  –  Example

       This example opens a log file, displays the contents of a
       procedure, invokes the procedure, closes the log file with
       a CTRL/Z exit from DEC DATATRIEVE, and uses the OpenVMS TYPE
       command to display the contents of the log file:

       DTR> OPEN LOG
       DTR> !THIS IS A TEST OF THE OPEN COMMAND.
       DTR> READY YACHTS
       DTR> SHOW SELL_BOAT
       PROCEDURE SELL_BOAT
       FIND YACHTS WITH BUILDER EQ *.BUILDER AND MODEL EQ *.MODEL
       PRINT ALL
       IF *."Y IF BOAT SOLD" EQ "Y" THEN ERASE ALL ELSE
              PRINT "SELL IT NOW!"
       END_PROCEDURE

       DTR> :SELL_BOAT
       Enter BUILDER: ALBIN
       Enter MODEL: VEGA

                                      LENGTH
                                       OVER
       MANUFACTURER   MODEL     RIG    ALL   WEIGHT BEAM  PRICE

        ALBIN       VEGA       SLOOP   27     5,070  08  $18,600

       Enter Y IF BOAT SOLD: N

       SELL IT NOW!
       DTR> <CTRL/Z>
       $ TYPE LOG.LIS
       DTR> !THIS IS A TEST OF THE OPEN COMMAND.
       DTR> READY YACHTS
       DTR> SHOW SELL_BOAT
       PROCEDURE SELL_BOAT
       FIND YACHTS WITH BUILDER EQ *.BUILDER AND MODEL EQ *.MODEL
       PRINT ALL
       IF *."Y IF BOAT SOLD" EQ "Y" THEN ERASE ALL
       PRINT "SELL IT NOW !"
       END_PROCEDURE

       DTR> :SELL_BOAT
       Enter BUILDER: ALBIN
       Enter MODEL: VEGA
                                      LENGTH
                                       OVER
       MANUFACTURER   MODEL     RIG    ALL   WEIGHT BEAM  PRICE

        ALBIN       VEGA       SLOOP   27     5,070  08  $18,600

       Enter Y IF BOAT SOLD: N

       SELL IT NOW!

       $

62  –  PICTURE Clause

       Specifies the format of the field value as it is stored.

       Format

         PIC[TURE]  [IS]  picture-string

62.1  –  Argument

    picture-string

       Is one or more picture-string characters describing the format in
       which the field value is stored.

       Picture-String Characters contains a list of the picture-string
       characters. The picture-string characters you specify for a field
       depend on the class of the field: alphabetic, alphanumeric, or
       numeric.

       Table 1-3 Picture-String Characters

       Field       Picture
       Class       Character Meaning

       Alphabetic  A         Each A represents one alphabetic character
                             in the field. The following field
                             definition specifies an alphabetic field
                             of six characters:

                             06 LETTERS_ONLY PIC A(6).

       AlphanumericX         Each X represents one character in the
                             field. The following field definition
                             specifies that the MODEL field contains
                             10 alphanumeric characters:

                             06 MODEL PIC X(10).

       Numeric     9         Each 9 represents one digit in the field.
                             You can specify from 1 to 31 digits for
                             a numeric field. The following field
                             definition specifies that the BEAM field
                             contains two digits:

                             03 BEAM PIC 99.
                   S         An S indicates that a sign (+ or -) is
                             stored in the field. A picture string can
                             have only one S and it must be the leftmost
                             character. If there is no SIGN clause for
                             the field, the sign shares the rightmost
                             character position with the lowest-valued
                             digit. The picture string S9(4) indicates
                             a signed field, four digits in length; the
                             field value can range from -9999 to +9999.
                   V         A V indicates an implied decimal point.
                             The decimal point does not occupy a
                             character position in the field, although
                             DEC DATATRIEVE uses its location to align
                             data in the field. A picture string can
                             contain only one V. The picture string
                             9(5)V99 specifies a 7-digit field; the last
                             two digits of the field value follow the
                             decimal point.
                   P         Each P specifies a decimal scaling
                             position. Each P represents a "distance"
                             in digits from an implied decimal point.
                             (A P does not count toward the limit of
                             31 digits per field.) A P can appear at
                             the right or left of the picture string.
                             A V is unnecessary for any picture string
                             containing a P.

63  –  PLOT Statement

       Each DEC DATATRIEVE plot statement uses the following general
       syntax.

       Format

         PLOT plotname  [USING] [ALL]
                             [arg [,arg]...] [OF rse]
                              [   { file-spec  } ]
                              [ ON {*.prompt   } ]
                              [   {            } ]

63.1  –  Arguments

    plotname

       Is the name of the plot, for example:

       DTR>  PLOT BAR

       BAR is the name of the plot. Refer to the DEC DATATRIEVE User's
       Guide for plotname descriptions.

    USING

       Is an optional keyword to make the syntax more like English. The
       keyword USING does not affect the plot statement.

    ALL

       Is a keyword that may be optional or required, depending on the
       structure of the plot statement you use. It is optional if you
       use the OF rse clause; it is required if you use the current
       collection without any qualification.

       For example, the following two plot statements are the same:

       DTR>  PLOT BAR BUILDER, PRICE OF YACHTS WITH
       CON>  PRICE NE 0

       DTR>  FIND YACHTS WITH PRICE NE 0
       DTR>  PLOT BAR ALL BUILDER, PRICE

       The first example uses an OF rse clause in which the keyword ALL
       is not required. In the second example, ALL is required because
       it refers to the collection created in the FIND statement.

       In the syntax diagrams of the sections that follow, the keyword
       ALL is shown in brackets as an optional element. Note, however,
       that if you use the keyword ALL to refer to the contents of the
       current collection, ALL is required.

    arg

       Is a field name or other value expression. The argument can also
       contain an optional label string. To specify a label string, put
       a quoted string inside parentheses after the value expression.
       For example:

       DTR>  PLOT X_Y LOA,
       CON>  DISP / 2000 ("Weight in tons") OF YACHTS

    OF rse

       Specifies the record stream to be used in the plot.

       If you do not specify an RSE, the plot statement will use data
       from the current collection.

    ON { file-spec }
       { *.prompt  }

       Specifies a device or file for output. If you do not specify a
       device or file specification, DEC DATATRIEVE displays the plot on
       your terminal screen.

       You can use a complete OpenVMS file specification or simply a
       file name. DEC DATATRIEVE uses .LIS as the default file type. A
       complete file specification has the following format:

       node-spec::device:[directory]file-name.type;version

       You can also use a prompting value expression that prompts you
       for a file or device specification. For example:

       DTR>  PLOT PIE ALL RIG ON DRA0:[IACOBONE]RIGPLOT.LIS
       DTR>  PLOT PIE ALL RIG ON *."File Name or Device Specification"

       You can use the ON clause with any of the plot statements to
       create a file containing the ReGIS[TM] graphics commands.

63.2  –  Examples

       The following example produces a simple bar chart showing the
       salary for each employee in PERSONNEL:

       DTR> FIND PERSONNEL SORTED BY DEPT
       DTR> PLOT BAR ALL LAST_NAME, SALARY
       DTR>

       The following example plots a marsupial:

       DTR> PLOT WOMBAT
       DTR>

64  –  PRINT Statements

       Causes DEC DATATRIEVE to format and write one or more values of
       specified or implied DEC DATATRIEVE value expressions to your
       terminal or workstation, to a file, or to a unit record device.

       Format

         For retrieving from selected records and target record streams
         formed by FOR loops:

                           [    {file-spec  } ]
         PRINT  print-list [ ON {*.prompt   } ]
                           [    {           } ]

         For retrieving from the current collection:

                                  [    {file-spec  } ]
         PRINT  ALL  [print-list] [ ON {*.prompt   } ]
                                  [    {           } ]

         For retrieving from record streams formed by the PRINT
         statement using one RSE:

                                      [    {file-spec  } ]
         PRINT  [print-list  OF]  rse [ ON {*.prompt   } ]
                                      [    {           } ]

         For retrieving from record streams formed by the PRINT
         statement using two RSEs (the inner print list follows another
         print list):

         PRINT  print-list, ALL print-list OF rse-1 [,print-list] OF
                rse-2

         [    {file-spec  } ]
         [ ON {*.prompt   } ]
         [    {           } ]

         For retrieving from record streams formed by the PRINT
         statement using two RSEs (the inner print list precedes any
         other print list):

         PRINT  ALL  ALL  print-list  OF  rse-1  [,print-list]  OF  rse-2

         [    {file-spec  } ]
         [ ON {*.prompt   } ]
         [    {           } ]

64.1  –  Arguments

    print-list

       Is a list of value expressions and formatting specifications.

    ALL

       When used alone following PRINT, ALL causes the records in the
       current collection to be displayed or written to the specified
       file or device.

       When used with a print list, ALL causes the print list to be
       evaluated for each record in the current collection.

       When the print list begins with an inner print list, ALL is
       required to establish the proper context in which to resolve
       references to the items in the hierarchical list.

    rse

       Is a record selection expression that creates the record stream
       DEC DATATRIEVE uses to evaluate the elements of the print list.

    file-spec

       Is the file specification of the file to which you want to write
       the output of the statement.

       A complete file specification has the following format:

       node-spec::device:[directory]file-name.type;version

    *.prompt-name

       Is a prompting value expression that prompts you for a file
       specification to which you want to write the output of the
       statement.

64.2  –  Examples

       The following example retrieves data from selected records and
       prints the data:

       DTR> FIND FIRST 2 YACHTS
       DTR> SELECT; PRINT TYPE, LOA, PRICE

                               LENGTH
                                OVER
       MANUFACTURER   MODEL     ALL    PRICE

        ALBERG      37 MK II    37    $36,951

       The following example shows how to retrieve data from target
       streams formed by FOR loops:

       DTR> FOR FIRST 2 YACHTS
       CON> PRINT TYPE, LOA, PRICE

                               LENGTH
                                OVER
       MANUFACTURER   MODEL     ALL    PRICE

        ALBERG      37 MK II    37    $36,951
        ALBIN       79          26    $17,900

       DTR>

       The following example shows how to retrieve data from
       hierarchical records using nested FOR loops:

       DTR> FOR FIRST 2 FAMILIES
       CON> FOR KIDS
       CON> PRINT MOTHER, FATHER, KID_NAME

                                KID
         MOTHER     FATHER      NAME

       ANN        JIM        URSULA
       ANN        JIM        RALPH
       LOUISE     JIM        ANNE
       LOUISE     JIM        JIM
       LOUISE     JIM        ELLEN
       LOUISE     JIM        DAVID
       LOUISE     JIM        ROBERT

       DTR>

65  –  PRINT Statement (Report Writer)

       Specifies the following characteristics of the detail lines in a
       report:

       o  The content, such as field values, other desired values, and
          text strings

       o  The format of fields, including issues such as the order,
          column position, print attributes, and edit string format of
          print objects

       o  Column headers for print objects

       You can include only one PRINT statement in a report
       specification. If your report specification contains an AT
       statement, then it does not have to contain a PRINT statement.

       Format

         PRINT  print-list-element [, . . . ]

65.1  –  Argument

    print-list-element

       Specifies the values, position, print attributes, and format of
       the print objects in the detail line.

       Report Parameters Controlled by Print List Elements indicates
       the parameters of the report controlled by various print list
       elements.

       Table 1-4 Report Parameters Controlled by Print List Elements

                  Print List
       Parameter  Element          Usage Notes

       Content    Field-name       Can include elementary, group, list,
       of         [modifier]       REDEFINES or COMPUTED BY fields;
       detail                      to print all fields, specify the
       line                        top-level field name.
                  Related value-   Derived from field values using
                  expression       arithmetic operators or RUNNING
                  [modifier]       TOTAL.
                  Other value-     Can include literals, variables, or
                  expression       RUNNING COUNT.
                  [mod{fier]  }
       Format     ATT {RESET  }    Resets the attributes, or uses
       of             {name   }    the named attribute list. (See the

       detail                      DECLARE_ATT statement.)
       line
                  SKIP [n]         Begins printing the next print list
                                   element n lines from the current
                                   line. See also Usage Notes.
                  SPACE [n]        Leaves spaces between the output of
                                   the preceding and following print
                                   list elements. See also Usage Notes.
                  COL n            Specifies where the output of the
                                   next print list element begins. See
                                   also Usage Notes.
                  TAB [n]          Inserts the space of n tab characters
                                   before the output of the next print
                                   list element. See also Usage Notes.

       Beginning  NEW_PAGE         Causes the Report Writer to start a
       of                          new report page. Ignored in DTIF
       new page

       Report Parameters Affected by Print List Modifiers indicates the
       parameters of the report controlled by modifiers of print list
       elements.

       Table 1-5 Report Parameters Affected by Print List Modifiers

                 Print List
       Parameter Modifier           Usage Notes

       Column    ("header-          Specifies one or two line headers
       headers   segment"[          for the preceding field or value
       for       / . . . ])         expression, overriding the field
       print                        name or query header from the record
       items                        definition.
                 (-)                Suppresses the header indicated for
                                    the field in the record definition.

       Format    USING edit-string  Imposes the characteristics of the
       of the                       edit string on the preceding field
       detail                       name or value expression.
       line
       item
                 WIDTH [n]          Specifies the length of the string
                                    field. See also Usage Notes.

65.2  –  Example

       For examples of the PRINT statement in the Report Writer, see the
       DEC DATATRIEVE User's Guide.

66  –  PURGE Command

       Deletes all but the highest version of specified dictionary
       objects.

       Format

                [ path-name  [,...] ]
         PURGE  [ ALL               ]  [KEEP  [=]  n]
                [                   ]

66.1  –  Arguments

    path-name

       Specifies the object you want to purge. The path name must
       include the name of a domain, record, procedure, or table. The
       path name cannot contain a version number or a semicolon. If you
       do not specify a path name, DEC DATATRIEVE purges all objects in
       your default dictionary directory. PURGE accepts both DMU and CDO
       style path names.

    ALL

       Purges all the definitions in the default dictionary directory.
       ALL is the default.

    KEEP [=] n

       Specifies the number of versions of each object you want to keep.
       The number must be greater than zero. The default is KEEP=1.

66.2  –  Examples

       The following example shows how PURGE deletes all but the highest
       versions of objects in a user's DMU format directory:

       DTR> SHOW ALL
       Domains:
         * FAMILIES;3  * FAMILIES;2   * FAMILIES;1   * OWNERS;2
         * OWNERS;1    * PETS;2       * PETS;1       * PROJECTS;3
         * PROJECTS;2  * PROJECTS;1   * YACHTS;5     * YACHTS;4

       Records:
         * FAMILY_REC;2 * FAMILY_REC;1 * OWNER_RECORD;2 * OWNER_RECORD;1
         * PET_REC;1    * PROJECT_REC;1 * YACHT;2       * YACHT;1

       The default directory is CDD$TOP.DTR$USERS.BELL
       No established collections.
       No ready sources.
       No loaded tables.
       DTR> PURGE
       DTR> SHOW DOMAINS, RECORDS
       Domains:
         * FAMILIES;3   * OWNERS;2     * PETS;2      * PROJECTS;3
         * YACHTS;5
       Records:
         * FAMILY_REC;2 * OWNER_RECORD;2 * PET_REC;1 * PROJECT_REC;1
         * YACHT;2

       DTR>

       The following example shows the error message generated if you
       specify a dictionary directory as the final object in the path
       name. It then shows how PURGE works with the path name and KEEP
       arguments.

       DTR> SHOW DICTIONARY
       The default directory is CDD$TOP.DTR$USERS.BELL

       DTR> PURGE CDD$TOP.DTR$USERS.BELL
       Element "CDD$TOP.DTR$USERS.BELL" is not a Domain, Record, Procedure,
        or Table.
       No objects purged for dictionary element "CDD$TOP.DTR$USERS.BELL".

       DTR> SHOW RECORDS

       Records:
         * FAMILY_REC;4   * FAMILY_REC;3   * FAMILY_REC;2 * FAMILY_REC;1
         * OWNER_RECORD;2 * OWNER_RECORD;1 * PET_REC;1    * PROJECT_REC;1
         * YACHT;2        * YACHT;1

       DTR> PURGE CDD$TOP.DTR$USERS.BELL.FAMILY_REC KEEP=2
       DTR> SHOW RECORDS
       Records:
         * FAMILY_REC;4 * FAMILY_REC;3  * OWNER_RECORD;2 * OWNER_RECORD;1
         * PET_REC;1    * PROJECT_REC;1 * YACHT;2        * YACHT;1

       DTR>

67  –  QUERY HEADER Clause

       Specifies the column header DEC DATATRIEVE uses when it formats
       the display of a field value for the PRINT statement or for the
       Report Writer AT and PRINT statements. If you omit this clause,
       DEC DATATRIEVE uses the field name as the default column header
       when printing this field.

       Format

         QUERY_HEADER  [IS]  {"header-segment"}  [/...]

67.1  –  Argument

    "header-segment"

       Is the column header displayed above a column of data. If you
       specify only one character string literal, that string is printed
       on one line above the column. You can specify more than one
       character string literal by separating each from the next with
       a slash (/).  The literals are printed on successive lines,
       centered above the column.

67.2  –  Examples

       The following example shows how to set up a record so that when
       the DISPLACEMENT field is displayed, a column header of WEIGHT is
       used:

       06 DISPLACEMENT PIC 99999
                   QUERY_HEADER IS "WEIGHT"
                   EDIT_STRING IS ZZ,ZZ9
                   QUERY_NAME IS DISP.

       DEC DATATRIEVE prints the column header as follows:

       WEIGHT

       The following example shows how to set up a record so that when
       the LENGTH_OVER_ALL field is printed, a column header of LENGTH
       (IN FEET) is printed on two separate lines:

       06 LENGTH_OVER_ALL PIC XXX
          QUERY_HEADER IS "LENGTH" /"(IN FEET)".

       DEC DATATRIEVE prints the column header as follows:

       LENGTH (IN FEET)

       The following example shows how to set up a record so that when
       the LENGTH_OVER_ALL field is printed, a column header of Length
       Over All ("LOA") is printed on two separate lines:

       06 LENGTH_OVER_ALL PIC XXX
          QUERY_HEADER IS "Length Over All"/"(""LOA"")".

       DEC DATATRIEVE prints the column header as follows:

       Length Over All
          ("LOA")

       The following example shows how to set up a record so that when
       the LENGTH_OVER_ALL field is printed, a 3-line column header is
       printed with one letter per line:

       06 LENGTH_OVER_ALL PIC XXX
          QUERY_HEADER IS "L"/"O"/"A".

       DEC DATATRIEVE prints the column header as follows:

       L
       O
       A

68  –  QUERY NAME Clause

       Specifies an alternate name for the field name.

       Format

         QUERY_NAME  [IS]  query-name

68.1  –  Argument

    query-name

       Is the query name. The rules for forming and using a query name
       are the same as those for a field name.

68.2  –  Examples

       The following example shows how to set up a record so that DISP
       is defined as an alternate name for the DISPLACEMENT field:

       06 DISPLACEMENT PIC 99999
          QUERY_NAME IS DISP.

       The following example shows how to set up a record so that
       SPECS is defined as an alternate name for the group field
       SPECIFICATIONS:

       03 SPECIFICATIONS
          QUERY_NAME SPECS.

       The following example shows how to set up a record so that
       a query name of SPECIAL_HANDLING is defined for the field
       DELINQUENT_ACCOUNT_STATUS:

       09 DELINQUENT_ACCOUNT_STATUS
          PIC X
          QUERY_NAME IS SPECIAL_HANDLING.

69  –  READY Command

       Gives you access to one or more domains, relations, databases,
       or record types and controls the access of other users to those
       domains or databases. You can also use the READY command to ready
       a domain or database again in order to change your access mode or
       access option.

       Format 1

         READY  domain-path-name [AT node-spec] [AS alias-1]

         [ PROTECTED ] [ READ   ]
         [           ] [ WRITE  ] [ CONSISTENCY  ]
         [ SHARED    ] [ MODIFY ] [ CONCURRENCY  ][,...]
         [ EXCLUSIVE ] [        ] [              ]
                       [ EXTEND ]

         [SNAPSHOT]

       Format 2

         READY  database-path-name

          [SNAPSHOT]
          [PROTECTED  ] [ READ   ]
          [           ] [ WRITE  ] [ CONSISTENCY ]
          [SHARED     ] [ MODIFY ] [ CONCURRENCY ]
          [EXCLUSIVE  ] [        ] [             ]
                        [ EXTEND ]

          [      { rdb-relation-name  }                     ]
          [USING { dbms-record-name   } [ AS alias ]        ]
          [      {                    }                     ]
          [       [SNAPSHOT]                                ]
          [                                                 ][,...]
          [       [ PROTECTED  ] [READ    ]                 ]
          [       [            ] [WRITE   ] [CONSISTENCY  ] ]
          [       [ SHARED     ] [MODIFY  ] [CONCURRENCY  ] ]
          [       [ EXCLUSIVE  ] [        ] [             ] ]
          [                      [EXTEND  ]                 ]

69.1  –  Arguments

    domain-path-name

       Is the dictionary path name of a domain to which you want access
       or the domain table whose access option you want to change.

    node-spec

       Is the name of a node and an optional access control string.

       A node name is a 1- to 6-character name that identifies the
       location on the network. Examples are BIGSYS and LILSYS.

       An access control string indicates a particular account on the
       remote node. It consists of a user name, followed by one or more
       blanks or tabs, a password, and an optional account name.

       The following three node specifications are valid:

       BIGSYS
       BIGSYS"MORRISON RYLE"
       BIGSYS"MORRISON RYLE KANT"

       On DECnet links to some non-OpenVMS systems, you can use the UIC
       number in place of the user name. For example:

       BIGSYS"[240,240] RYLE"
       BIGSYS"[240,240] RYLE KANT"

       In the examples, the remote node is BIGSYS the user name is
       MORRISON, the UIC is [240,240], the password is RYLE, and the
       account name is KANT.

       You can also use a prompting value expression to prompt the user
       for the user name, password, account name, or UIC. Use single
       quotation marks for the prompt string. For example:

       DTR> READY CDD$TOP.DTR32.MORRISON.YACHTS AT
       CON>     BIGSYS"*.'username' *.'password'"
       Enter username: MORRISON
       Enter password:
       DTR>

    alias

       Is a name you use if you include the AS clause in the READY
       command to refer to the domain, relation, or Oracle CODASYL DBMS
       record specified. You use the alias in place of the given name
       of the domain, relation, or Oracle CODASYL DBMS record where the
       syntax of a statement calls for that domain, relation, or Oracle
       CODASYL DBMS record name. If you are using an alias for a domain
       name, do not use the alias in full or relative dictionary path
       names.

    database-path-name

       Is the Oracle CDD/Repository path name defined for the DEC
       DATATRIEVE definition of the Oracle CODASYL DBMS, Oracle Rdb,
       VAX Rdb/ELN, or DEC DB Integrator Gateway database, or for the
       relational database definition created by Oracle Rdb. It can also
       be a CDD$DATABASE object. If you ready a Oracle CODASYL DBMS or
       relational database without specifying any relation or record
       names, DEC DATATRIEVE readies all relations or records in the
       database. READY accepts both DMU and CDO style path names.

    relation-name

       Is the name assigned to the relation when the relational
       database was created. The relation name can be the name of a
       view relation.

    record-name

       Is the name assigned to the Oracle CODASYL DBMS record when the
       database was created.

    SNAPSHOT

       Are the options you can select to control the access of other
       users to a domain, relation, or Oracle CODASYL DBMS record you
       ready. The specific constraints are explained in Access Options:

       Table 1-6 Access Options

       Option     Access Constraints

       SNAPSHOT   SNAPSHOT is a READ access for databases that takes a
                  "picture" of the database when it is readied. In order
                  to have SNAPSHOT access, all relations or records
                  pertaining to the database must be readied with
                  SNAPSHOT access. Any other user can access the same
                  database with any access mode and option. In general,
                  you do not see other users' changes until the end
                  of the transaction. If you use SNAPSHOT with another
                  option, such as CONCURRENCY, you may see other users'
                  changes, depending on the database system. SNAPSHOT is
                  the default for relational databases, relations, and
                  domains based on relational sources.
       PROTECTED  Any other user can have only READ access to records in
                  the domain or relation. No other user can have WRITE,
                  MODIFY, or EXTEND access to the records in the domain
                  or relation. This option is the default for domains
                  containing records from RMS files and for all view
                  domains.
       SHARED     Any other user can have access to the domain,
                  database, relation, or Oracle CODASYL DBMS record
                  at the same time, in any access mode. This option
                  is the default for Oracle CODASYL DBMS domains,
                  Oracle CODASYL DBMS databases, and Oracle CODASYL
                  DBMS records.
       EXCLUSIVE  No other user can have access to the domain, database,
                  relation, or Oracle CODASYL DBMS record at the same
                  time, in any access mode. If the domain is based on
                  a RMS file, the file containing the data is locked by
                  RMS.

    READ

       Are the options you can select to request a mode of access to a
       domain, database, relation, or Oracle CODASYL DBMS record. When
       using Format 1, whether you get that mode of access is determined
       by privileges assigned to you in the access control list of the
       domain. When using Format 2, whether you get that mode of access
       is determined by privileges assigned to you in the access control
       list of the database definition.

       When you are using either Format 1 or Format 2 and you are
       accessing a Oracle CODASYL DBMS or relational database, you must
       also have appropriate privileges in the Oracle CODASYL DBMS,
       Oracle Rdb or VAX Rdb/ELN access control lists to request the
       access mode you select. For Oracle CODASYL DBMS, you need access
       to the schema, subschema, record and DEC DATATRIEVE database
       definitions in the data dictionary.

    CONSISTENCY

       Are the options you can select to determine whether you can
       see changes made by other users to the data you are accessing.
       CONSISTENCY guarantees that while you are accessing data, you do
       not see updates made by other users.

       CONCURRENCY allows you to see other users' updates to the data
       you are accessing.

       CONSISTENCY is the DEC DATATRIEVE default for the first ready of
       a relational source.

       Once you specify CONSISTENCY or CONCURRENCY, that option becomes
       the default until you change the option in a subsequent ready or
       you finish the database.

       Multi-User Access to Domains Based on RMS Files summarizes the
       effects of various combinations of access options and access
       modes for domains based on RMS files.

       Table 1-7 Multi-User Access to Domains Based on RMS Files

                     Another User  Your
                     Can Then      Effect
       You Ready a   Ready the     on Other
       Domain        Domain        Users      Other Users'Effect on You

       EXCLUSIVE     No access.    No one     No effect.
       READ                        else can
       EXCLUSIVE                   read the
       WRITE                       file.
       PROTECTED     PROTECTED     No one     No effect.
       READ          READ          else can
                     SHARED READ   write
                                   to the
                                   file.
       PROTECTED     SHARED READ   No one     No effect.
       WRITE                       else can
                                   write
                                   to the
                                   file.
       SHARED READ   PROTECTED     No one     Users with WRITE access
                     READ          with       may change records you are
                     PROTECTED     WRITE      reading or have read.
                     WRITE         access
                     SHARED READ   can
                     SHARED WRITE  select
                                   your
                                   selected
                                   record.
       SHARED WRITE  SHARED READ   No one     You cannot write to the
                     SHARED WRITE  else can   selected record of any
                                   modify     other user. You cannot
                                   your       write to the target record
                                   selected   of a MODIFY or ERASE
                                   record     statement entered by
                                   or the     a SHARED WRITE user. A
                                   target     SHARED WRITE user can also
                                   record     write to a record you have
                                   of your    just modified.
                                   MODIFY
                                   or ERASE
                                   state-
                                   ment.
                                   You can
                                   modify a
                                   record
                                   another
                                   user
                                   has just
                                   modi-
                                   fied.

       When two applications try to access the same domain based on a
       RMS file, RMS may lock a record that DEC DATATRIEVE needs to
       access. DEC DATATRIEVE then tries for 12 seconds to access the
       record. At the end of this period, DEC DATATRIEVE takes one of
       two actions, depending on whether SET LOCK_WAIT is in effect.

       o  If SET NO LOCK_WAIT is in effect, you receive an RMS$_RLK
          message: "Target record currently locked by another stream."
          Then DEC DATATRIEVE aborts the statement. SET NO LOCK_WAIT is
          the default.

       o  If SET LOCK_WAIT is in effect, DEC DATATRIEVE turns control
          over to RMS to wait for the record. You cannot use CTRL/C
          to cancel the wait. RMS waits until the record is released,
          or, in case of deadlock, you receive the RMS deadlock error
          message.

       The LOCK_WAIT setting applies to all sources, including Oracle
       CODASYL DBMS and relational databases which are readied after the
       SET LOCK_WAIT command is issued. NO LOCK_WAIT was selected as the
       default for DATATRIEVE because it is the RMS default. However,
       NO LOCK_WAIT is not always the recommended mode for relational
       access. LOCK_WAIT is required for DEC DB Integrator Gateway.

       Multi-User Access to Oracle CODASYL DBMS, Oracle Rdb, and VAX
       Rdb/ELN Sources summarizes the effects of various combinations of
       access options and access modes for Oracle CODASYL DBMS domains
       and Oracle Rdb or VAX Rdb/ELN domains and relations.

       Table 1-8 Multi-User Access to Oracle CODASYL DBMS, Oracle Rdb,
                 and VAX Rdb/ELN Sources

                     Another
       You Ready     User Can
       a Domain,     Then Ready
       Database,     the Domain,
       Relation,     Database,     Your
       Oracle        Oracle        Effect
       CODASYL       CODASYL       on Other
       DBMS Record   DBMS Record   Users      Other Users' Effect on You

       EXCLUSIVE     No access.    No one     No effect.
       READ                        else can
       EXCLUSIVE                   read the
       WRITE                       realm
                                   or rela-
                                   tion.
       PROTECTED     PROTECTED     No one     No effect.
       READ          READ          else can
                     SHARED READ   write
                                   to the
                                   realm
                                   or rela-
                                   tion.
       PROTECTED     SHARED READ   No one     You may encounter read
       WRITE                       else can   locks other users have put
                                   write      on a record when you try
                                   to the     to modify it.
                                   realm
                                   or re-
                                   lation.
                                   Other
                                   users
                                   may en-
                                   counter
                                   write
                                   locks
                                   during
                                   your
                                   transac-
                                   tion.
       SHARED READ   PROTECTED     A SHARED   You may encounter write
                     READ          WRITE      locks during another
                     PROTECTED     user       user's transaction.
                     WRITE         may have
                     SHARED READ   to wait
                     SHARED WRITE  until
                                   you
                                   release
                                   your
                                   read
                                   locks.
       SNAPSHOT for  With any      No         You do not see changes
       Oracle Rdb    access and    effect     other users make to the
       or VAX Rdb    mode.         on         database until a COMMIT or
       /ELN domains                users.     ROLLBACK is performed.
       and Oracle
       CODASYL DBMS
       records
       SHARED WRITE  SHARED READ   Other      You may encounter read and
                     SHARED WRITE  users      write locks during another
                                   may en-    user's transaction.
                                   counter
                                   read and
                                   write
                                   locks
                                   during
                                   your
                                   transac-
                                   tion.

69.2  –  Examples

       The following example readies the domain YACHTS for WRITE access:

       DTR> READY YACHTS WRITE

       The following example readies the domain PHONES for EXTEND
       access:

       DTR> READY PHONES (*) EXTEND
       Enter password for PHONES:

       DTR>

       The following example defines a domain with the prompt built
       into the domain definition. DEC DATATRIEVE does not display the
       password:

       DTR> DEFINE DOMAIN PROMPT_YACHTS USING YACHT(*) ON YACHT;
       DTR> READY PROMPT_YACHTS AS PYTS
       Enter password for YACHT:

       DTR>

       The following example readies the relations EMPLOYEES and SALARY_
       HISTORY in the Oracle Rdb database PERSONNEL for SNAPSHOT access:

       DTR> READY PERSONNEL USING EMPLOYEES, SALARY_HISTORY
       DTR>

       The following example readies the SALARY_HISTORY relation in the
       Oracle Rdb database PERSONNEL for SHARED WRITE access with the
       CONCURRENCY option:

       DTR> READY PERSONNEL SHARED WRITE USING SALARY_HISTORY CONCURRENCY

       The following example readies the Oracle CODASYL DBMS domain
       VENDORS for the default access mode SHARED READ:

       DTR> READY VENDORS
       DTR>

70  –  RECONNECT Statement

       Removes a record from the set occurrence in which it participates
       and connects it to the set occurrence specified by the TO list.
       Before the RECONNECT is performed, DEC DATATRIEVE sets up a
       currency indicator for each set specified in the TO list.

       Format

         RECONNECT  context-name-1

         [TO]  [context-name-2. ]  set-name-1  [,...]

70.1  –  Arguments

    context-name-1

       Is the name of a valid context variable or the name of a
       collection with a selected record. The target record must be a
       member of the sets specified by the TO list.

    context-name-2

       Is the name of a valid context variable or the name of a
       collection with a selected record. It must identify a record that
       participates in the specified set. If the SYSTEM owns the set,
       you do not need to establish a context for the set. If the set is
       not owned by the SYSTEM and the context name is not present, DEC
       DATATRIEVE uses the most recent single record context of a domain
       with a record type that participates in the specified set type.

    set-name

       Is the name of a set type.

70.2  –  Example

       The following example uses nested FOR loops to create the
       necessary contexts. The procedure uses prompting value
       expressions to get information from the user.

       DTR> DEFINE PROCEDURE NEW_MANAGER
       DFN> FOR G IN GROUPS WITH GROUP_NAME = *."the name of the group"
       DFN> FOR E IN EMPLOYEES WITH EMP_ID =
       DFN> *."the id of the new manager"
       DFN> RECONNECT G TO E.MANAGES
       DFN> END_PROCEDURE
       DTR>

71  –  REDEFINE Command

       Creates a new version of an object.

       Format

                   { DATABASE  }
                   { DOMAIN    }
                   { PORT      }
         REDEFINE  {           } definition
                   { PROCEDURE }
                   { RECORD    }
                   { TABLE     }
                   {           }

71.1  –  Argument

    definition

       Is the path name of the definition and any other keywords, path
       names, or arguments that an object takes. (For an explanation of
       these arguments, see the DEFINE command for each object.)

71.2  –  Examples

       The following example redefines the domain YACHTS using the
       record definition YACHT and storing the data in the file
       DB2:[SMYTHE]YACHT.DAT:

       DTR> SHOW DOMAINS
       Domains:
            * YACHTS;1

       DTR> REDEFINE DOMAIN YACHTS
       DFN> USING YACHT ON DB2:[SMYTHE]YACHT.DAT;

       DTR> SHOW DOMAINS
       Domains:
            * YACHTS;2     * YACHTS;1

72  –  REDEFINES Clause

       Provides an alternate way to define a field.

       Format

         level-no  field-name-1  REDEFINES  field-name-2

72.1  –  Arguments

    level-no

       Is the level number of field-name-1. Although not a part of the
       REDEFINES clause, the level number is shown in the format to
       clarify its position relative to the clause.

    field-name-1

       Is the name of the REDEFINES field. You use this name when you
       want to refer to this field. Although not a part of the REDEFINES
       clause, the field name is shown in the format to clarify its
       function and its position relative to the clause.

    field-name-2

       Is the name of the field being redefined.

72.2  –  Example

       The following record definition shows a redefinition of the field
       PART_NUMBER. PART_NUMBER is a numeric field containing 10 digits.
       Two group fields redefine PART_NUMBER: PART_NUMBERS_PARTS and
       PART_NUMBER_GROUPS. Each redefinition specifies a group field
       containing a total of 10 digits (the total number of digits in
       all subordinate fields):

       05 PART_NUMBER PIC 9(10)
       05 PART_NUMBER_PARTS REDEFINES PART_NUMBER.
          07 PRODUCT_GROUP PIC 99.
          07 PRODUCT_YEAR PIC 99.
          07 ASSEMBLY_CODE PIC 9.
          07 SUB_ASSEMBLY PIC 99.
          07 PART_DETAIL PIC 999.
       05 PART_NUMBER_GROUPS REDEFINES PART_NUMBER.
          07 PRODUCT_GROUP_ID PIC 9(4).
          07 PART_DETAIL_ID PIC 9(6).

       In this example, the field PRODUCT_GROUP refers to the lowest-
       valued digits of PART_NUMBER; PRODUCT_YEAR refers to the next two
       lowest-valued digits, and so on.

73  –  REDUCE Statement

       Retains only the unique field values or combinations of field
       values in a DEC DATATRIEVE collection, dropping all other values,
       depending on the reduce key or keys specified.

       Format

         REDUCE  [collection-name]  TO  reduce-key-1  [,...]

73.1  –  Arguments

    collection-name

       Is the name of a collection from which you want to retrieve
       unique occurrences of values.

    reduce-key

       Is a field whose values form the basis for the reduction. You
       can also use a value expression as a reduce key, if the value
       expression refers to at least one field of the records forming
       the collection.

       Use a comma to separate multiple reduce keys.

73.2  –  Examples

       The following example searches through the YACHTS domain and, for
       each type of RIG, lists the prices of all boats that cost over
       $35,000:

       DTR> DEFINE PROCEDURE RIG_QUERY
       DFN> FIND YACHTS
       DFN> REDUCE CURRENT TO RIG
       DFN> PRINT SKIP, RIG, ALL PRICE OF YACHTS WITH
       DFN>      PRICE GT 35000 AND RIG = Y.RIG OF Y IN CURRENT
       DFN> END_PROCEDURE
       DTR> :RIG_QUERY

        RIG    PRICE

       KETCH  $36,951
              $51,228
              $41,350
              $39,500
              $36,950
              $54,970
              $50,000
              $80,500

       MS     $35,900

       SLOOP  $37,850
              $39,215
              $37,850
              $48,490

       DTR>

       Note the format of this PRINT statement:

       PRINT print-list, ALL print-list OF rse-1 OF rse-2

       RSE-1 is: ALL PRICE OF YACHTS WITH PRICE GT 35000 AND RIG = Y.RIG
       RSE-2 is: Y IN CURRENT

       RSE-2 controls the printing of the first print list (SKIP, RIG)
       and RSE-1 controls the printing of the second print-list (PRICE).

       You can use the REDUCED TO statement to match values of a date
       field for the month and year.

       The following example uses the domain PAYABLES described in
       the DEC DATATRIEVE User's Guide. Records in PAYABLES have the
       same TYPE field as in YACHTS, a date field (INVOICE_DUE), and a
       field for wholesale price (WHSLE_PRICE). The example shows how to
       display the records in PAYABLES where INVOICE_DUE is later than
       January 1, 1983. The records are separated according to the month
       they are due. The REDUCED TO statement is used to identify the
       unique values of month and year for PAYABLES. Then the records
       are searched for matches to these values.

       DTR> SHOW MONTHLY_RPT
       PROCEDURE MONTHLY_RPT
       READY PAYABLES
       FIND PAYABLES WITH INVOICE_DUE AFTER "JAN 1, 1983"
       REDUCE CURRENT TO FORMAT INVOICE_DUE USING YYNN
       FOR A IN CURRENT
          BEGIN
            PRINT SKIP, "Invoices Due for the Month of"|||
              FORMAT A.INVOICE_DUE USING M(9), SKIP
            FOR PAYABLES WITH FORMAT INVOICE_DUE USING YYNN =
              FORMAT A.INVOICE_DUE USING YYNN SORTED BY INVOICE_DUE
            PRINT INVOICE_DUE, TYPE, WHSLE_PRICE
          END
       END_PROCEDURE

       DTR> :MONTHLY_RPT

       Invoices Due for the Month of January

       INVOICE                         WHSLE
         DUE      VENDOR   ITEM_TYPE   PRICE

        1/02/83 ALBERG     37 MK II   $28,500
        1/25/83 SALT       19          $4,850
        1/31/83 AMERICAN   26-MS      $15,150

       Invoices Due for the Month of February

        2/12/83 WINDPOWER  IMPULSE     $1,500
          .        .        .            .
          .        .        .            .
          .        .        .            .

       Invoices Due for the Month of April

        4/01/83 BAYFIELD   30/32      $13,000
        4/01/83 IRWIN      37 MARK II $29,999
        4/15/83 ALBIN      VEGA       $14,250

       DTR>

74  –  RELEASE Command

       Ends your control over one or more collections, forms, tables, or
       global variables and frees the workspace occupied by them.

       Format

                  [ ALL             ]
                  [ collection-name ]
         RELEASE  [ form-name       ]  [,...]
                  [ table-name      ]
                  [                 ]
                  [ variable-name   ]

74.1  –  Arguments

    ALL

       Causes DEC DATATRIEVE to release all collections, tables, or
       variables.

    form-name

       Is the name of a form, a collection, a dictionary or domain
       table, or a variable you want to release. If you specify more
       than one item, use a comma to separate each from the next.

74.2  –  Examples

       The following example releases first one of two named
       collections, then the other:

       DTR> SHOW COLLECTIONS
       Collections:
              BIG-ONES         (CURRENT)
              A

       DTR> RELEASE BIG-ONES
       DTR> SHOW COLLECTIONS
       Collections:
              A                (CURRENT)

       DTR> RELEASE A
       DTR> SHOW COLLECTIONS
       No established collections.
       DTR>

       The following example releases the dictionary table DEPT-TABLE
       and the global variables X and Y:

       DTR> SHOW READY
       No ready sources.

       Loaded tables:
          DEPT_TBL:  Dictionary table
                  <CDD$TOP.WORK.DEPT_TBL>

       DTR> SHOW VARIABLES
       Global variables
          X                    <Character string>
          Declared as: X REAL MISSING VALUE IS 36.

          Y                    <Character string>
          Declared as: Y PIC X(9).

       DTR> RELEASE DEPT_TBL, X, Y

       DTR> SHOW READY; SHOW VARIABLES
       No ready sources.
       No loaded tables.
       No global variables are declared.
       DTR>

       The following example uses the RELEASE ALL command to release the
       collections LITTLE_ONES and B, and also the global variables T
       and TERRY:

       DTR> SHOW COLLECTIONS
       Collections:
              B                (CURRENT)
              LITTLEONES

       DTR> SHOW VARIABLES
       Global variables
          T                    <Date>
          Declared as: T DATE.

          TERRY                <Character string>
          Declared as: TERRY PIC X(9).

       DTR> RELEASE ALL
       DTR> SHOW COLLECTIONS
       No established collections.

       DTR> SHOW VARIABLES
       No global variables are declared.

       DTR>

75  –  RELEASE SYNONYM Command

       Releases the definition of a synonym for a DEC DATATRIEVE
       keyword.

       Format

         RELEASE  SYNONYM  synonym-name-1  [,...]

75.1  –  Argument

    synonym-name

       Is a synonym already defined for a DEC DATATRIEVE keyword.

75.2  –  Example

       The following example defines synonyms for PRINT and READY and
       then releases the synonym definitions:

       DTR> DECLARE SYNONYM P FOR PRINT, R FOR READY
       DTR> R OWNERS; P FIRST 1 OWNERS

                        BOAT
          NAME          NAME         BUILDER     MODEL

       SHERM      MILLENNIUM FALCON ALBERG     35

       DTR> RELEASE SYNONYM R, P
       DTR> R YACHTS
       R YACHTS

       Expected statement, encountered "R".
       DTR> P OWNERS
       P OWNERS

       Expected statement, encountered "P".
       DTR>

76  –  REPEAT Statement

       Causes DEC DATATRIEVE to execute a simple or compound DEC
       DATATRIEVE statement a specified number of times.

       Format

         REPEAT  value-expression  statement

76.1  –  Arguments

    value-expression

       Is a value expression indicating the number of times to execute
       the statement. This argument must evaluate to a positive integer
       less than or equal to 2,147,483,647.

    statement

       Is any simple or compound DEC DATATRIEVE statement (except a
       FIND, SELECT, DROP, or SORT statement).

76.2  –  Examples

       The following example prints TEST REPEAT three times:

       DTR> REPEAT 3 PRINT "TEST REPEAT"
       TEST REPEAT
       TEST REPEAT
       TEST REPEAT

       DTR>

       The following example aborts a REPEAT statement by responding to
       a prompt with a CTRL/Z:

       DTR> READY YACHTS WRITE
       DTR> REPEAT 5 STORE YACHTS
       Enter MANUFACTURER: HOBIE
       Enter MODEL: CAT
       Enter RIG: SLOOP
       Enter LENGTH-OVER-ALL: 22
       Enter DISPLACEMENT:  4000
       Enter BEAM: 8
       Enter PRICE: 6500
       Enter MANUFACTURER: <CTRL/Z>
       Execution terminated by operator
       DTR> FIND YACHTS WITH BUILDER = "HOBIE"
       [1 record found]
       DTR>

       The following example shows the effect of nesting REPEAT
       statements in procedures. The procedure NUM1 contains two PRINT
       statements. The procedure NUM2 contains two REPEAT statements,
       one nested in the other. The inner REPEAT statement causes
       DEC DATATRIEVE to execute the first PRINT statement in NUM1
       twice each time DEC DATATRIEVE loops through the outer REPEAT
       statement:

       DTR> SET NO PROMPT
       DTR> SHOW NUM1
       PRINT SKIP, "ONE, TWO, THREE"
       PRINT "ONE, TWO, THREE, FOUR, FIVE"

       DTR> :NUM1

       ONE, TWO, THREE

       ONE, TWO, THREE, FOUR, FIVE

       DTR> SHOW NUM2
       REPEAT 2
            BEGIN
               REPEAT 2 :NUM1
            END
       :NUM1

       DTR> :NUM2

       ONE, TWO, THREE

       ONE, TWO, THREE
       ONE, TWO, THREE, FOUR, FIVE

       ONE, TWO, THREE

       ONE, TWO, THREE
       ONE, TWO, THREE, FOUR, FIVE

       ONE, TWO, THREE
       ONE, TWO, THREE, FOUR, FIVE

       DTR>

77  –  REPORT Statement (Report Writer)

       Invokes the Report Writer and is the first entry in a report
       specification. In the REPORT statement you can specify the
       following:

       o  The data you want to report

       o  The output device for the report

       o  The output format for the report

       The other statements in the report specification are AT BOTTOM,
       AT TOP, DECLARE_ATT, END_REPORT, PRINT, and SET. These statements
       are discussed in separate sections of this chapter.

       Format

                       [    {file-spec  } ]
         REPORT  [rse] [ ON {*.prompt   } ] [FORMAT format-spec]
                       [    {           } ]

77.1  –  Arguments

    rse

       Specifies the data for your report. To create a record stream for
       your report, enter the appropriate RSE in the REPORT statement.
       You can make reports using data from:

       o  Readied domains

       o  Collections

       o  Lists

       When you omit the RSE, the Report Writer uses the data in
       your current collection for the report. If there is no current
       collection, DEC DATATRIEVE displays the following error message:

       A current collection has not been established.

    file-spec

       Is the file to which you want to write the report. A complete
       file specification has the following format:

       node-spec::device:[directory]file-name.type;version

    format_spec

       Is the format in which you want the report presented. The
       following formats are supported:

       FormatExplanation                       Output type

       DDIF  The CDA format for page-based     page
             documents. DDIF allows files
             produced by the Report Writer
             to be processed directly,
             for example, by DECwrite,
             DECpresent, or conversion to
             other formats.
       PS    PostScript[R], produced by        page
             conversion from DDIF to obtain
             high quality printout.
       null  The default ASCII format          page
             produced by the Report Writer.
             Format encoded as ASCII
             characters.
       TEXT  Format encoded as ASCII           page
             characters, with ANSI escape
             sequences that produce certain
             attributes on terminals and
             printers.
       DTIF  The CDA format for tables. DTIF   table
             allows files produced by the
             Report Writer to be processed
             directly, for example, by
             DECdecision, DECchart, or
             conversion to other formats.

    *.prompt

       Is a prompting value expression that allows you to specify a
       file specification when DEC DATATRIEVE processes the report
       specification.

77.2  –  Example

       For examples of the PRINT statement in the Report Writer, see the
       DEC DATATRIEVE User's Guide.

78  –  Restructure Statement

       Transfers data from the fields of records in a record stream to
       fields with the corresponding names in a domain.

       Format

         domain-name  =  rse

78.1  –  Arguments

    domain-name

       Is the given name or alias of a domain readied for EXTEND
       or WRITE access. That domain receives data from the records
       identified by the RSE.

    rse

       Is an RSE that identifies records containing one or more fields
       corresponding to fields of the same name in the domain that
       receives the data.

78.2  –  Examples

       The following example defines a new domain using FAMILY_REC
       and stores only those records of families that have no children
       younger than 15:

       DTR> DEFINE DOMAIN NEWFAMS USING FAMILY_REC ON FAMS;
       DTR> DEFINE FILE FOR NEWFAMS MAX, KEY = MOTHER (DUP)
       DTR> NEWFAMS = FAMILIES WITH NOT ANY KIDS WITH AGE LE 15
       DTR> FIND NEWFAMS
       [8 records found]
       DTR> FIND FAMILIES
       [16 records found]
       DTR>

       The following example defines a new domain called YACHTS_PRICE_
       LIST, which contains only the fields TYPE and PRICE from the old
       YACHT record definition. The number of records transferred is
       checked with the FIND statement and the accuracy of the transfer
       is checked with the CROSS statement. The example displays some
       of the records from the new domain to check the presence of the
       MISSING VALUE edit string.

       DTR> DEFINE DOMAIN YACHTS_PRICE_LIST USING YPL_REC ON YPL.DAT;
       DTR> DEFINE RECORD YPL_REC USING
       DFN> 01 BOAT.
       DFN>    03 TYPE.
       DFN>       05 BUILDER PIC X(10).
       DFN>       05 MODEL PIC X(8).
       DFN>    03 PRICE PIC 9(5) MISSING VALUE IS 0
       DFN>       EDIT_STRING $$$,$$$?"NOT LISTED".
       DFN> ;
       [Record is 23 bytes long.]
       DTR> DEFINE FILE FOR YACHTS_PRICE_LIST KEY = TYPE
       DTR> READY YACHTS_PRICE_LIST AS YPL WRITE
       DTR> READY YACHTS
       DTR> SHOW READY
       Ready domains:
          YACHTS:  Domain, RMS indexed, protected read
                  <CDD$TOP.DTR32.WAJ.YACHTS;1>
          YPL:  Domain, RMS indexed, protected write
                  <CDD$TOP.DTR32.WAJ.YACHTS_PRICE_LIST;1>
       No loaded tables.

       DTR> YPL = YACHTS WITH LOA GT 35
       DTR> FIND YACHTS WITH LOA GT 35
       [23 records found]
       DTR> FIND YPL
       [23 records found]
       DTR> FIND A IN YPL CROSS B IN YACHTS OVER
       [Looking for field name]
       CON> TYPE WITH A.PRICE NE B.PRICE
       [0 records found]
       DTR> FIND YPL WITH PRICE MISSING
       [12 records found]
       DTR> PRINT FIRST 3 CURRENT

        BUILDER    MODEL     PRICE

       BLOCK I.   40       NOT LISTED
       CABOT      36       NOT LISTED
       DOWN EAST  38       NOT LISTED

       DTR>

       The following example uses the Restructure statement to transfer
       data from an indexed file to a sequential file:

       DTR> SET NO PROMPT
       DTR> READY YACHTS AS OLD
       DTR> DEFINE FILE FOR YACHTS
       DTR> READY YACHTS AS NEW WRITE
       DTR> NEW = OLD
       DTR> FIND NEW
       [113 records found]
       DTR>

       If the field has a DEFAULT VALUE clause, DEC DATATRIEVE
       initializes the field with the default value. If the field has a
       MISSING VALUE clause and no DEFAULT VALUE clause, DEC DATATRIEVE
       initializes the field with the missing value. If the field has
       neither a DEFAULT VALUE clause nor a MISSING VALUE clause, DEC
       DATATRIEVE initializes a numeric field as 0 and an alphabetic or
       alphanumeric field as spaces.

79  –  ROLLBACK Statement

       Undoes all the changes you made to the database since the last
       COMMIT or ROLLBACK statement, or since your first READY if you
       have not done a ROLLBACK or a COMMIT. The ROLLBACK statement
       performs a Oracle CODASYL DBMS or relational rollback and
       releases all collections associated with Oracle CODASYL DBMS
       domains and records and with relational domains and relations.
       ROLLBACK then readies Oracle CODASYL DBMS realms again or
       finishes and starts a new relational source transaction.

       The ROLLBACK statement also acts as an ABORT in procedures,
       nested statements, and command files.

       The ROLLBACK statement affects all readied parts of Oracle
       CODASYL DBMS and relational databases, whether or not you made
       any changes to the data they contain. Domains based on RMS files
       are not affected by the ROLLBACK statement.

       Format

         ROLLBACK

79.1  –  Example

       The following example for the Oracle CODASYL DBMS database
       PARTS_DB connects an employee named Hill to a part LA36 in the
       RESPONSIBLE_FOR set. The ROLLBACK statement undoes the change:

       DTR> FIND E IN EMPLOYEES WITH EMP_LAST_NAME = "HILL"
       DTR> SELECT 1
       DTR> FOR P IN PART WITH PART_DESC = "LA36"
       CON>     CONNECT P TO E.RESPONSIBLE_FOR
       DTR>  ROLLBACK
       DTR>

80  –  SCALE Clause

       Establishes explicitly the scale factor to be applied to the
       value stored in the field.

       Format

         SCALE  [IS]  [-]integer

80.1  –  Arguments

    - (minus sign)

       Is an optional minus sign to indicate a negative scale factor.

    integer

       Indicates the number of decimal places the implied decimal point
       is from the right or left end of the value stored in the field.

80.2  –  Examples

       The following example uses a positive scale factor to store a
       large number in a small field:

       03 BARRELS_PER_DAY WORD
          SCALE 6
          EDIT_STRING Z(5)" Million".

       The following example uses a negative scale factor to store a
       minute number in a small field:

       03 PROJECT.
          05 PROBABILITY_OF_FINISHING.
             07 EVER DEFAULT VALUE IS 1
                PIC 99 SCALE -2.
             07 ON_TIME 99 SCALE -6
                MISSING VALUE 0
                EDIT_STRING 0.9(6)?"Better late than never".

81  –  SELECT Statement

       Establishes a target record in a collection.

       Format

                 [ FIRST            ]
                 [ NEXT             ]
                 [ PRIOR            ]
         SELECT  [                  ] [collection-name] [WITH boolean]
                 [ LAST             ]
                 [ value-expression ]
                 [ NONE             ]
                 [                  ]

81.1  –  Arguments

    FIRST

       Selects the first record in the target collection.

    NEXT

       Selects the next record in the target collection. (See the second
       and third items in the Results section.) When you omit a position
       specification, NEXT is the default.

    PRIOR

       Selects the previous record in the target collection. (See the
       fifth and sixth items in the Results section.)

    LAST

       Selects the last record in the target collection.

    value-expression

       Evaluates to a positive number. DEC DATATRIEVE uses the integer
       part of the number to select the record with that position number
       in the collection.

    NONE

       Releases the selected record so that no selected record exists
       for the current collection. If the collection was formed from a
       file-structured database, SELECT NONE also releases the RMS lock
       on the selected record.

    collection-name

       Is the name of the target collection containing the record to be
       selected. If you omit the collection name, the target collection
       is the current collection.

    WITH boolean

       Causes DEC DATATRIEVE to select the record that satisfies both
       the Boolean expression and the collection position references
       (FIRST, LAST, NEXT, PRIOR, and value-expression).

81.2  –  Examples

       The following example selects the last record in the CURRENT
       collection:

       DTR>  SELECT LAST
       DTR>

       The following example selects the fifth record in the collection
       BIG_ONES:

       DTR>  SELECT 5 BIG_ONES
       DTR>

       The following example selects the last 30-foot boat in the YACHTS
       inventory from the CURRENT collection:

       DTR>  FIND YACHTS
       [113 records found]
       DTR>  SELECT LAST WITH LOA = 30
       DTR>  PRINT

                                      LENGTH
                                       OVER
       MANUFACTURER   MODEL     RIG    ALL   WEIGHT BEAM  PRICE

        SOLNA CORP  SCAMPI     SLOOP   30     6,600  10

       DTR>

       The following example selects a record from the CURRENT
       collection, modifies a field value, and releases the selected
       record and, in this case, the RMS lock on the record:

       DTR>  READY YACHTS SHARED MODIFY
       DTR>  FIND YACHTS WITH BUILDER = "SOLNA CORP"
       [1 record found]
       DTR>  SELECT
       DTR>  PRINT

                                      LENGTH
                                       OVER
       MANUFACTURER   MODEL     RIG    ALL   WEIGHT BEAM  PRICE

        SOLNA CORP  SCAMPI     SLOOP   30     6,600  10

       DTR>  MODIFY PRICE
       Enter PRICE:  50000
       DTR>  PRINT

                                      LENGTH
                                       OVER
       MANUFACTURER   MODEL     RIG    ALL   WEIGHT BEAM  PRICE

        SOLNA CORP  SCAMPI     SLOOP   30     6,600  10  $50,000

       DTR>  SELECT NONE
       DTR>

82  –  SET Command

       o  Controls the DEC DATATRIEVE response to ABORT statements.

       o  Sets the keypad mode (application or numeric) within DEC
          DATATRIEVE.

       o  Sets the maximum number of columns per page for DEC DATATRIEVE
          output.

       o  Establishes your default directory in the Oracle
          CDD/Repository data dictionary.

       o  Determines whether DEC DATATRIEVE creates a DTREDIT.DTR backup
          file when you edit dictionary objects.

       o  Determines whether DEC DATATRIEVE uses its forms interface to
          control the video display of your terminal.

       o  Starts DEC DATATRIEVE Guide Mode.

       o  Determines whether DEC DATATRIEVE recognizes null values of
          relational databases.

       o  Permits or inhibits automatic syntax prompting for continued
          commands and statements.

       o  Permits or inhibits creation of an implicit inner print
          list in a PRINT statement and an implicit ANY in a Boolean
          expression.

       o  Determines whether a semicolon is required at the end of each
          command or statement.

       o  Controls whether commands and statements in command files are
          displayed when the command file is invoked

       Format

              {  [NO] ABORT                }
              {  [NO] APPLICATION_KEYPAD   }
              {  COLUMNS_PAGE=n            }
              {                            }
              {  [NO] CDD                  }
              {  DICTIONARY path-name      }
              {  [NO] EDIT_BACKUP          }
              {  [NO] FORM                 }
              {                            }
              {  [NO] GRID                 }
              {  GUIDE [ADVANCED]          }
              {  KEYDEFS file-spec         }
         SET  {                            }  [,...]
              {  [NO] LOCK_WAIT            }
              {  [NO] NULLS                }
              {  PLOTS path-name           }
              {                            }
              {  [NO] PROMPT               }
              {  [NO] SEARCH               }
              {  [NO] SEMICOLON            }
              {                            }
              {  [NO] VARIABLES PROCEDURES }
              {  [NO] VERIFY               }
              {  NOVERIFY                  }
              {                            }

         To change settings for HELP:

              {  [NO] HELP_PROMPT  }
         SET  {  [NO] HELP_WINDOW  }  [,...]
              {  HELP_LINES n TO m }
              {                    }

82.1  –  Arguments

    ABORT

       Causes DEC DATATRIEVE to abort the remainder of a procedure or
       command file when DEC DATATRIEVE executes an ABORT statement,
       when you enter a CTRL/Z to a prompt, or when a syntax or logical
       error occurs during the execution of a command or statement.

       The exception to the logical error condition is the DELETE
       command. If you list two or more objects as arguments for the
       DELETE command, DEC DATATRIEVE does not abort if it fails to find
       an object of a specified name. Instead, DEC DATATRIEVE continues
       to delete the remaining objects in the list.

    NO ABORT

       Causes DEC DATATRIEVE, when processing a procedure or a command
       file, to abort only the one statement containing an ABORT
       statement. SET NO ABORT also causes DEC DATATRIEVE to take the
       same action when you respond with a CTRL/Z to a prompt in a
       procedure or command file. DEC DATATRIEVE then executes the next
       command or statement in the procedure or command file. SET NO
       ABORT is in effect when you start a DEC DATATRIEVE session.

    APPLICATION_KEYPAD

       Sets the keypad mode as application keypad within DEC DATATRIEVE.

       The default keypad mode for DEC DATATRIEVE is numeric keypad
       mode.

       You can also set the keypad mode using the function FN$KEYPAD_
       MODE.

       This command is not available in a DECwindows Motif environment.

    NO APPLICATION_KEYPAD

       Sets the keypad mode as numeric keypad within DEC DATATRIEVE.

       The default keypad mode for DEC DATATRIEVE is numeric keypad
       mode.

       You can also set the keypad mode using the function FN$KEYPAD_
       MODE.

       This command is not available in a DECwindows Motif environment.

    COLUMNS_PAGE = n

       Establishes the number of columns per page for DEC DATATRIEVE
       output and the default page width for the Report Writer. When you
       start your session, the default COLUMNS_PAGE setting is 80.

       To set the terminal's width, use the DEC DATATRIEVE function
       FN$WIDTH.

    DICTIONARY path-name

       Causes DEC DATATRIEVE to set your default directory node of the
       Oracle CDD/Repository data dictionary to the node specified by
       the dictionary path name. When you start your DEC DATATRIEVE
       session, your default Oracle CDD/Repository directory is
       either CDD$TOP or the directory designated by the logical name
       CDD$DEFAULT.

       SET DICTIONARY accepts both DMU and CDO style path names.

    EDIT_BACKUP

       Causes DEC DATATRIEVE to save the original definition in the
       Oracle CDD/Repository data dictionary when you use the EDIT
       command to edit a dictionary object. When you start your DEC
       DATATRIEVE session, SET EDIT_BACKUP is in effect. Use the SHOW
       EDIT command to see whether or not SET EDIT_BACKUP is currently
       in effect.

    NO EDIT_BACKUP

       Causes DEC DATATRIEVE to delete the highest version of the object
       in the Oracle CDD/Repository data dictionary, or the version you
       specify, and replace it with the definition in the edit buffer
       when you use the EDIT command to edit a dictionary object.

    FORM

       Determines whether DEC DATATRIEVE uses its forms interface when
       you use the PRINT, MODIFY, and STORE statements. For terminals
       supported by the forms product you are using, SET FORM causes
       DEC DATATRIEVE to display and use forms when you enter the PRINT,
       MODIFY, or STORE statement.

       When you start your DEC DATATRIEVE session, SET FORM is in
       effect.

    NO FORM

       Prevents DEC DATATRIEVE from using its forms interface. If SET
       NO FORM is in effect when you use the PRINT, MODIFY, or STORE
       statements, DEC DATATRIEVE does not use the forms interface.

    GRID

       Causes a client application (DEC DATATRIEVE Client for Windows or
       programs calling DEC DATATRIEVE) to display the output of a PRINT
       statement on the grid (Dataset Viewer). If the output is directed
       to a file, that file contains all the necessary tab characters
       that make it readable by other PC applications (e.g. Excel[R]).
       This command is for client applications only, and it's ignored by
       the DEC DATATRIEVE server if this is not connected to a client.

   NO CDD

   Specifies whether DEC DATATRIEVE should attach to Oracle CDD/Repository
   or use textfile-based dictionary only. When this qualifier is missing,
   the DEC DATATRIEVE behaviour depends on the equivalent string of
   the logical name DTR$ENVIRONMENT: if the equivalent string contains
   /NOCDD , no attachment to Oracle CDD/Repository occurs.
   If DTR$ENVIRONMENT is not defined, the DEC DATATRIEVE behaviour depends
   on the configuration selected at installation time.
   If Oracle CDD/Repository is linked to DEC DATATRIEVE at installation time
   its use can dynamically be disabled using the DATATRIEVE SET NO CDD
   command, which switches to the textfile-based dictionary.

    NO GRID

       Causes a client application (DEC DATATRIEVE Client for Windows or
       programs calling DEC DATATRIEVE) to display the output of a PRINT
       statement on the Output window. SET NO GRID is the default. This
       command is for client applications only, and it is ignored by the
       server if this is not connected to a client.

    GUIDE

       Starts Guide Mode, the tutorial mode of DEC DATATRIEVE. Refer to
       the DEC DATATRIEVE User's Guide for a description of Guide Mode.

    KEYDEFS file-spec

       Lets you define multiple keypad keys from a file containing
       DCL DEFINE/KEY commands (see the OpenVMS documentation for more
       information on the DEFINE/KEY command). By using SET KEYDEFS, you
       do not have to make multiple calls to the FN$DEFINE_KEY function.

       The file specification is the full DCL file specification for the
       file containing the DCL DEFINE/KEY commands.

       This command is not available in a DECwindows Motif environment.

    LOCK_WAIT

       When two applications try to access the same file, RMS may lock a
       record that DEC DATATRIEVE needs to access. DEC DATATRIEVE tries
       for 12 seconds to access a locked record. SET LOCK_WAIT causes
       DEC DATATRIEVE to turn control over to RMS after this period. RMS
       then waits for the locked record until it is released, or until
       RMS sends you a deadlock message. The default is SET NO LOCK_
       WAIT.

    NO LOCK_WAIT

       Instructs DEC DATATRIEVE not to try to access a locked record
       after 12 seconds. At the end of this period, you receive an RMS
       message informing you that the record is locked. When you begin
       your DEC DATATRIEVE session, SET NO LOCK_WAIT is in effect.

    NULLS

       When the you issue a SET NULLS command, DEC DATATRIEVE recognizes
       null values of relational databases as such. SET NULLS is the
       default.

    NO NULLS

       When you issue a SET NO NULLS command, DEC DATATRIEVE does
       not recognize null values of relational databases as such,
       it returns the type-dependent default values of relational
       databases. You can examine the current condition with the SHOW
       SET_UP command.

    PLOTS

       Establishes the default Oracle CDD/Repository DMU data dictionary
       directory for your DEC DATATRIEVE plot definitions.

    PROMPT

       Causes DEC DATATRIEVE to prompt for elements needed to complete
       the syntax of the current command or statement. When you press
       the RETURN key before completing a command or statement, DEC
       DATATRIEVE prompts you for the next syntactic element of that
       statement or command. The prompt takes the following form:

       [Looking for element]

       At the start of a DEC DATATRIEVE session, SET PROMPT is in
       effect.

    NO PROMPT

       Prevents DEC DATATRIEVE from prompting for elements needed to
       complete the syntax of the current command or statement.

    SEARCH

       Causes the DEC DATATRIEVE Context Searcher to create implicit
       inner print lists in PRINT statements and implicit ANYs in
       Boolean expressions. When you work with Oracle CODASYL DBMS
       domains, the SET SEARCH command causes the DEC DATATRIEVE Context
       Searcher to walk sets to look for a context to resolve references
       to field names.

    NO SEARCH

       Prevents the DEC DATATRIEVE Context Searcher from creating
       implicit inner print lists in PRINT statements and implicit ANYs
       in Boolean expressions. At the start of a DEC DATATRIEVE session,
       SET NO SEARCH is in effect.

    SEMICOLON

       Causes DEC DATATRIEVE to require a semicolon at the end of
       commands or statements.

    NO SEMICOLON

       Causes DEC DATATRIEVE to make semicolons at the end of commands
       or statements optional. At the start of a DEC DATATRIEVE session,
       SET NO SEMICOLON is in effect.

    VARIABLES PROCEDURES

       Allows you to use variables as procedures: you can store in a
       DEC DATATRIEVE variable commands and statements. You can then
       execute the variable as if it was a procedure. Variables declared
       as procedures are not stored in the Oracle CDD/Repository.

    NO VARIABLES PROCEDURES

       Causes variables to be interpreted as variables and not as
       procedures. At the start of your DEC DATATRIEVE session, SET
       NO VARIABLES PROCEDURES is the default.

    VERIFY

       Causes lines from command files to be displayed when a command
       file is invoked.

    NO VERIFY

       Suppresses the display of lines from command files when a command
       file is invoked. At the start of your DEC DATATRIEVE session, the
       current setting for SET VERIFY/NOVERIFY at the DCL level is in
       effect.

    HELP_PROMPT

       Causes DEC DATATRIEVE to prompt for the topic or subtopic when
       help text is displayed.

    NO HELP_PROMPT

       Suppresses the prompting for the topic or subtopic when help text
       is displayed.

    HELP_WINDOW

       Causes help text to be displayed in a scrolling region of a video
       terminal.

    NO HELP_WINDOW

       Causes help text to be displayed in a nonscrolling region of a
       video terminal.

    HELP_LINES n TO m

       Sets the lines for scrolling help text between lines n and m,
       where n represents the beginning of the scrolling region and m
       represents the end.

82.2  –  Examples

       The following example displays the default settings and change
       the default settings with one SET statement:

       DTR> SHOW SET_UP
       Set-up:
           Columns_page: 80
           No abort
           Prompt
           No search
           Form
           No verify
           No semicolon
           No lock_wait
           NULLs support
           Application keypad mode

       DTR>  SET COLUMNS_PAGE = 132, ABORT, NO PROMPT, SEARCH,
       [Looking for SET option]
       CON> 9 NO FORM, VERIFY, SEMICOLON, LOCK_WAIT, NO APPLICATION_KEYPAD

       DTR>SHOW SET_UP
       Set-up:
           Columns_page: 132
           Abort
           No prompt
           Search
           No form
           Verify
           Semicolon
           Lock_wait
           NULLs support
           Numeric keypad mode
       DTR>

       The following example sets your default dictionary directory at
       CDD$TOP and uses a variety of path names to change your default
       directory:

       DTR>  SET DICTIONARY CDD$TOP
       DTR>  SET DICTIONARY DTR$LIB.DEMO
       DTR>  SHOW DICTIONARY
       The default directory is CDD$TOP.DTR$LIB.DEMO
       DTR>  SHOW DICTIONARIES
       Dictionaries:
       DTR>  SET DICTIONARY -.-;
       DTR>  SHOW DICTIONARY
       The default directory is CDD$TOP
       DTR>  SET DICTIONARY CDD$TOP.DTR32
       Element "CDD$TOP.DTR32.JONES" not found in dictionary.
       DTR>  SET DICTIONARY CDD$TOP.DTR32.TEST
       DTR>  SHOW DICTIONARIES
       Dictionaries:
       DTR>  SET DEF -; SHOW DICTIONARY
       The default directory is CDD$TOP.DTR32
       DTR>  SHOW DICTIONARIES
       Dictionaries:
               AWS             BRADS           BRENT           DBF
               DDD             DEMO            DENN            DETRIC
               DUNCAN          JAS             KELLERMAN       LANDAU
               MARISON         PLOTS           STRONG          TEST
               WAYNE

       DTR>  SET DICTIONARY WAYNE
       DTR>  SET DICTIONARY DISK1:[SWANSON.DTRWORK]TEST.NEWDICT
       DTR>

       The following example uses the SET SEARCH command to walk sets in
       a Oracle CODASYL DBMS database:

       DTR>  READY SUPPLIES, VENDORS, PART_S
       DTR>  SET SEARCH
       DTR>  PRINT VEND_NAME, PART_DESC OF
       [Looking for name of domain, collection, or list]
       CON>     VENDORS WITH VEND_NAME = "QUALITY COMPS"
       Not enough context. Some field names resolved by Context Searcher.
       --------------Vendor Name---------------

       QUALITY COMPS
       VT100 KEYBOARD ASSY
       NUMERIC KEYPAD FRAME
       VT52 HOUSING

       When SET SEARCH is not in effect, you need to provide explicitly
       the inner print lists to give DEC DATATRIEVE the necessary
       context, as follows:

       DTR>  SET NO SEARCH
       DTR>  PRINT VEND_NAME, ALL ALL PART_DESC OF PART_S OWNER OF
       [Looking for set name]
       CON>     PART_INFO OF SUPPLIES MEMBER OF VENDOR_SUPPLY OF
       [Looking for name of domain, collection, or list]
       CON>     VENDORS WITH VEND_NAME = "QUALITY COMPS"
       --------------Vendor Name---------------

       QUALITY COMPS
       VT100 KEYBOARD ASSY
       NUMERIC KEYPAD FRAME
       VT52 HOUSING

       DTR>

83  –  SET Statement (Report Writer)

       Controls the report header and defines the size of report pages
       and the length of the report. With Report Writer SET statements,
       you can specify the following:

       o  The report header-the report name (if any), the date, page
          numbering, and their print attributes

       o  The size of report pages-the number of columns and the number
          of lines per page, or the physical paper size

       o  The orientation of the paper to be printed on.

       o  The length of the report-the maximum number of lines and the
          maximum number of pages

       o  Whether or not column headers are printed

       Format

         For naming the report:

                                                {  "string"[/ . . . ]}
         SET  REPORT_NAME =  [ ATT  att-name, ] {   *.prompt         }
                                                {                    }

         For controlling the printing of default page numbers and for
         specifying the beginning page number at the upper right of a
         page:

              {          [   { ATT att-name                 } ]  }
              {          [   {               {           }  } ]  }
              {          [   { ATT att-name, { n         }  } ]  }
              {  NUMBER  [ = {               { *.prompt  }  } ]  }
              {          [   {                              } ]  }
         SET  {          [   { { n         }                } ]  }
              {          [   { { *.prompt  }                } ]  }
              {          [   { {           }                } ]  }
              {                                                  }
              {                                                  }
              {  NO NUMBER                                       }

         For specifying a date or string at the upper right of each page
         or for disabling the printing of a date:

              {        [   { ATT att-name           }  ]  }
              {  DATE  [ = { ATT att-name, "string" }  ]  }
              {        [   {                        }  ]  }
         SET  {        [   { "string"               }  ]  }
              {                                           }
              {                                           }
              {  NO DATE                                  }

         For disabling the printing of the entire report header:

         SET NO REPORT_HEADER

         For specifying the printing of column headers:

              {  COLUMN_HEADER  =  ATT att-name }
         SET  {  NO COLUMN_HEADER               }
              {                                 }

         For specifying page width or length, or overall report length:

              { { COLUMNS_PAGE =  }                }
              { { LINES_PAGE =    } { n         }  }
         SET  { { MAX_LINES =     } { *.prompt  }  }  [, . . . ]
              { {                 } {           }  }
              { { MAX_PAGES =     }                }

         For specifying paper size:

              {              { A          }         }
              {              { B          }         }
              {              {            }         }
              {              { C          }         }
              {              { D          }         }
              {              { LETTER     }         }
              {              {            }         }
              {              { LEDGER     }         }
              {              { LEGAL      }         }
              {              { EXECUTIVE  }         }
              {              {            }         }
              {              { 7_BY_9     }         }
              {              { A1         }         }
              {  PAPER_SIZE  { A2         }         }
              {              {            }         }
              {              { A3         }         }
              {              { A4         }         }
         SET  {              { A5         }         }
              {              {            }         }
              {              { B4         }         }
              {              { C4         }         }
              {              { C5         }         }
              {              {            }         }
              {              { C6         }         }
              {              { C7/6       }         }
              {              { C5/6       }         }
              {              {            }         }
              {              { DL         }         }
              { { PAPER_HEIGHT  }      {MM  }       }
              { {               }   =n {    }       }
              { { PAPER_WIDTH   }      {IN  }       }
              {                       {           } }
              {  PAPER_ORIENTATION  = {PORTRAIT   } }
              {                       {LANDSCAPE  } }
              {                                     }

84  –  SHOW Command

       Displays information about the Oracle CDD/Repository data
       dictionary and its contents.

84.1  –  Arguments

     SHOW ALL

       Displays the names of all the objects and directories listed
       in your default Oracle CDD/Repository dictionary, the name of
       your default directory, the names of the collections, the other
       readied RSE sources (domains, relations, Oracle CODASYL DBMS
       records), and the loaded tables and forms in your workspace.
       DMU format record and domain definitions are indicated with an
       asterisk (*).

     SHOW collection-name

       Displays the collection name, the name of the domain, relation,
       or Oracle CODASYL DBMS record within which the collection has
       been established, the number of records in the collection, the
       status of the selected record within the collection, the names of
       the keys on which the collection has been sorted, and the command
       that created the collection.

     SHOW COLLECTIONS

       Displays the names of the collections you are using.

     SHOW CURRENT

       Displays the name of the domain, relation, or Oracle CODASYL DBMS
       record within which the CURRENT collection has been formed, the
       number of records in the CURRENT collection, the status of the
       selected record in the CURRENT collection, and the names of the
       keys on which the collection has been sorted.

     SHOW database-name

       For relational databases, displays the name and the file
       specification of the database. For Oracle CODASYL DBMS, displays
       the name, the subschema name, the schema path name, and the root
       file specification of the database.

     SHOW DATABASES

       Displays the names of the relational and Oracle CODASYL DBMS
       databases listed in your default directory.

     SHOW DICTIONARIES

       Displays the names of the dictionary directories appended to
       your default directory. (This option tells you if the dictionary
       branch continues lower than your current location.)

     SHOW DICTIONARY

       Displays the full dictionary path name of your default directory.

     SHOW domain-name

       Displays the name, the record definition name, and the file
       specification of the domain based on a RMS file. Displays the
       domain name, the associated Oracle CODASYL DBMS record, and the
       database name associated with the Oracle CODASYL DBMS domain.
       Displays the domain name, the associated relation name, and the
       database name associated with the relational domain.

     SHOW DOMAINS

       Displays the names of all domains cataloged in your default
       directory. DMU format domains are indicated by an asterisk (*).

     SHOW EDIT

       Indicates whether SET EDIT_BACKUP or SET NO EDIT_BACKUP is in
       effect in your DEC DATATRIEVE session. SET EDIT_BACKUP is the
       default. If you enter the command SET NO EDIT_BACKUP and edit
       any definitions, DEC DATATRIEVE deletes the highest version of
       the definitions when you exit the editor. SET NO EDIT_BACKUP
       automatically keeps outdated versions of definitions from piling
       up in your directory, but could erase the only definition you
       have to fall back on should you make a mistake in your editing.

     SHOW FIELDS

       Displays the names, data types, and index-key information of
       the fields of all domains you have readied. It also displays the
       names and data types of global variables. For RMS sources, the
       SHOW FIELDS command indicates whether or not a key field is the
       primary key or an alternate key. For fields from non-RMS sources,
       SHOW FIELDS indicates an indexed key.

     SHOW FIELDS FOR   domain-name   collection-name   dbms-record   rdb-relational-name

       Displays the names, data types, end index-key information of the
       fields in the domain, collection, dbms-record, or rdb-relation
       you specify after FOR. You can only specify the name of a readied
       domain.

     SHOW FORMS

       Displays the form name, the form file, and the form product name
       of all loaded forms.

     SHOW FUNCTIONS

       Displays all the loaded user functions and the subset they belong
       to.

     SHOW HELP

       Indicates which of the settings for the HELP command is in
       effect. The settings are HELP_LINES, HELP_PROMPT, and HELP_
       WINDOW.

    SHOW KEYDEFS

       Shows all current key definitions in all states. A state allows
       the same key to be assigned multiple definitions by associating
       each definition with a different state key. In addition to SHOW
       KEYDEFS, you can use the function FN$SHOW_KEYDEFS to show all key
       definitions. This command is not available in a DECwindows Motif
       environment.

     SHOW path-name

       Displays the text of the domain, record, procedure, or table
       definition specified by the dictionary path name.

     SHOW PLOTS

       Displays the names of the loaded plots from the directory
       specified in the SET PLOTS command.

     SHOW PRIVILEGES

       Displays the access privileges you have to the directory at which
       you are currently located.

     SHOW PRIVILEGES FOR path-name

       Displays the access privileges you have to the directory or
       object you name in the FOR clause.

     SHOW procedure-name

       Displays the name of the procedure, the commands and statements
       contained in the procedure, and the END_PROCEDURE clause.

     SHOW PROCEDURES

       Displays the names of all procedures cataloged in the directory
       at which you are currently located.

     SHOW READY

       Displays for each readied domain based on a RMS file the full
       dictionary path name, the file organization of the associated
       data file, the access control option (EXCLUSIVE, PROTECTED, or
       SHARED), and the access mode (READ, WRITE, EXTEND, or MODIFY).
       For all readied relational and Oracle CODASYL DBMS domains, the
       SHOW READY command displays the name, type, access option, access
       mode, and the domain path. For individual relations and Oracle
       CODASYL DBMS records, the SHOW READY command displays the name,
       type, access option, access mode, and the dictionary path to the
       database. The most recently readied domain, relation, or Oracle
       CODASYL DBMS record is at the top of the displayed list. The SHOW
       READY command also displays the full dictionary path name and
       table type of all tables loaded in your workspace.

     SHOW record-name

       Displays the name, level numbers, fields, and field definitions
       of the record. It also allows you to display those records
       defined by the CDO utility.

     SHOW RECORDS

       Displays the names of all record definitions cataloged at your
       current directory location. DMU format records are indicated by
       an asterisk (*).

     SHOW SET_UP

       Displays the current status of the options you can control
       with the SET command: ABORT/NO ABORT, APPLICATION_KEYPAD/ NO
       APPLICATION_KEYPAD, COLUMNS_PAGE, FORM/NO FORM, NULLS/NO NULLS,
       PROMPT/NO PROMPT, SEARCH/NO SEARCH, SEMICOLON/ NO SEMICOLON,
       VARIABLES PROCEDURES, and VERIFY/NOVERIFY.

     SHOW SETS

       Displays the names of any available Oracle CODASYL DBMS sets and
       their Oracle CODASYL DBMS insertion and retention classes.

     SHOW SYNONYMS

       Displays the names of any synonyms for DEC DATATRIEVE keywords in
       effect during your DEC DATATRIEVE session.

     SHOW table-name

       Displays the name of the table, the code and translation pairs,
       and the END_TABLE clause.

     SHOW TABLES

       Displays the names of all dictionary tables and domain tables
       cataloged in your default directory.

     SHOW VARIABLES

       Displays the contents of all variable declarations in effect in
       the current DEC DATATRIEVE session.

84.2  –  Examples

       The following example displays the record definition OWNER_REC:

       DTR>  SHOW OWNER_REC
       RECORD OWNER_REC
       01 OWNER.
          03 NAME PIC X(10).
          03 BOAT_NAME PIC X(17).
          03 TYPE.
             06 BUILDER PIC X(10).
             06 MODEL PIC X(10).
       ;

       DTR>

       The following example displays the status of the SET command
       options that affect your DEC DATATRIEVE session:

       DTR>  SHOW SET_UP
       Set-up:
           Columns_page: 80
           No abort
           Prompt
           No search
           Form
           No verify
           No semicolon
           No lock wait
           NULLs support
           Application keypad mode

       DTR>

85  –  SHOWP Command

       Displays the access control list (ACL) of an object or directory
       in the
       Oracle CDD/Repository data dictionary.

       Format

         SHOWP  path-name

85.1  –  Argument

    path-name

       Is the given name, full dictionary path name, or relative path
       name of the dictionary object or directory whose access control
       list you want to display.

85.2  –  Examples

       The following example displays the access control list for the
       DMU YACHTS domain:

       DTR>  SHOWP YACHTS
         1:    [*,*], Username: "JONES"
               Grant - CDEHMRSUW, Deny - none, Banish - none

       DTR>

       The following example uses a password to gain C (CONTROL) access
       to the DMU record YACHT and then display its access control list:

       DTR>  SHOWP YACHT (*)
       Enter password for YACHT:   !You enter CEP, which is not echoed.
       DTR>  SHOWP YACHT
         1:    [*,*], Password: "P"
               Grant - P, Deny - CDESUX, Banish - none
         2:    [*,*], Password: "DP"
               Grant - DP, Deny - CESUX, Banish - none
         3:    [*,*], Password: "EP"
               Grant - EP, Deny - CDSUX, Banish - none
         4:    [*,*], Password: "PS"
               Grant - PS, Deny - CDEUX, Banish - none
         5:    [*,*], Password: "PU"
               Grant - PU, Deny - CDESX, Banish - none
         6:    [*,*], Password: "PX"
               Grant - PX, Deny - CDESU, Banish - none
         7:    [*,*], Password: "CEP"
               Grant - CEP, Deny - DSUX, Banish - none
         8:    [*,*], Password: "CDP"
               Grant - CDP, Deny - ESUX, Banish - none

       DTR>

       The following example displays the ACL of the CDO format
       dictionary SYS$COMMON:[CDDPLUS.PERSONNEL]:

    DTR> SHOWP SYS$COMMON:[CDDPLUS.PERSONNEL]
     1: [*,*], Username: "CASADAY"
        GRANT - RWMESUDC, DENY - none
        ACCESS=READ+WRITE+MODIFY+EXTEND+SHOW+DEFINE+CHANGE+DELETE+CONTROL
     2: [*,*]
        GRANT - S, DENY - RWMEUDC
        ACCESS=SHOW

    DTR>

86  –  SIGN Clause

       Specifies the location and representation of a sign (+ or -) in a
       numeric elementary field.

       Format

                    { LEADING  }
         SIGN [IS]  { TRAILING }  [SEPARATE]
                    {          }

86.1  –  Arguments

    LEADING

       Indicates that the sign is at the left (LEADING) or right
       (TRAILING) of the field value.

    SEPARATE

       Indicates that the sign occupies its own character position
       in the field. If this argument is omitted, the sign shares
       a character position with the field's leftmost (LEADING) or
       rightmost (TRAILING) digit.

86.2  –  Examples

       The following example defines the field CURRENT_BALANCE as a 6-
       digit signed field, with the sign sharing the leftmost character
       position:

       03 CURRENT_BALANCE
          PIC IS S9999V99
          EDIT_STRING IS $$$$9.99-
          SIGN IS LEADING.

       The following example defines the field NEW_PRICE as a 4-digit
       signed field. The sign is a separate character in the rightmost
       character position:

       03 NEW_PRICE PIC S99V99
          SIGN TRAILING SEPARATE
          EDIT_STRING +++.99.

87  –  SORT Statement

       Arranges a DEC DATATRIEVE collection according to the order you
       specify for the contents of one or more fields in the records.

       Format

         SORT  [collection-name]  [BY]   sort-key-1  [,...]

87.1  –  Arguments

    collection-name

       Is the name of the collection to be sorted.

    BY

       Is an optional language element you can use to clarify syntax.

    sort-key

       Is a field whose contents form the basis for the sort. You can
       also use a value expression as a sort key as long as the value
       expression does not contain a SORTED BY or REDUCED TO clause.

       The sort key can be preceded or followed by a keyword that
       determines the order in which DEC DATATRIEVE sorts the records
       in the collection. ASCENDING is the default order.

       To specify the sort order for each sort key, use one of the
       following terms:

       ASC[ENDING]
       DESC[ENDING]
       INCREASING
       DECREASING

       If you specify more than one sort key, use a comma to separate
       each sort key from the next.

87.2  –  Examples

       The following example sorts the first ten yachts by the ratio of
       PRICE to DISPLACEMENT:

       DTR>  FIND FIRST 10 YACHTS
       [10 records found]
       DTR>  SORT BY PRICE/DISP
       DTR>  PRINT ALL TYPE, PRICE, DISP,
       [Looking for next element in list]
       CON>  PRICE/DISP ("$/LB."/"RATIO") USING $$$.99

                                              $/LB.
       MANUFACTURER   MODEL     PRICE  WEIGHT RATIO

        BLOCK I.    40                 18,500   $.00
        BUCCANEER   270                 5,000   $.00
        ALBERG      37 MK II   $36,951 20,000  $1.85
        AMERICAN    26          $9,895  4,000  $2.47
        BOMBAY      CLIPPER    $23,950  9,400  $2.55
        AMERICAN    26-MS      $18,895  5,500  $3.44
        BAYFIELD    30/32      $32,875  9,500  $3.46
        ALBIN       VEGA       $18,600  5,070  $3.67
        ALBIN       BALLAD     $27,500  7,276  $3.78
        ALBIN       79         $17,900  4,200  $4.26

       DTR>

       The following example forms a collection of FAMILIES CROSS KIDS
       and sorts the collection by decreasing age of the children:

       DTR>  FIND FIRST 6 FAMILIES CROSS KIDS
       [6 records found]
       DTR>  SORT BY DESC AGE
       DTR>  PRINT ALL FATHER, MOTHER, EACH_KID

                                KID
         FATHER     MOTHER      NAME    AGE

       JIM        LOUISE     ANNE       31
       JIM        LOUISE     JIM        29
       JIM        LOUISE     ELLEN      26
       JIM        LOUISE     DAVID      24
       JIM        ANN        URSULA      7
       JIM        ANN        RALPH       3

88  –  STORE Statements

       Creates a record in a DEC DATATRIEVE domain and stores values
       in one or more fields of the record. For information on using
       STORE with Oracle CODASYL DBMS and relational databases, see
       the section on the STORE statement for Oracle CODASYL DBMS and
       relational sources in this chapter.

       Format

         STORE  [context-variable IN]  domain-name

          [USING statement-1]

          [VERIFY [USING] statement-2]

88.1  –  Arguments

    context-variable

       Is the name of the record to be inserted.

    domain-name

       Is the given name or alias of the domain that contains the new
       record.

    USING statement-1

       Specifies a DEC DATATRIEVE statement that can store one value for
       one or more fields in the new record.

    VERIFY [USING] statement-2

       Specifies a statement DEC DATATRIEVE executes just before storing
       the new record.

88.2  –  Examples

       The following example stores two records in the FAMILIES domain:

       DTR> READY FAMILIES WRITE
       DTR> REPEAT 2 STORE FAMILIES
       Enter FATHER: GEORGE
       Enter MOTHER: SANDY
       Enter NUMBER_KIDS: 2
       Enter KID_NAME: DANA
       Enter AGE: 12
       Enter KID_NAME: DACIA
       Enter AGE: 9

       Enter FATHER: WAYNE
       Enter MOTHER: SHEEL
       Enter NUMBER_KIDS: 2
       Enter KID_NAME: BETE
       Enter AGE: 8
       Enter KID_NAME: ALEX
       Enter AGE: 5
       DTR> FIND FAMILIES WITH MOTHER = "SANDY", "SHEEL"
       [2 records found]
       DTR> PRINT ALL

                             NUMBER    KID
         FATHER     MOTHER    KIDS     NAME    AGE

       GEORGE     SANDY         2   DANA       12
                                    DACIA       9
       WAYNE      SHEEL         2   BETE        8
                                    ALEX        5

       DTR>

       The following example stores a record in the YACHTS domain, using
       a context variable and a VERIFY clause:

       DTR> SHOW HINKLEY_STORE
       PROCEDURE HINKLEY_STORE
       STORE A IN YACHTS USING
       BEGIN
            BUILDER = "HINKLEY"
            MODEL = "BERMUDA 40"
            RIG = "YAWL"
            LOA = 40
            DISP = 20000
            BEAM = 12
            PRICE = 82000
       END VERIFY USING
       BEGIN
            PRINT A.BOAT, SKIP
            IF *.CONFIRMATION CONT "N" THEN
            PRINT SKIP THEN ABORT "BAD RECORD"
       END
       END_PROCEDURE

       DTR> READY YACHTS WRITE
       DTR> :HINKLEY_STORE

                                      LENGTH
                                       OVER
       MANUFACTURER   MODEL     RIG    ALL   WEIGHT BEAM  PRICE

        HINKLEY     BERMUDA 40 YAWL    40    20,000  12  $82,000

       Enter CONFIRMATION: N

       ABORT: BAD RECORD

       DTR>

       The following example defines a domain for single-digit integers
       and their squares, and uses a WHILE statement to control the
       number of records stored in the domain:

       DTR> DEFINE DOMAIN SQUARES USING
       DFN> SQUARES_REC ON SQUARES.DAT;
       DTR> DEFINE RECORD SQUARES_REC USING
       DFN> 01 SQUARES.
       DFN>    03 NUMBER PIC 9.
       DFN>    03 ITS_SQUARE PIC 99.
       DFN> ;
       [Record is 3 bytes long.]
       DTR> DEFINE FILE FOR SQUARES;
       DTR> READY SQUARES WRITE
       DTR> DECLARE N PIC 99.
       DTR> N = 0
       DTR> WHILE N NE 10 STORE SQUARES USING
       CON> BEGIN
       CON>     NUMBER=N
       CON>     ITS_SQUARE = N * N
       CON>     N = N + 1
       CON> END
       DTR> FIND SQUARES
       [10 records found]
       DTR> PRINT ALL

               ITS
       NUMBER SQUARE

         0      00
         1      01
         2      04
         3      09
         4      16
         5      25
         6      36
         7      49
         8      64
         9      81

       DTR>

       The following example stores data from the WORKER domain into
       the expanded NEW_WORKER domain. These domains have duplicate
       elementary field names that are subordinate to different group
       field names. The example uses a FOR statement to control the
       STORE statement so that DEC DATATRIEVE stores the data from the
       elementary fields correctly. The record definitions and the STORE
       statement are as follows:

       DTR> SHOW WORK_REC
       RECORD WORK_REC USING
       01 WORK.
           03 LOCAL.
                05 CITY   PIC X(10).
                05 STATE  PIC X(2).
           03 REMOTE.
                05 CITY   PIC X(10).
                05 STATE  PIC X(2).
       ;
       DTR> SHOW NEW_WORK_REC
       RECORD NEW_WORK_REC USING
       01 WORK.
           03 NEW_LOCAL.
                05 CITY   PIC X(10).
                05 STATE  PIC X(2).
           03 NEW_REMOTE.
                05 CITY   PIC X(10).
                05 STATE  PIC X(2).
           03 NAME.
                05 FIRST PIC X(10).
                05 LAST  PIC X(15).
       ;
       DTR> READY NEW_WORKER WRITE
       DTR> FOR WORKER
       CON>   STORE NEW_WORKER USING
       CON>     BEGIN
       CON>       NEW_LOCAL = LOCAL
       CON>       NEW_REMOTE = REMOTE
       CON>     END
       DTR>

89  –  STORE Statement (for Oracle CODASYL DBMS and Relational Sources)

       Adds a new record to the database.

       Format

                { rdb-domain-name   }
                { rdb-relation-name }
         STORE  { dbms-domain-name  }
                {                   }
                { dbms-record-name  }

              [USING  statement-1]

              [VERIFY  [USING]  statement-2]

              [ [CURRENCY]  [context-name.]set-name-1  [,...] ]

89.1  –  Arguments

    rdb-domain-name

       Is the given name of the domain to contain the new relation.

    rdb-relation-name

       Is the name assigned to the relation when the database was
       created. The relation name can be the name of a view relation.

    dbms-domain-name

       Is the given name of the domain to contain the new record.

    dbms-record-name

       Is the name assigned to the record when the database was created
       and to the record which will be stored.

    USING statement-1

       Specifies a DEC DATATRIEVE statement that can store one value for
       one or more fields in the new record.

    VERIFY [USING] statement-2

       Specifies a statement DEC DATATRIEVE executes just before storing
       the new record.

    CURRENCY

       Is a keyword that is used only with Oracle CODASYL DBMS records
       or domains.

    context-name

       Is the name of a valid context variable or the name of a
       collection with a selected Oracle CODASYL DBMS record. It must
       identify a record that participates in the specified set. If the
       SYSTEM owns the set, you do not need to establish a context for
       the set. If the set is not owned by the SYSTEM and the context
       name is not present, DEC DATATRIEVE uses the most recent single
       record context of a domain with a record type that participates
       in the specified set type.

    set-name

       Is the name of a Oracle CODASYL DBMS set. The record being
       stored must be an AUTOMATIC member of that set. Use the CONNECT
       statement to connect the record to MANUAL insertion sets.

       It is not necessary to put SYSTEM-owned sets in the currency
       list. For all other AUTOMATIC sets, you must establish currency,
       but it is not necessary to put them in the currency list.

89.2  –  Examples

       The following example stores a new record in the relation JOB_
       HISTORY and makes the change permanent by entering a COMMIT
       statement:

       DTR> READY PERSONNEL USING JOB_HISTORY WRITE
       DTR> STORE JOB_HISTORY
       Enter DEPARTMENT_CODE: HENG
       Enter EMPLOYEE_ID: 78645
       Enter JOB_CODE: B-78
       Enter JOB_END: 021783
       Enter JOB_START: 052181
       DTR> COMMIT

       The following example adds a new COMPONENT record to the
       database. A valid context must be established for current records
       in the sets PART_USED_ON and PART_USES to store a COMPONENT. The
       STORE_COMP procedure prompts for values so that DEC DATATRIEVE
       knows which record you want to be current. The nested FOR loop
       establishes the context, and the CURRENCY clause translates DEC
       DATATRIEVE contexts into Oracle CODASYL DBMS currencies. After
       you enter your response to the last prompt for the values in a
       record, Oracle CODASYL DBMS automatically inserts the record into
       the specified set occurrences:

       DTR> DEFINE PROCEDURE STORE_COMP
       DFN> DECLARE USED_ON PIC X(8).
       DFN> DECLARE SUB_PART PIC X(8).
       DFN> SUB_PART = *."I.D. number of the component part"
       DFN> USED_ON = *."I.D. number of the part it is used on"
       DFN> FOR A IN PART WITH PART_ID = USED_ON
       DFN>     FOR B IN PART WITH PART_ID = SUB_PART
       DFN>         STORE COMPONENTS USING
       DFN>             BEGIN
       DFN>                 COMP_SUB_PART = SUB_PART
       DFN>                 COMP_OWNER_PART = USED_ON
       DFN>                 COMP_MEASURE = *."component measure"
       DFN>                 COMP_QUANTITY = *."quantity"
       DFN>             END CURRENCY A.PART_USED_ON , B.PART_USES
       DFN> END_PROCEDURE
       DTR>

90  –  SUM Statement

       Provides a summary of totals for one or more numeric fields in
       the current collection. The summary is sorted according to the
       values in one or more fields of the current collection. The
       summary includes subtotals for control groups. The summary can
       be written to a file or an output device.

       Format

                                        [    {file-spec  } ]
         SUM  print-list  BY  sort-list [ ON {*.prompt   } ]
                                        [    {           } ]

90.1  –  Arguments

    print-list

       Is a list of one or more numeric fields, other value expressions,
       and modifiers. The print list has the following format:

       {value-expression  [ {modifier} [...] ] }  [,...]

       The section on the PRINT statement describes the value
       expressions and modifiers you can use in a print list.

    sort-list

       Is a list of one or more sort keys that determine the order in
       which DEC DATATRIEVE presents the summary totals. An item in the
       sort list consists of the name of a field whose contents form
       the basis for the sort, preceded or followed by a keyword that
       determines the order DEC DATATRIEVE uses to sort the data.

       To specify the sort order for each sort key, use one of the
       following keywords:

       ASC[ENDING]

       DESC[ENDING]

       INCREASING

       DECREASING

       If you specify more than one sort key, use a comma to separate
       each sort key from the next.

    file-spec

       Is the file specification to which you want to write the output
       of the statement.

       A complete file specification has the following format:

       node-spec::device:[directory]file-name.type;version

    *.prompt-name

       Is the prompting value expression that prompts you for the
       file specification to which you want to write the output of the
       statement.

90.2  –  Example

       The following example forms a collection of yachts and uses the
       SUM statement to summarize the prices of yachts in the collection
       and to display the number of yachts built by each builder. Edit
       strings are used to format the values:

       DTR> READY YACHTS; FIND FIRST 6 YACHTS
       [6 records found]
       DTR> SUM 1 ("NUMBER"/"OF YACHTS") USING 9,
       CON>    PRICE USING $$$$,$$$ BY BUILDER

                     NUMBER             NUMBER
       MANUFACTURER OF YACHTS  PRICE   OF YACHTS  PRICE

        ALBERG          1      $36,951
        ALBIN           3      $64,000
        AMERICAN        2      $28,790
                                           6     $129,741

       DTR>

91  –  SYNCHRONIZED Clause

       Causes word boundary alignment of an elementary field.

       Format

         { SYNCHRONIZED } [ LEFT ]
         { SYNC         } [ RIGHT]
         {              } [      ]

91.1  –  Arguments

    LEFT

       Allows compatibility with DEC COBOL record definitions. DEC
       DATATRIEVE accepts the argument but ignores the boundary
       alignment specification that the field begin at the left boundary
       of the unit of storage the field occupies.

    RIGHT

       Allows compatibility with DEC COBOL record definitions. DEC
       DATATRIEVE accepts the arguments but ignores the boundary
       alignment specification that the field end at the right boundary
       of the unit of storage the field occupies.

91.2  –  Example

       This example shows the difference in storage allocation a SYNC
       clause can make. A field of USAGE type LONG occupies four bytes
       of storage (the equivalent of one longword):

       DTR> DEFINE RECORD NOSYNC_REC USING
       DFN> 01 TOP.
       DFN>    03 ONE PIC X.
       DFN>    03 TWO LONG.
       DFN> ;
       [Record is 5 bytes long.]
       DTR> DEFINE RECORD SYNC_REC USING
       DFN> 01 TOP.
       DFN>    03 ONE PIC X.
       DFN>    03 TWO SYNC RIGHT LONG.
       DFN> ;
       [Record is 8 bytes long.]
       DTR>

92  –  THEN Statement

       Joins two or more DEC DATATRIEVE statements into a compound
       statement.

       Format

         statement-1  {THEN  statement-2}  [...]

92.1  –  Argument

    statement

       Is a DEC DATATRIEVE statement.

92.2  –  Example

       The following example uses a THEN statement to join a PRINT
       statement and a MODIFY statement in a FOR loop:

       DTR> SET NO PROMPT
       DTR> READY YACHTS MODIFY
       DTR> FOR YACHTS WITH BUILDER EQ "ALBIN"
       CON>     PRINT THEN MODIFY

                                     LENGTH
                                      OVER
       MANUFACTURER   MODEL     RIG   ALL   WEIGHT BEAM  PRICE

        ALBIN       79         SLOOP  26     4,200  10  $17,900
       Enter MANUFACTURER: <CTRL/Z>
       Execution terminated by operator

       DTR>

93  –  USAGE Clause

       Specifies the internal format of a numeric field or specifies a
       date field.

       Format

                      { DISPLAY     }
                      { BYTE        }
                      { WORD        }
                      {             }
                      { LONG        }
                      { QUAD        }
                      {             }
                      {             }
                      { {COMP     } }
                      { {INTEGER  } }
                      { {         } }
                      {             }
                      { {COMP-1  }  }
                      { {        }  }
                      { {REAL    }  }
                      {             }
                      { {        }  }
                      { {COMP-2  }  }
                      { {DOUBLE  }  }
                      {             }
         USAGE  [IS]  {             }
                      { G_FLOATING  }
                      {             }
                      {             }
                      { H_FLOATING  }
                      {             }
                      { S_FLOATING  }
                      {             }
                      {             }
                      { T_FLOATING  }
                      {             }
                      {             }
                      { {COMP-3  }  }
                      { {PACKED  }  }
                      { {        }  }
                      {             }
                      { {COMP-5  }  }
                      { {        }  }
                      { {ZONED   }  }
                      {             }
                      {             }
                      { DATE        }

93.1  –  Arguments

    DISPLAY

       Indicates that each digit occupies one byte of storage. DISPLAY
       is the default if you do not include a USAGE clause.

    BYTE

       Indicates that field value is stored in binary format and that
       the value is stored in one byte of storage.

    WORD

       Indicates that field value is stored in binary format and that
       the value is stored in one word (two bytes) of storage.

    LONG

       Indicates that field value is stored in binary format and that
       the value is stored in one longword (four bytes) of storage.

    QUAD

       Indicates that field value is stored in binary format and that
       the value is stored in one quadword (eight bytes) of storage.

    COMP

       Indicates that the field value is stored in binary format.
       INTEGER is a synonym for COMP. The size of a COMP (or INTEGER)
       field depends on the number of digit positions specified in
       its PICTURE clause. You can avoid having both a USAGE IS COMP
       clause and a PICTURE clause by using the keywords WORD, LONG, and
       QUAD to specify the three types of storage allocation available
       with COMP. COMP Storage Allocation Types shows the COMP storage
       allocation types.

       Table 1-9 COMP Storage Allocation Types

                   Size of
       PIC Clause  Field      Alternate USAGE Type

       9(1) to     2 bytes    WORD
       9(4)
       9(5) to     4 bytes    LONG
       9(9)
       9(10) to    8 bytes    QUAD
       9(18)

    COMP-1

       Indicates that the field value is stored in single-precision
       real format. REAL is a synonym for COMP-1. COMP-1 fields are four
       bytes long and they correspond to the Oracle CDD/Repository F_
       floating-point data types.

    COMP-2

       Indicates that the field value is stored in double-precision real
       format. DOUBLE is a synonym for COMP-2. COMP-2 fields are eight
       bytes long and they correspond to the Oracle CDD/Repository D_
       floating-point data types.

    G_FLOATING

       Indicates that a field is an extended range 64-bit floating-point
       number with precision to approximately 15 decimal digits.

    H_FLOATING

       Indicates that a field is an extended range 128-bit floating-
       point number with precision to approximately 33 decimal digits.

    S_FLOATING

       Indicates that the field is a floating-point number accurate to
       approximately 7 decimal digits. An S_floating-point field is 4
       bytes long.

    T_FLOATING

       Indicates that the field is a floating-point number accurate to
       approximately 15 decimal digits. T_floating-point fields occupy 8
       contiguous bytes in memory.

    COMP-3

       Indicates that the field value is stored in packed-decimal
       format. PACKED is a synonym for COMP-3. The value is stored
       two digits per byte. The value of a COMP-3 field must contain
       a sign. The sign occupies the four low-ordered bits in the
       rightmost byte. The size of the field depends on the number of
       digit positions specified by the field's PICTURE clause:

                    size (in bytes) =  (digit-positions+1)__

                                                 2

       For example, a field with three digit positions is two bytes
       long. If the field contains an even number of digits, the size is
       rounded up. Thus, a 6-digit field is stored in four bytes.

    COMP-5

       Indicates that the field value is stored in signed decimal
       format. ZONED is a synonym for COMP-5. A value in a COMP-5 field
       is stored one digit per byte. Therefore, the size of a COMP-5
       field is the number of digit positions specified in its PICTURE
       clause.

       The sign of a COMP-5 value shares the rightmost byte with the
       lowest-valued digit of the value. The lowercase letters P through
       Y represent a negative sign for the values 0 through 9.

    DATE

       Indicates that the field is a date field.

93.2  –  Examples

       The following example defines the field SALE_PRICE as a REAL
       (COMP-1) field:

       05 SALE_PRICE PIC 9(5)
          USAGE REAL
          EDIT_STRING IS $(6).

       The following example defines the field SALE_DATE as a date
       field, to be printed in the default format for date fields:

       06 SALE_DATE USAGE IS DATE.

94  –  VALID IF Clause

       Validates a field value before it is stored in the record.

       Format

         VALID  IF  boolean-expression

94.1  –  Argument

    boolean-expression

       Is a DEC DATATRIEVE Boolean expression.

94.2  –  Examples

       The following example compares the value entered for the RIG
       field to the character strings SLOOP, KETCH, MS, and YAWL and
       stores the value in the field if it is one of those character
       strings:

       06 RIG PIC X(6)
              VALID IF RIG EQ "SLOOP", "KETCH", "MS", "YAWL".

       The following example stores a value in the LOA field if it is
       between 15 and 50:

       06 LENGTH_OVER_ALL PIC XXX
               VALID IF LOA BETWEEN 15 AND 50
               QUERY_NAME IS LOA.

       The following example stores a value in the PRICE field if it is
       greater than 1.3 times the displacement or if it is zero:

       06 PRICE PIC 99999
              VALID IF PRICE>DISP*1.3 OR PRICE EQ 0
              EDIT_STRING IS $$$,$$$.

95  –  WHILE Statement

       Causes DEC DATATRIEVE to repeat a statement as long as the
       condition specified in the Boolean expression is true.

       Format

         WHILE  boolean-expression statement

95.1  –  Arguments

    boolean-expression

       Is a Boolean expression. In the WHILE statement, Boolean
       expressions are limited to the following format:
       { variable-name }
       { *.prompt      } boolean-operator  value-expression
       {               }

    statement

       Is a simple or compound statement you want DEC DATATRIEVE to
       execute if the Boolean expression evaluates to true.

95.2  –  Example

       The following example groups the boats with LOA less than 35
       according to the value of BEAM and displays the TYPE, LOA, and
       BEAM of the shortest boat from each group of boats with the same
       value for BEAM:

       DTR> SHOW WHILE_EX
       PROCEDURE WHILE_EX
       BEGIN
       DECLARE X PIC 99.
       X = 0
       FOR YACHTS WITH LOA < 35 AND
           BEAM NE 0 SORTED BY BEAM, LOA
           WHILE X < BEAM
           BEGIN
               PRINT TYPE, LOA, BEAM, X
               X = BEAM
           END
       END
       END_PROCEDURE

       DTR> :WHILE_EX

                               LENGTH
                                OVER
       MANUFACTURER   MODEL     ALL   BEAM X

       CAPE DORY    TYPHOON     19     06  00
       WINDPOWER    IMPULSE     16     07  06
       ERICSON      23/ SPECIA  23     08  07
       EASTWARD     HO          24     09  08
       ALBIN        79          26     10  09
       BOMBAY       CLIPPER     31     11  10
       IRWIN        25          25     12  11

       DTR>

96  –  WITH FORM Statement

       Sends and receives data to and from a DECforms form. Control text
       items can be also sent and received.

       Format

         WITH_FORM  form-name  IN  file-name

           SEND FROM datatrieve-source [USING exchange-record] [,]

                           .              .          .

                           .              .          .

                           .              .          .

              TO decforms-name

           RECEIVE FROM decforms-name

              TO datatrieve-destination [USING exchange-record] [,]

                           .              .          .

                           .              .          .

                           .              .          .

           [SEND_CONTROL_TEXT send-control-item [,...]]

           [RECEIVE_CONTROL_TEXT receive-control-item [,...]]

96.1  –  Arguments

    form-name

       Is the name of the DECforms form in the form file. The form name
       is syntactically required but ignored when the file name is a
       .FORM file.

    file-name

       Is the DECforms file name. It can either be a .FORM or a .EXE
       file (the default file extension is .EXE). A complete file
       specification has the following format:

       node-spec::device:[directory]file-name.type;version

    decforms-name

       Is a DECforms record name or list name. A list is a DECforms
       structure. If a list name is specified as decforms-name, all the
       equivalent datatrieve-sources or datatrieve-destinations must be
       specified.

    datatrieve-source/datatrieve-destination

       Is the name of a DEC DATATRIEVE data element; a data element can
       be represented by a DEC DATATRIEVE record, by a group field, by a
       field, or by a variable. When datatrieve-source and datatrieve-
       destination can be used interchangeably, they are referred to as
       "DEC DATATRIEVE data element". The DEC DATATRIEVE data element
       can not be a COMPUTED BY field (for more information see the DEC
       DATATRIEVE Guide to Interfaces). When the decforms-name is a list
       name, specify a list of DEC DATATRIEVE data elements separated by
       commas.

    exchange-record

       Is the Oracle CDD/Repository path name of a record used to send
       and receive data with DECforms. It is an optional argument of the
       datatrieve-source and datatrieve-destination structures.

    send-control-item

       Is the input parameter (variable or string literal) that
       activates the proper actions defined by the user inside the .IFDL
       file. If you specify more than one input parameter, separate
       them with commas. Every control-item has to be from one to five
       characters long. For more details on how to build and use a SEND_
       CONTROL_TEXT see the DECforms documentation.

    receive-control-item

       Is a DEC DATATRIEVE variable previously declared which receives
       a text control item returned by the form. The content of the
       variable will be loaded by the form depending on the rules
       established by the user in the .IFDL file. If you specify more
       than one output parameter, separate them with commas. Every
       receive-control-item should be five characters long.

96.2  –  Example

       In the following example the WITH_FORM statement causes DEC
       DATATRIEVE to send records contained in the YACHTS domain to the
       form record named BOAT. The form responds to the send operation
       by displaying the form record data (one record at a time) on the
       screen.

       DTR> READY YACHTS
       DTR> FOR X IN YACHTS
       CON> WITH_FORM YACHT IN DTR$LIBRARY:FORMS
       CON> SEND FROM X TO BOAT;

97  –  Wombat

       Wombats are native Australian or Tasmanian mammals. Like many
       other antipodean animals, they have strange* reproductive
       habits (less so than the platypus which lays green eggs and is
       a monotreme). They also have constantly growing incisors allowing
       (nay, encouraging) them to chew on bark, wood, softer rocks,
       etc. (Wombats are friendly, loyal, nocturnal, and not overly
       intelligent. Sir Everard Home reports, "In captivity it is as
       a rule amiable, the amiability being possibly associated with
       stupidity." He probably woke it from a nap.)

       * strange to us-they wouldn't have it any other way.

       The family Vombatidae is divided into two groups: the naked nosed
       and the hairy nosed wombats. The naked nosed group constitutes
       the genus Vombatuis (or Phascolomis) and includes the Tasmanian
       wombat (V. Ursinus) from Tasmania and Flinders Island and the
       common Wombat (V. hirsutus) from south east Australia. These have
       coarse, harsh, blackish brown fur, a naked area on the muzzle,
       and short ears.

       The hairy nosed group contains Lasiorhinus latifrons from south
       Australia and wombatula gillespiei from southern Queensland.
       These species have silky grizzled gray fur, a hairy muzzle, and
       larger ears. The consequences of all this to wombat society is
       further complicated by the question of who has more ribs.

97.1  –  Advanced

       Wombats, particular

       Dante Gabriel Rossetti had a wombat who slept (during the day) in
       an epergne on the dining room table. He (the wombat) reappeared
       as a dormouse in Rev. Dodgson's book.

       Wombats, uses of

       live-conversation piece, alarm clock (third shift) dead-doormats;
       for food, see Wombats, food?

       Wombats, food

       grass, bark, leaves, fungi

       Epergne

       Who knows? ...clearly someplace wombats sleep.

       Marsupials

       Include bandicoots (which should be rabbits), koalas (which
       should be bears), tasmanian wolves (which should be coyotes),
       and wombats (which should be lethargic badgers). Pogo was a
       marsupial.

       Sexual habits

       These are of interest only to other wombats, and then only
       between April and June.

       Wombats, prehistoric

       Pleistocene Giant Wombat was as large as a rhinoceros.

       Wombats, food?

       Would you want to eat a doormat that ate bark and fungus?
Close Help