Previous Topic: Major DC Status CodesNext Topic: Precompiler-Directive Statements


Minor DC Status Codes

Minor Code

Function Status

00

Combined with a major code of 00, this code indicates either successful completion of the DML function or that all tested resources have been enqueued.

01

The requested operation cannot be performed immediately; waiting will cause a deadlock.

02

Either there is insufficient storage in the storage pool or the storage required for control blocks is unavailable.

03

The scratch area ID cannot be found.

04

Either the queue ID (header) cannot be found or a paging session was in progress when a second STARTPAGE command was received (that is, an implied ENDPAGE was processed before this STARTPAGE was executed successfully).

05

The specified scratch record ID or queue record cannot be found.

06

No resource control element (RCE) exists for the queue record; currency has not been established.

07

Either an I/O error has occurred or the queue upper limit has been reached.

08

The requested resource is not available.

09

The requested resource is available.

10

New storage has been assigned.

11

A maximum task condition exists.

12

The named task code is invalid.

13

The named resource cannot be found.

14

The requested module is defined as nonconcurrent and is currently in use.

15

The named module has been overlaid and cannot be reloaded immediately.

16

The specified interval control element (ICE) address cannot be found.

17

The record has been replaced.

18

No printer terminals have been defined for the current DC system.

19

The return area is too small; data has been truncated.

20

An I/O, program-not-found, or potential-deadlock status condition exists.

21

The message destination is undefined, the long term ID cannot be found, or a KEEP LONGTERM request was issued by a nonterminal task.

22

A record already exists for the scratch area specified.

23

No storage or resource control element (RCE) could be allocated for the reply area.

24

The maximum number of outstanding replies has been exceeded.

25

An attention interrupt has been received.

26

There is a logical error in the output data stream.

27

A permanent I/O error has occurred.

28

The terminal dial-up line is disconnected.

29

An invalid parameter has been passed in the list set up by the DML processor.

30

The named function has not yet been implemented.

31

An invalid parameter has been passed; the TRB, LRB, or MRB contains an invalid field; or the request is invalid because of a possible logic error in the application program. In a DC-BATCH environment, a possible cause is that the record length specified by the command exceeds the maximum length based on the packet size.

32

The derived length of the specified variable storage is negative or zero.

33

Either the named table or the named map cannot be found in the data dictionary load area.

34

The named variable-storage area must be an 01-level entry in the LINKAGE SECTION.

35

A GET STORAGE request is invalid because the LINKAGE SECTION variable has already been allocated.

36

The program either was not defined during system generation or is marked out-of-service.

37

A GET STORAGE operand is invalid because the specified variable storage area is in the WORKING-STORAGE SECTION instead of the LINKAGE SECTION.

38

Either no GET STORAGE operand was specified or the specified LINKAGE SECTION variable has not been allocated.

39

The terminal device being used is out of service.

40

NOIO has been specified but the datastream cannot be found.

41

An IF operation resulted in a valid true condition.

42

The named map does not support the terminal device in use.

43

A line I/O session has been cancelled by the terminal operator.

44

The referenced field does not participate in the specified map; a possible cause is an invalid subscript.

45

An invalid terminal type is associated with the issuing task.

46

A terminal I/O error has occurred.

47

The named area has not been readied.

48

The run unit has not been bound.

49

NOWAIT has been specified but WAIT is required.

50

Statistics are not being kept.

51

A lock manager error occurred during the processing of a KEEP LONGTERM request

52

The specified table is missing or invalid.

53

An error occurred from a user-written edit routine.

54

Either there is invalid internal data or a data conversion error has occurred.

55

The user-written edit routine cannot be found.

56

No DFLDS have been defined for the map.

57

The ID cannot be found, is not a long-term permanent ID, or is being used by another run unit.

58

Either the LRID cannot be found, the maximum number of concurrent task threads was exceeded, or an attempt was made to rollback database changes in local mode.

59

An error occurred in transferring the KEEP LONGTERM request to IDMSKEEP

60

The requested KEEP LONGTERM lock id was already in use with a different page group

63

Invalid function parameters have been passed on the call to the DBMS.

64

No detail exists currently for update; no action has been taken. Alternatively, the requested node for a header or detail is either not present or not updated.

68

There are no more updated details to MAP IN or the amount of storage defined for pageable maps at sysgen is insufficient. In the latter case, subsequent MAP OUT DETAIL statements are ignored.

72

