HP 3000 Manuals

PATH [ HP Transact Reference Manual ] MPE/iX 5.0 Documentation


HP Transact Reference Manual

PATH 

Establishes a chained access path to a data set or a KSAM file.

Syntax 

PATH file-name[,option-list];

PATH uses the key and argument registers to establish a KSAM key in a
KSAM file or to establish a detail set for chained access.  If you do not
include a STATUS option in the PATH statement, the status register is set
to the number of entries in the chain of a detail set.  The number of
entries is not returned for a KSAM file.

You must use a PATH statement to establish the path for chained access to
a KSAM file or a data set when the STATUS option is included in a
subsequent data access statement.  The PATH verb cannot be used with MPE
files.

PATH performs file and key validations during program execution.  If the
attributes do not match the current database or file, an error message is
displayed.

Statement Parts 

file-name     The KSAM file or data set to be accessed.  If the data set
              is not in the home base as defined in the SYSTEM statement,
              the base name must be specified in parentheses as follows:

                   set-name(base-name)

              If you specify a set name and do not include the STATUS
              option, the status register is set to the number of entries
              in the data set chain; the status register will not contain
              the number of entries for a KSAM file.

option-list   One or more of the following fields, separated by commas:

              ERROR=label   Suppresses the default error return that
              ([item-       Transact normally takes.  Instead, the
              name])        program branches to the statement identified
                            by label, and Transact sets the list register
                            pointer to the data item item-name.  Transact
                            generates an error at execution time if the
                            item cannot be found in the list register.
                            The item-name must be a parent.

                            If you do not specify an item-name, as in
                            ERROR=label();, the list register is reset to
                            empty.  If you use an "*" instead of
                            item-name, as in ERROR=label(*);, then the
                            list register is not changed.  For more
                            information, see "Automatic Error Handling,"
                            in Chapter 7.

              LIST=         Used only with KSAM files to map out a
              (range-list)  record.  The list option is needed to locate
                            the key in the KSAM record.

                            For all options of range-list, the data items
                            selected are the result of scanning the data
                            items in the list register from top to
                            bottom, where top is the last or most recent
                            entry.  (See Chapter 4 for more information
                            on registers.)

                            All item names specified must be parent
                            items.

                            The LIST= option has a limit of 64
                            individually listed item names and a limit of
                            255 items specified by a range.

                            The options for range-list and the records
                            upon which they operate include the
                            following:

                            (item-name)   A single data item.

                            (item-nameX:  All the data items in the range
                            item-nameY)   from item-nameX through
                                          item-nameY. In other words, the
                                          list register is scanned for
                                          the occurrence of item-nameY 
                                          closest to the top of the list
                                          register.  From that entry, the
                                          list register is scanned for
                                          item-nameX. All data items
                                          between are selected.  An error
                                          is returned if item-nameX is
                                          between item-nameY and the top
                                          of the list register.

                                          Duplicate data items can be
                                          included or excluded from the
                                          range, depending on their
                                          position on the list register.
                                          For example, if range-list is
                                          A:D and the list register is as
                                          shown,

	       Click here to view figure.
            

                                          then data items A, B, C, D, and
                                          D are selected.

                            (item-        All data items in the range
                            nameX:)       from the last entry through the
                                          occurrence of item-nameX 
                                          closest to the top of the list
                                          register.

                            (:item-       All data items in the range
                            nameY)        from the occurrence of
                                          item-nameY closest to the top
                                          through the bottom of the list
                                          register.

                            (item-nameX,  The data items are selected
                            item-nameY,   from the list register.  For
                            ...           KSAM files, data items must be
                            item-nameZ)   specified in the order of their
                                          occurrence in the physical
                                          record.  This order need not
                                          match the order of the data
                                          items on the list register.
                                          This option incurs some system
                                          overhead.

                            (@)           Specifies a range of all data
                                          items of file-name as defined
                                          in a data dictionary.  The
                                          range-list is defined as
                                          item-name1:item-namen for the
                                          file.

                            (#)           Specifies an enumeration of all
                                          data items of file-name as
                                          defined in the data dictionary.
                                          The data items are specified in
                                          the order of their occurrence
                                          in the physical record or form
                                          as defined in the data
                                          dictionary.  This order need
                                          not match the order of the data
                                          items in the list register.

                            ( )           A null data item list.
                                          Operates on the file but does
                                          not retrieve any data.

              NOMSG         Suppresses the standard error message
                            produced by Transact as a result of a file or
                            database error.

              STATUS        Suppresses the action defined in Chapter 7
                            under "Automatic Error Handling." You will
                            need to add code to check the value of
                            STATUS. When STATUS is specified, the effect
                            of a PATH statement is described by the value
                            in a 32-bit integer status register:

   Status                  Meaning 
  Register 
   Value 

     0       The PATH operation was successful.

     -1      A KSAM end-of-file condition
             occurred.

     >0      For a description of the condition
             that occurred, refer to the database
             or KSAM file system error
             documentation that corresponds to
             the value.

                            Note that when STATUS is omitted, the status
                            register contains a -1 if the argument value
                            for a PATH operation on a detail set is not
                            found in the associated master set.  (See
                            Table 8-2 for other status register values.)

Examples 

The following example uses a PATH statement to locate the head of a KSAM
chain, and then retrieves the first item in that chain.

     LIST DEL-WORD:
          CUST-NO:
          LAST-NAME:
          FIRST-NAME:
          INITIAL;
     PROMPT(KEY) CUST-NO ("Enter Customer Number");
                                            <<Set up key/arg registers       >>
     PATH KFILE,                            <<Locate head of chain in KFILE  >>
          LIST=(DEL-WORD:INITIAL);          <<Map KFILE record               >>
     IF STATUS <> 0 THEN
       GET(CHAIN) KFILE,                    <<Retrieve first record          >>
          STATUS,
          LIST=(DEL-WORD:INITIAL);

The next example uses a PATH statement to determine the number of records
in a detail set.

     PROMPT(PATH) CUST-NO;
     PATH CUST-DETAIL;
     LET (NUM-RECS) = STATUS;
     DISPLAY NUM-RECS, NOHEAD:
             "Records in this Path";

PATH is required before you use the STATUS option in a database access
statement because the STATUS option suppresses the usual determination of
a chain head.  In the following example, the PATH statement is needed
prior to the FIND(CHAIN) statement that includes a STATUS option:

     SET(KEY) LIST(CUST-NO);
     PATH CUST-DETAIL;
     GET-NEXT:
     FIND(CHAIN) CUST-DETAIL,
          LIST=(CUST-NO:ZIP),
          STATUS,
          PERFORM=PROCESS-ENTRY;
     IF STATUS <> 0 THEN
        GO TO ERROR-ROUTINE
     ELSE
        GO TO GET-NEXT;

Note that the STATUS option also suppresses the normal multiple retrieval
performed by FIND; you must specifically code the loop logic.



MPE/iX 5.0 Documentation