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.
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 |
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 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).
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.
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.
►►─── ON condition-name imperative-statement . ───────────────────────────────►◄
Tests for a nonzero status returned as a result of a DML command.
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.
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.
To establish a user-defined protocol, follow these steps:
For example, to create a version of the DC-BATCH protocol that does not include AUTOSTATUS, follow these steps:
ADD ATTRIBUTE DC-BATCH-NOAUTO WITHIN CLASS MODE.
ADD MODULE NAME DC-BATCH-NOAUTO VERSION 1 LANGUAGE IS COBOL
MODE IS DC-BATCH-NOAUTO MODULE SOURCE FOLLOWS . . . MSEND.
MODIFY RECORD SUBSCHEMA-CTRL VERSION 1 LANGUAGE COBOL
MODE IS DC-BATCH-NOAUTO.
PROTOCOL MODE IS DC-BATCH-NOAUTO
Copyright © 2014 CA.
All rights reserved.
|
|