No detail occurrence, footer, or header fields exist to be mapped out by a MAP OUT RESUME command, or the scratch record that contains the requested detail could not be accessed. The latter case is a mapping internal error and should be reported.

76

The first screen page has been transmitted to the terminal.

77

Either the program is no longer signed on to the subschema or the variable subschema tables have been overwritten.

80

The target node is either not active or has been disabled.

97

An error was encountered processing a syncpoint request; check the log for details.

98

An unsupported COBOL compiler option (for example, DEBUG) has been specified for an online program or a program running in a batch region has issued a DML verb that is only valid when running online under CA IDMS/DC/UCF.

99

An unexpected internal return code has been received; the terminal device is out of service.

Note: For a complete description of DC runtime status codes, see the chapter "CA IDMS Status Codes" in the Messages and Codes Guide.

ERROR-STATUS Condition Names

Code

Condition name

Explanation

0000

DB-STATUS-OK

No error

0307

DB-END-OF-SET

End of set, area, or SPF index

0326

DB-REC-NOT-FOUND

No record found

0001 to

9999

ANY-ERROR-STATUS

Any nonzero status

0000 to

9999

ANY-STATUS

Any status

3101 3201

3401 3901

DC-DEADLOCK

Waiting will cause a deadlock

3202 3402

DC-NO-STORAGE

Insufficient space available

4303

DC-AREA-ID-UNK

ID cannot be found

4404

DC-QUEUE-ID-UNK

Queue header cannot be found

4305 4405

DC-REC-NOT-FOUND

Record cannot be found

3908

DC-RESOURCE-NOT-AVAIL

Resource not available

3909

DC-RESOURCE-AVAIL

Resource is available

3210

DC-NEW-STORAGE

New space allocated

3711

DC-MAX-TASKS

Maximum attached tasks

4317

DC-REC-REPLACED

Record has been replaced

4319 4419

4519 4719

DC-TRUNCATED-DATA

Return area too small; data has been truncated

4525 4625

DC-ATTN-INT

Attention interrupt received

4743

DC-OPER-CANCEL

Session cancelled

Error Detection

The value returned to the ERROR-STATUS field must be checked after each DML request. When using the Logical Record Facility, you should check the LR-STATUS field of the LRC block before checking the ERROR-STATUS field.

CA IDMS provides three aids for error detection: the IDMS-STATUS routine, the AUTOSTATUS protocols, and the USER-DEFINED protocols. Each of these aids is described below.

IDMS-STATUS Routine

IDMS-STATUS is an error-checking routine included in the dictionary. You can copy IDMS-STATUS into your program by coding the following statement at the end of the PROCEDURE DIVISION:

COPY IDMS IDMS-STATUS.

For more information on the use of the COPY IDMS IDMS-STATUS statement, refer to Precompiler-Directive Statements.

IDMS-STATUS Routine Used Under Batch

The following code is copied into batch programs by the COPY IDMS IDMS-STATUS statement:

******************************************************************
 IDMS-STATUS                                              SECTION.
******************************************************************
 IDMS-STATUS-PARAGRAPH.
         IF DB-STATUS-OK GO TO ISABEX.
         PERFORM IDMS-ABORT.
         DISPLAY '**************************'
                 ' ABORTING - ' PROGRAM-NAME
                 ', '           ERROR-STATUS
                 ', '           ERROR-RECORD
                 ' **** RECOVER IDMS ****'
                 UPON CONSOLE.
         DISPLAY 'PROGRAM NAME ------ ' PROGRAM-NAME.
         DISPLAY 'ERROR STATUS ------ ' ERROR-STATUS.
         DISPLAY 'ERROR RECORD ------ ' ERROR-RECORD.
         DISPLAY 'ERROR SET --------- ' ERROR-SET.
         DISPLAY 'ERROR AREA -------- ' ERROR-AREA.
         DISPLAY 'LAST GOOD RECORD -- ' RECORD-NAME.
         DISPLAY 'LAST GOOD AREA ---- ' AREA-NAME.
         MOVE 39  TO SSC-IN01-REQ-CODE.
         MOVE 0   TO SSC-IN01-REQ-RETURN.
         MOVE ' ' TO SSC-STATUS-LABEL.
         PERFORM IDMS-STATUS-LOOP
                 UNTIL SSC-IN01-REQ-RETURN > 0.
         ROLLBACK.
         CALL 'ABORT'.
         GO TO ISABEX.
 IDMS-STATUS-LOOP.
         CALL 'IDMSIN1' USING IDBMSCOM(41)
                              SSC-IN01-REQ-WK
                              SUBSCHEMA-CTRL
                              IDBMSCOM(1)
                              DML-SEQUENCE
                              SSC-STATUS-LINE.
         IF SSC-IN01-REQ-RETURN GREATER THAN 4
             DISPLAY 'DML SEQUENCE ------ ' DML-SEQUENCE
         ELSE
             DISPLAY SSC-STATUS-LABEL '--- ' SSC-STATUS-VALUE.
 ISABEX. EXIT.

