This section covers the following topics:
With a few exceptions Natural provides all of the functionality of third generation language programming in the DL/I environment.
However, accessing DL/I data using Natural is significantly different from programming techniques used in a third generation language. Natural application programmers do not have to code specific DL/I calls or build the segment search arguments (SSAs). They do not need to concern themselves with PCB mask information or keep track of PCB positioning between Syncpoints.
Natural for DL/I operates as a standard DL/I application and although most of the DL/I call processing is done internally, it is important to realize that all of the required DL/I processing is still performed:
PSBs are scheduled and terminated, PCBs are selected for use, database
                       positioning is maintained, SSAs are created, the most efficient DL/I calls are
                       issued, PCB mask information is evaluated, GET HOLD
                       calls are issued before update or delete operations.
               
These tasks are all being performed for the application by Natural.
It is important to note that Natural is performing these tasks based on
                       the information available in the application program. If, for example, a
                       READ or FIND statement in a program is lacking
                       essential segment search information, Natural selects a PCB, builds an SSA and
                       issues a certain DL/I call based on this lacking information.
               
The Natural programmers use the same Natural statements to manipulate data in DL/I as they would for VSAM, Adabas or DB2.
Natural accesses DL/I segments based on the Natural DDM which is being referenced. Since the data access is always for one specific segment type (the one defined by the DDM), Natural neither issues path calls nor unqualified calls; that is, calls where the segment name is not specified.
Anmerkungen:
LOG, STAT
                           and GSCD call functions are not supported for the
                           IMS TM environment.
                  This section mainly consists of information also contained in the Natural Statements documentation, where each Natural statement is described in detail, including notes on DL/I usage where applicable. Summarized below are the particular points a programmer has to bear in mind when using Natural statements with DL/I.
Any Natural statement not mentioned in this section can be used without restrictions with DL/I.
The Natural statement BACKOUT
                              TRANSACTION is used to back out all database updates
                        performed during the current logical transaction.
               
How the statement is translated and which command is actually issued depends on the TP-monitor environment:
Under CICS, the BACKOUT TRANSACTION statement is
                                translated into an EXEC CICS ROLLBACK command.
                                However, in pseudo-conversational mode (PSEUDO=ON), only changes
                                made to the database since the last terminal I/O are undone. This is due to
                                CICS-specific transaction processing.
                     
In batch mode and under IMS TM, Natural for DL/I issues
                                ROLB calls without checking the
                                CMPAT setting in the corresponding NSB. However, under
                                IMS TM, only changes made to the database since the last terminal I/O are
                                undone. This is due to IMS TM-specific transaction processing.
                     
Because PSB scheduling is terminated by a Syncpoint/checkpoint request,
                        Natural saves the PCB position before executing the BACKOUT
                           TRANSACTION statement. Before the next command execution, Natural
                        reschedules the PSB and tries to set the PCB position as it was before the
                        backout.
               
Anmerkung:
 The PCB position might be shifted forward if any pointed segment
                           had been deleted in the time period between the BACKOUT
                              TRANSACTION and the following statement.
                  
The Natural statement DELETE is used to delete a
                        segment from a DL/I database, which also deletes all descendants of the
                        segment.
               
The DL/I AIX fields can be displayed with the Natural statement
                        DISPLAY only if a PCB
                        is used with the AIX specified in the parameter PROCSEQ.
                        If not, an error message is returned by Natural for DL/I at runtime.
               
The Natural statement END
                              TRANSACTION indicates the end of a logical transaction and
                        releases all DL/I data locked during the transaction. All data modifications
                        are committed and made permanent.
               
How the statement is translated and which command is actually issued depends on the TP-monitor environment:
Under CICS, the END TRANSACTION statement is translated
                                into an EXEC CICS SYNCPOINT command.
                     
In batch mode and non-message-driven BMP environments, Natural for
                                DL/I issues CHKP calls without checking the
                                CMPAT setting in the corresponding NSB.
                     
In MPP and message-driven BMP environments, the END
                                   TRANSACTION statement is not translated into a
                                CHKP call, but is ignored, because
                                CHKP calls imply GU calls. As Natural is a
                                conversational transaction, you must reply to the terminal before requesting
                                the next message (that is, before issuing the next
                                GU call). An implicit end-of-transaction is issued
                                after each terminal I/O.
                     
Because PSB scheduling is terminated by a
                        SYNCPOINT/CHECKPOINT
                        request, Natural saves the PCB position before executing the END
                           TRANSACTION statement. Before the next command execution, Natural
                        reschedules the PSB and tries to set the PCB position as it was before the
                        END TRANSACTION statement.
               
Anmerkung:
 The PCB position might be shifted forward if any pointed segment
                           had been deleted in the time period between the END TRANSACTION
                           and the following command.
                  
With batch-oriented BMP regions, user data can be checkpointed on the
                        IMS system log data sets. This is done by supplying an 8-byte checkpoint ID as
                        the first operand in the END TRANSACTION statement, and by
                        specifying the areas to be checkpointed as additional operands.
               
If the database specified with the Natural profile parameter
                        ETDB is not
                        the same as the database affected by the transaction, the first operand of the
                        END TRANSACTION statement will be used as checkpoint ID for the
                        ETDB database, while NATDLICK will be used as checkpoint ID for
                        the other database not specified with the
                        ETDB
                        parameter.
               
The total area to be checkpointed must not exceed 1992 bytes; see also Symbolic Checkpoint/Restart Functions.
With DL/I, the Natural FIND statement is typically used
                        when a specific search criterion is known and specific segments are to be
                        retrieved. This issues a DL/I GET UNIQUE call.
                        However, if the FIND statement specifies a lower level segment and
                        is within an active READ
                        or FIND loop for an ancestor segment, it generally results in a
                        DL/I GET NEXT WITHIN PARENT call.
               
