精通COBOL--16.3.3 输入过程中的异常处理

  CICS中的异常处理有很多种情况,此处主要只针对在输入过程中的异常处理。异常处理是通过在相应的CICS命令中使用RESP选项实现的。RESP选项后为一个8位长度的有符号数,用以表明异常的种类。例如,以下代码在输入数据大于指定长度时,将对所抛出的异常进行处理。处理方式为在屏幕上输出相应提示信息。代码如下:

IDENTIFICATION  DIVISION.

PROGRAM-ID.  RESPGM.

*

 ENVIRONMENT  DIVISION.

*

 DATA  DIVISION.

 WORKING-STORAGE  SECTION.

 01  WKFLDS.

     05   INLEN       PIC  S9(4)  USAGE  IS  COMP.

     05   ERR-CODE  PIC  S9(8)  COMP.

 01  INAREA.

     05   DATA-1   PIC X(5).

     05   FILLER   PIC XX.

     05   DATA-2   PIC X(5).

 ……

*

 PROCEDURE  DIVISION.

MOVE   12   TO  INLEN.

EXEC  CICS  RECEIVE  INTO(INAREA)

                         LENGTH(INLEN)

                         RESP(ERR-CODE)                            /*此处捕获异常*/

                         END-EXEC.

IF    ERR-CODE  =  DFHRESP(LENGERR)

     MOVE  ‘INPUT  DATA  TOO  LONG’  TO  MSG

EXEC  CICS  SEND     FROM(MSG)

                        LENGTH(20)

                        END-EXEC

……

    EXEC  CICS  RETURN  END-EXEC.

    GOBACK.

由以上代码可以看到,判断该异常的类型实际上是通过以下代码实现的:

IF    ERR-CODE  =  DFHRESP(LENGERR)

     ……

其中ERR-CODE是由用户定义的一个变量。该变量通过RESP选项可得到所抛出异常的编号。将该异常编号与CICS系统中的DFHRESP相应异常编号进行比较,便可判断出该异常的类型。除以上代码中出现的异常外,通常还有以下几种异常类型:

IF   ERR-CODE  =  DFHRESP(TERMERR)          /*终端错误异常*/

……

IF   ERR-CODE  =  DFHRESP(EOC)                     /*链结束(End of Chain)异常*/

     ……

IF   ERR-CODE  =  DFHRESP(ERROR)               /*错误异常*/

     ……

IF   ERR-CODE  =  DFHRESP(NORMAL)             /*无异常*/

     ……

需要注意的是,DFHRESPERROR)异常属于一种类型的异常,并不代表全部异常。判断一条CICS命令中存在任何异常,可以使用如下方式进行:

IF   ERR-CODE  NOT  EQUAL  DFHRESP(NORMAL)         /*当存在任何异常时,执行相关操作*/

     ……

你可能感兴趣的:(精通COBOL--16.3.3 输入过程中的异常处理)