IDMS-STATUS Routine Used Under a DC/UCF System

The following code is copied into DC/UCF programs by the COPY IDMS IDMS-STATUS statement:

******************************************************************
 IDMS-STATUS                       SECTION.
********************* IDMS-STATUS FOR IDMS/DC ********************
     IF DB-STATUS-OK GO TO ISABEX.
     PERFORM IDMS-ABORT.
     MOVE ERROR-STATUS TO SSC-ERRSTAT-SAVE
     MOVE DML-SEQUENCE TO SSC-DMLSEQ-SAVE
     SNAP FROM SUBSCHEMA-CTRL TO SUBSCHEMA-CTRL-END
          ON ANY-STATUS
                 NEXT SENTENCE.
     ABEND CODE SSC-ERRSTAT-SAVE
          ON ANY-STATUS
                 NEXT SENTENCE.
 ISABEX. EXIT.

IDMS-STATUS abends your program if the ERROR-STATUS field contains a nonzero value. Because some values do not indicate processing errors, your program should check ERROR-STATUS for nonzero values before calling IDMS-STATUS.

Pageable Map ERROR-STATUS Condition Names

The following table lists the condition names that are automatically included when using pageable maps.

Note: You cannot make checks for these codes within the IDMS-STATUSroutine.

Code

Condition name

Explanation

4604

DC-SECOND-STARTPAGE

Second consecutive STARTPAGE

4664

DC-DETAIL-NOT-FOUND

No current detail

4668

DC-NO-MORE-UPD-DETAILS

All details mapped in

4668

DC-MAX-SPACE-REACHED

Pageable map space exceeded

4672

DC-NO-DETAILS

Nothing to map out

4676

DC-FIRST-PAGE-SENT

First page transmitted

4680

DC-PAGE-READY

A complete map page was built

When IDMS-STATUS executes, it exits immediately if the error-status check indicates successful completion of the function (ERROR-STATUS of 0000).

Effects of Nonzero Status on IDMS-STATUS

This section describes the effects of nonzero status conditions on IDMS-STATUS execution. The effects depend on the operating mode (BATCH or IDMS-DC) of the application program.

Effect When the Operating Mode Is BATCH

When the operating mode is BATCH, a nonzero error status causes IDMS-STATUS to:

The status information retrieved from the IDMS-DB communications block includes program name, error status, error record, error set, error area, record name (the last record successfully accessed), area name (the last area successfully accessed), page number and line index of the dbkey (the last record accessed by the run unit), dbkey in hexadecimal format, page group and database-key format (associated with the last record accessed by the run unit), and the DML sequence number.

Effect When the Operating Mode Is IDMS-DC

When the operating mode is IDMS-DC, a nonzero error status causes IDMS-STATUS to:

The status information retrieved from the IDMS-DC communications block includes program name, error status, error record, error set, error area, record name (the last record successfully accessed), area name (the last area successfully accessed), and the DML sequence number.

IDMS-STATUS includes a call to perform a routine named IDMS-ABORT, which you can use for additional error processing. CA IDMS supplies only the PERFORM statement; if the IDMS-ABORT routine is to be used, you must supply the routine itself by coding the section name and exit as shown below:

IDMS-ABORT SECTION.
IDMS-ABORT-EXIT.
  EXIT.

For example, you can use the IDMS-ABORT SECTION to display information regarding the LRC block as shown below:

IDMS-ABORT SECTION.
    IF LR-STATUS = 'LR-ERROR'
      DISPLAY 'LOGICAL RECORD ERROR'
          'LR NAME -- ' LR-NAME
          'LR VERB -- ' LR-VERB.
IDMS-ABORT-EXIT.
    EXIT.

A routine can be coded directly into the program or copied in as a module, according to the requirements of the program. However, if no abort routine is to be performed, the reference to IDMS-ABORT must be deleted from IDMS-STATUS by the DBA.

