Está en la página 1de 1

Catch

Descripción y ejemplos de la sentencia CATCH ... ENDCATCH para la captura de excepciones.

REPORT ZCATCH.

DATA:
A TYPE I,
B TYPE I,
C TYPE P.

* Dentro de un CATCH-ENDCATCH sólo se puede capturar UNA excepción (la


* que encuentre primero de la lista).
* Cuando se captura una excepción, asigna el SY-SUBRC y sale del bloque
* CATCH-ENDCATCH.
* ARITHMETIC_ERRORS y CONVERSION_ERRORS son las dos clases de excep-
* ciones genéricas (en Java serían las superclases) el resto son subcla-
* ses de ellas dos.
* Si en el CATCH contemplo sólo excepciones individuales puede que no
* capture el error. Si pongo las dos excepciones generales siempre cap-
* turaré el error pero perderé el detalle. Una solución sería poner las
* dos excepciones generales al final de la lista por si no encontrara la
* excepción individual que encuentre la general, evitando así el DUMP.
CATCH SYSTEM-EXCEPTIONS " Excepciones individuales
BCD_ZERODIVIDE = 1
BCD_OVERFLOW = 10
COMPUTE_LOG_ERROR = 2
ADDF_INT_OVERFLOW = 3
" Excepciones genéricas
ARITHMETIC_ERRORS = 4
CONVERSION_ERRORS = 5.

" La excepción 'BCD_ZERODIVIDE' sólo es capturada si el resultado, 'C',


" va a un dato de tipo P.
A = 10. B = 0.
C = A / B. " <--- BCD_ZERODIVIDE (sólo si C es de tipo P)

ENDCATCH.

CATCH SYSTEM-EXCEPTIONS
BCD_OVERFLOW = 10.

A = 99999999999999999999999999999. " <--- BDC_OVERFLOW

ENDCATCH.

Para call functions ver doc en KM sobre EXCEPTIONS ERROR_MESSAGE = 1.

También podría gustarte