The FIND statement initiates loop processing, which is
                        active until all segment occurrences which match the search criterion have been
                        read.
               
When accessing a field starting after the last byte of the given segment occurrence, the storage copy of this field is filled according to its format (numeric, blank, etc.).
FIND
                              FIRST, FIND
                              NUMBER and FIND UNIQUE are not
                        permitted. The PASSWORD,
                        CIPHER,
                        COUPLED
                        and RETAIN
                        clauses are not permitted either.
               
In the WITH clause, you can
                        only use descriptors that are defined as key fields in DL/I and marked with
                        "D" in the DDM.
               
When connecting search criteria, the following has to be observed:
| [NOT] | 
 |  
                                          basic-search-criterion | 
 | 
 | 
 |  
                                          | 
 | search-expression | 
 | 
 | 
Connecting search criteria for segment type A results in multiple qualification statements within one DL/I segment search argument (SSA). Connecting search criteria for segment types A and B results in multiple SSAs. Therefore, the Boolean operator OR cannot be used to combine search criteria for different segment types.
The Natural statement GET
                              TRANSACTION DATA retrieves checkpoint data saved by an
                        END
                              TRANSACTION statement. The first parameter of this statement
                        must be an 8-byte checkpoint ID. The remaining operands must be listed in the
                        same sequence, length and format as in the corresponding END
                           TRANSACTION statement; see also
                        Symbolic
                           Checkpoint/Restart Functions.
               
The Natural statement READ should be used to process a
                        set of segment occurrences in sequential order and usually results in a DL/I
                        GET NEXT call.
               
When the READ statement is used, segments are retrieved
                        based on the sequence field of the root segment or based on a secondary index
                        field. Since the READ statement initiates sequential access of the
                        database, it is important to understand that the EQUAL
                           TO clause means the same thing as the STARTING FROM clause;
                        it initiates a sequential read loop beginning with the key value specified.
               
The READ statement initiates loop processing. A loop is
                        active until all segment occurrences which match the search criterion have been
                        read.
               
The PASSWORD and CIPHER clauses are not
                        permitted.
               
IN PHYSICAL
                              SEQUENCE is used to read records in the order in which they
                        are physically stored in a database. The physical sequence is the default
                        sequence.
               
Anmerkung:
 This is only valid when using Natural with HDAM databases.
                  
BY ISN is
                        not valid when using Natural with DL/I.
               
For Natural, the descriptor used must be either the sequence field of
                        the root segment or a secondary index field. If a secondary index field is
                        specified, it must also be specified in the PROCSEQ
                        parameter of a PCB. Natural uses this PCB and the corresponding hierarchical
                        structure to process the database.
               
The Natural statement RELEASE is not applicable for
                        DL/I usage, since it releases sets of records retained by a
                        FIND statement that
                        contained a RETAIN clause, which
                        is not valid when using Natural with DL/I.
               
The Natural statement STORE can be used to add a
                        segment occurrence.
               
If the segment occurrence is defined with a primary key, a value for the primary key field must be provided.
In the case of a GSAM database, records must be added at the end of the database (due to GSAM restrictions).
The USING/GIVING
                              NUMBER clause is not valid when using Natural with DL/I.
               
If the SET/WITH clause
                        is used, the following applies with Natural for DL/I:
               
Values must be provided for the segment sequence field and for all sequence fields of the ancestors.
Only I/O (sensitive) fields can be provided.
A segment of variable length is stored with the minimum length
                                necessary to contain all fields as specified with the STORE
                                statement. The segment length will never be less than the minimum size
                                specified in the SEGM macro of the DBD.
                     
If a multiple-value field or a periodic group is defined as variable
                                in length, at the end of the segment only the occurrences as specified in the
                                STORE statement are written to the segment and define the segment
                                length.
                     
The Natural statement UPDATE can be used to update a
                        segment in a DL/I database. The segment length is increased (if necessary) to
                        accommodate all fields specified with the UPDATE statement. If a
                        multiple-value field or a periodic group is defined as variable in length, only
                        the occurrences as specified in the UPDATE statement are written
                        to the segment.
               
The DL/I AIX field name cannot be used in an UPDATE
                        statement. AIX fields, however, can be updated by referring to the source field
                        which comprises the AIX field.
               
DL/I sequence fields cannot be updated because of DL/I restrictions.
If the SET/WITH clause
                        is used, only I/O (sensitive) fields can be provided. A segment sequence field
                        cannot be updated (DELETE and
                        STORE must be used
                        instead).
               
Due to GSAM restrictions, the UPDATE statement cannot be
                        used for GSAM databases.
               
With the Natural statement WRITE, the DL/I AIX fields can be
                        displayed only if a PCB is used with the AIX specified in the parameter
                        PROCSEQ. If not, an error message is returned by Natural
                        for DL/I at runtime.
               
The following Natural statements are not available for DL/I users:
With DL/I, the following restrictions apply to the following Natural system variables:
As there is no DL/I equivalent to Adabas internal sequence numbers
                        (ISNs), the system variable *ISN is not
                        available with Natural for DL/I.
               
With Natural for DL/I, the Natural system variable
                        *NUMBER
                        does not contain the number of segment occurrences found. It contains
                        0 if no segment occurrence satisfies the search criterion and a
                        value of 8,388,607=X'7FFFFF' if at least one segment occurrence
                        satisfies the search criterion.