AUTOSTATUS Protocols

The precompiler automatically generates a PERFORM IDMS-STATUS statement after each DML command (except IF) if the protocol in use includes AUTOSTATUS. For each standard protocol (for example BATCH or CICS) provided at installation time, an AUTOSTATUS protocol (for example BATCH-AUTOSTATUS or CICS-AUTOSTATUS) is also provided. (The IDMS DC and DC-BATCH protocols already include AUTOSTATUS.) The DBA determines which protocol should be used; you must specify this protocol in the ENVIRONMENT DIVISION by means of the MODE IS statement (for more information on protocols, see Precompiler-Directive Statements).

When AUTOSTATUS is in use, the PERFORM IDMS-STATUS statement can still be preceded by a check for a nonzero return code by including an ON clause at the end of the DML command. If the DBMS returns the specified status code to the IDMS communications block, the imperative statement included in the ON clause is executed; if the status code tested for is not returned, IDMS-STATUS is performed.

Any DML command can include an ON clause; only one ON clause is allowed per command.

Syntax
►►─── ON condition-name imperative-statement . ───────────────────────────────►◄
Parameters
ON parameter

Tests for a nonzero status returned as a result of a DML command.

condition-name

A preassigned nonzero status condition name. Valid condition names include DB-STATUS-OK, DB-END-OF-SET, DB-REC-NOT-FOUND, ANY-ERROR-STATUS, and any condition names defined by the DBA.

imperative-statement

Specifies the program action to be taken if the nonzero status identified by condition-name results from the DML command.

The example below illustrates use of the ON clause. A DML source program might contain the following statements:

0800-OBTAIN-REC.
  OBTAIN CALC OFFICE ON DB-REC-NOT-FOUND GO TO 0900-NO-REC.
         .
         .
         .
0900-NO-REC.
  STORE OFFICE.

The precompiler converts the DML statements to comments, translates the ON clause into an IF statement, and generates the following expanded COBOL source code:

 0800-OBTAIN-REC.
*  OBTAIN CALC OFFICE ON DB-REC-NOT-FOUND
         MOVE 0001 TO DML-SEQUENCE
         CALL 'IDMS' USING SUBSCHEMA-CTRL
                  IDBMSCOM (32)
                  SR450
                  IDBMSCOM (43)
         IF NOT DB-REC-NOT-FOUND PERFORM IDMS-STATUS;
         ELSE
                      GO TO 0900-NO-REC.
          .
          .
          .

 0900-NO-REC.
*  STORE OFFICE.
         MOVE 0002 TO DML-SEQUENCE
         CALL 'IDMS' USING SUBSCHEMA-CTRL
                  IDBMSCOM (42)
                  SR450
          PERFORM IDMS-STATUS.

For further details on the expansion of calls to CA IDMS, see CA IDMS Call Formats.

USER-DEFINED Protocols

To establish a user-defined protocol, follow these steps:

  1. Establish a uniquely named user-defined MODE.
  2. Identify an existing CA supplied protocol that meets the program's requirements, and use this protocol, with modifications as needed, to create a new protocol with the same name as the user-defined MODE.
  3. Modify the appropriate SUBSCHEMA-CTRL record definition to include the user-defined MODE.
  4. Specify the user-defined MODE in the PROTOCOL parameter of the program.

For example, to create a version of the DC-BATCH protocol that does not include AUTOSTATUS, follow these steps:

  1. Define the user-defined MODE:
    ADD ATTRIBUTE DC-BATCH-NOAUTO WITHIN CLASS MODE.
    
  2. Define the user-defined protocol based on the CA supplied DC-BATCH protocol, editing the DC-BATCH protocol to remove the @AUTOSTATUS references:
    ADD MODULE NAME DC-BATCH-NOAUTO VERSION 1 LANGUAGE IS COBOL
    
        MODE IS DC-BATCH-NOAUTO
        MODULE SOURCE FOLLOWS
             .
             .
             .
        MSEND.
    
  3. Modify the SUBSCHEMA-CTRL record for MODE IS DC-BATCH to include the user-defined MODE:
    MODIFY RECORD SUBSCHEMA-CTRL VERSION 1 LANGUAGE COBOL
    
        MODE IS DC-BATCH-NOAUTO.
    
  4. Specify the user-defined MODE in the program:
    PROTOCOL MODE IS DC-BATCH-NOAUTO