1、异常分类
sap的异常一般可以显式和隐式的产生,异常分两类。一类异常是可以截获处理,用户可以截获做相应处理,系统将可以继续执行程序。如果用户不处理,系统将产生错误,并停止执行程序。一类异常为不可截获的错误异常,系统将直接产生错误,并停止执行程序。
2、异常截获处理方法
Handling exceptions using/with exception classes 截获处理方法
data MYREF type ref to CX_SY_ARITHMETIC_ERROR.
data ERR_TEXT type STRING.
data RESULT type I.
try.
RESULT = 1 / 0.
catch cx_sy_arithmetic_error into MYREF.
ERR_TEXT = MYREF->GET_TEXT( ).
endtry.
Handling exceptions as catchable runtime errors (向后兼容6.10)
data RESULT type I.
catch system-exceptions ARITHMETIC_ERRORS = 4.
RESULT = 1 / 0.
endcatch.
if SY-SUBRC = 4.
...
endif.
3、错误与异常类对应关系
Exception group: ARITHMETIC_ERRORS
(Associated superclass: CX_SY_ARITHMETIC_ERROR)
Exception group: CONVERSION_ERRORS
(Associated superclass: CX_SY_CONVERSION_ERROR)
BCD_FIELD_OVERFLOW | CX_SY_CONVERSION_OVERFLOW |
CONVT_OVERFLOW | CX_SY_CONVERSION_OVERFLOW |
CONVT_CODEPAGE | CX_SY_CONVERSION_CODEPAGE |
CONVT_NO_NUMBER | CX_SY_CONVERSION_NO_NUMBER |
BCD_OVERFLOW | CX_SY_ARITHMETIC_OVERFLOW |
Exception group: CREATE_DATA_ERRORS
(Associated superclass: CX_SY_CREATE_ERROR)
This group contains runtime errors that may occur during the creation of data objects.
CREATE_DATA_UNKNOWN_TYPE | CX_SY_CREATE_DATA_ERROR |
CREATE_DATA_NOT_ALLOWED_TYPE | CX_SY_CREATE_DATA_ERROR |
CREATE_DATA_LEN_NOT_ALLOWED | CX_SY_CREATE_DATA_ERROR |
CREATE_DATA_ILLEGAL_LENGTH | CX_SY_CREATE_DATA_ERROR |
CREATE_DATA_ILLEGAL_DECIMALS | CX_SY_CREATE_DATA_ERROR |
CREATE_DATA_ILLEGAL_INIT_SIZE | CX_SY_CREATE_DATA_ERROR |
Exception group: CREATE_OBJECT_ERRORS
(Associated superclass: CX_SY_CREATE_ERROR)
This group contains runtime errors that may occur during the creation of objects.
CREATE_OBJECT_CLASS_NOT_FOUND | CX_SY_CREATE_OBJECT_ERROR |
CREATE_OBJECT_CLASS_ABSTRACT | CX_SY_CREATE_OBJECT_ERROR |
CREATE_OBJECT_CREATE_PRIVATE | CX_SY_CREATE_OBJECT_ERROR |
CREATE_OBJECT_CREATE_PROTECTED | CX_SY_CREATE_OBJECT_ERROR |
Exception group: DATA_ACCESS_ERRORS
(Associated superclass: CX_SY_DATA_ACCESS_ERROR)
This group contains runtime errors that may occur during subfield access (with offset/length) to data objects.
DATA_OFFSET_NEGATIVE | CX_SY_RANGE_OUT_OF_BOUNDS |
DATA_LENGTH_NEGATIVE | CX_SY_RANGE_OUT_OF_BOUNDS |
DATA_LENGTH_0 | CX_SY_RANGE_OUT_OF_BOUNDS |
DATA_LENGTH_TOO_LARGE | CX_SY_RANGE_OUT_OF_BOUNDS |
DATA_OFFSET_LENGTH_TOO_LARGE | CX_SY_RANGE_OUT_OF_BOUNDS |
REFI_WRONG_SECTION | CX_SY_RANGE_OUT_OF_BOUNDS |
STRING_OFFSET_NEGATIVE | CX_SY_RANGE_OUT_OF_BOUNDS |
STRING_OFFSET_TOO_LARGE | CX_SY_RANGE_OUT_OF_BOUNDS |
STRING_LENGTH_NEGATIVE | CX_SY_RANGE_OUT_OF_BOUNDS |
STRING_LENGTH_TOO_LARGE | CX_SY_RANGE_OUT_OF_BOUNDS |
STRING_OFFSET_LENGTH_TOO_LARGE | CX_SY_RANGE_OUT_OF_BOUNDS |
DATA_OFFSET_LENGTH_NOT_ALLOWED | CX_SY_OFFSET_NOT_ALLOWED |
Since a subfield access can occur in almost all statements, no keywords can be assigned.
(Associated superclass: CX_SY_DYN_CALL_ERROR)
This group contains runtime errors that may occur during a dynamic method call. These are normally errors that trigger a syntax error if the call is static.
DYN_CALL_METH_CLASS_ABSTRACT | CX_SY_DYN_CALL_ILLEGAL_CLASS |
DYN_CALL_METH_CLASS_NOT_FOUND | CX_SY_DYN_CALL_ILLEGAL_CLASS |
DYN_CALL_METH_CLASSCONSTRUCTOR | CX_SY_DYN_CALL_ILLEGAL_METHOD |
DYN_CALL_METH_CONSTRUCTOR | CX_SY_DYN_CALL_ILLEGAL_METHOD |
DYN_CALL_METH_NOT_FOUND | CX_SY_DYN_CALL_ILLEGAL_METHOD |
DYN_CALL_METH_NO_CLASS_METHOD | CX_SY_DYN_CALL_ILLEGAL_METHOD |
DYN_CALL_METH_PRIVATE | CX_SY_DYN_CALL_ILLEGAL_METHOD |
DYN_CALL_METH_PROTECTED | CX_SY_DYN_CALL_ILLEGAL_METHOD |
DYN_CALL_METH_EXCP_NOT_FOUND | CX_SY_DYN_CALL_EXCP_NOT_FOUND |
DYN_CALL_METH_PARAM_KIND | CX_SY_DYN_CALL_ILLEGAL_TYPE |
DYN_CALL_METH_PARAM_LITL_MOVE | CX_SY_DYN_CALL_ILLEGAL_TYPE |
DYN_CALL_METH_PARAM_TAB_TYPE | CX_SY_DYN_CALL_ILLEGAL_TYPE |
DYN_CALL_METH_PARAM_TYPE | CX_SY_DYN_CALL_ILLEGAL_TYPE |
DYN_CALL_METH_PARAM_MISSING | CX_SY_DYN_CALL_PARAM_MISSING |
DYN_CALL_METH_PARREF_INITIAL | CX_SY_DYN_CALL_PARAM_MISSING |
DYN_CALL_METH_PARAM_NOT_FOUND | CX_SY_DYN_CALL_PARAM_NOT_FOUND |
DYN_CALL_METH_REF_IS_INITIAL | CX_SY_REF_IS_INITIAL |
The following keywords are assigned to this exception group:
(Associated superclass: CX_SY_FILE_ACCESS_ERROR)
This group contains runtime errors that may occur during file access. Typical examples are if the system cannot find the file, if no more space is available to write or create the file, or if the authorization to access the file is missing.
DATASET_CANT_CLOSE | CX_SY_FILE_CLOSE |
DATASET_CANT_OPEN | CX_SY_FILE_OPEN |
EXPORT_DATASET_CANNOT_OPEN | CX_SY_FILE_OPEN |
DATASET_WRITE_ERROR | CX_SY_FILE_IO |
DATASET_READ_ERROR | CX_SY_FILE_IO |
EXPORT_DATASET_WRITE_ERROR | CX_SY_FILE_IO |
DATASET_SEEK_ERROR | CX_SY_FILE_POSITION |
DATASET_NO_POSITION | CX_SY_FILE_POSITION |
DATASET_READ_ONLY | CX_SY_FILE_OPEN_MODE |
DATASET_NOT_OPEN | CX_SY_FILE_OPEN_MODE |
OPEN_DATASET_NO_AUTHORITY | CX_SY_FILE_AUTHORITY |
OPEN_PIPE_NO_AUTHORITY | CX_SY_FILE_AUTHORITY |
DATASET_TOO_MANY_FILES | CX_SY_TOO_MANY_FILES |
DATASET_NO_PIPE | CX_SY_PIPES_NOT_SUPPORTED |
Exception group: IMPORT_MISMATCH_ERRORS
(Common class: CX_SY_IMPORT_MISMATCH_ERROR)
This group contains runtime errors that may occur during the import of data
if the type or the length of the data stored is not identical with that of the target type.
CONNE_IMPORT_WRONG_COMP_DECS | CX_SY_IMPORT_MISMATCH_ERROR |
CONNE_IMPORT_WRONG_COMP_LENG | CX_SY_IMPORT_MISMATCH_ERROR |
CONNE_IMPORT_WRONG_COMP_TYPE | CX_SY_IMPORT_MISMATCH_ERROR |
CONNE_IMPORT_WRONG_FIELD_DECS | CX_SY_IMPORT_MISMATCH_ERROR |
CONNE_IMPORT_WRONG_FIELD_LENG | CX_SY_IMPORT_MISMATCH_ERROR |
CONNE_IMPORT_WRONG_FIELD_TYPE | CX_SY_IMPORT_MISMATCH_ERROR |
CONNE_IMPORT_WRONG_OBJECT_TYPE | CX_SY_IMPORT_MISMATCH_ERROR |
CONNE_IMPORT_WRONG_STRUCTURE | CX_SY_IMPORT_MISMATCH_ERROR |
IMPORT_ALIGNMENT_MISMATCH | CX_SY_IMPORT_MISMATCH_ERROR |
IMPORT_WRONG_END_POS | CX_SY_IMPORT_MISMATCH_ERROR |
Exception group: LOCALIZATION_ERRORS
(Common class: CX_SY_LOCALIZATION_ERROR)
This group contains runtime errors that may occur when you switch to another text environment. Typical examples are if the required language is not allowed or if the system wants to switch to a character set which has not been released.
TEXTENV_CODEPAGE_NOT_ALLOWED | CX_SY_LOCALIZATION_ERROR |
TEXTENV_INVALID | CX_SY_LOCALIZATION_ERROR |
TEXTENV_KEY_INVALID | CX_SY_LOCALIZATION_ERROR |
Exception group: REMOTE_CALL_ERRORS
(Associated superclass: CX_SY_REMOTE_CALL_ERROR)
This group contains runtime errors that may occur during calls in remote systems (currently only CALL METHOD). Typical examples are network errors or the unexpected termination of the connection.
RMC_COMMUNICATION_FAILURE | CX_SY_RMC_COMM_FAILURE |
RMC_INVALID_STATUS | CX_SY_RMC_INVALID_STATUS |
RMC_SYSTEM_FAILURE | CX_SY_RMC_SYSTEM_FAILURE |
Not assigned to an exception group:
ASSIGN_CASTING_ILLEGAL_CAST | CX_SY_ASSIGN_CAST_ILLEGAL_CAST |
ASSIGN_CASTING_UNKNOWN_TYPE | CX_SY_ASSIGN_CAST_UNKNOWN_TYPE |
ASSIGN_FIELD_NOT_IN_RANGE | CX_SY_ASSIGN_OUT_OF_RANGE |
DATASET_OFFSET_TOO_LARGE | CX_SY_FILE_POSITION |
DYN_CALL_METH_NOT_IMPLEMENTED | CX_SY_DYN_CALL_ILLEGAL_METHOD |
EXPORT_BUFFER_NO_MEMORY | CX_SY_EXPORT_BUFFER_NO_MEMORY |
GENERATE_SUBPOOL_DIR_FULL | CX_SY_GENERATE_SUBPOOL_FULL |
MOVE_CAST_ERROR | CX_SY_MOVE_CAST_ERROR |
PERFORM_PROGRAM_NAME_TOO_LONG | CX_SY_PROGRAM_NOT_FOUND |
REPLACE_INFINITE_LOOP | CX_SY_REPLACE_INFINITE_LOOP |
CX_SY_ROOT
|
|--CX_STATIC_CHECK
|
|--CX_DYNAMIC_CHECK
| |
| |--CX_SY_ARITHMETIC_ERROR
| | |
| | |--CX_SY_ZERODIVIDE
| | |
| | |--CX_SY_ARITHMETIC_OVERFLOW
| | |
| | |--CX_SY_ARG_OUT_OF_DOMAIN
| | |
| | |--CX_SY_PRECISION_LOSS
| |
| |--CX_SY_ASSIGN_ERROR
| | |
| | |--CX_SY_ASSIGN_CAST_ERROR
| | | |
| | | |--CX_SY_ASSIGN_CAST_ILLEGAL_CAST
| | | |
| | | |--CX_SY_ASSIGN_CAST_UNKNOWN_TYPE
| | |
| | |--CX_SY_ASSIGN_OUT_OF_RANGE
| |
| |--CX_SY_CODEPAGE_CONVERTER_INIT
| |
| |--CX_SY_CONVERSION_ERROR
| | |
| | |--CX_SY_CONVERSION_OVERFLOW
| | |
| | |--CX_SY_CONVERSION_NO_NUMBER
| | |
| | |--CX_SY_CONVERSION_CODEPAGE
| | |
| | |--CX_SY_CONVERSION_BASE64
| | |
| | |--CX_SY_CONV_ILLEGAL_DATE_TIME
| |
| |--CX_SY_CREATE_ERROR
| | |
| | |--CX_SY_CREATE_OBJECT_ERROR
| | |
| | |--CX_SY_CREATE_DATA_ERROR
| |
| |--CX_SY_DATA_ACCESS_ERROR
| | |
| | |--CX_SY_RANGE_OUT_OF_BOUNDS
| | |
| | |--CX_SY_OFFSET_NOT_ALLOWED
| |
| |--CX_SY_DYN_CALL_ERROR
| | |
| | |--CX_SY_DYN_CALL_ILLEGAL_CLASS
| | |
| | |--CX_SY_DYN_CALL_ILLEGAL_FUNC
| | |
| | |--CX_SY_DYN_CALL_ILLEGAL_METHOD
| | |
| | |--CX_SY_DYN_CALL_PARAMETER_ERROR
| | |
| | |--CX_SY_DYN_CALL_EXCP_NOT_FOUND
| | |
| | |--CX_SY_DYN_CALL_ILLEGAL_TYPE
| | |
| | |--CX_SY_DYN_CALL_PARAM_MISSING
| | |
| | |--CX_SY_DYN_CALL_PARAM_NOT_FOUND
| |
| |--CX_SY_FILE_ACCESS_ERROR
| | |
| | |--CX_SY_FILE_AUTHORITY
| | |
| | |--CX_SY_FILE_CLOSE
| | |
| | |--CX_SY_FILE_IO
| | |
| | |--CX_SY_FILE_POSITION
| | |
| | |--CX_SY_FILE_OPEN_MODE
| | |
| | |--CX_SY_FILE_OPEN
| |
| |--CX_SY_GEN_SOURCE_TOO_WIDE
| |
| |--CX_SY_IMPORT_MISMATCH_ERROR
| |
| |--CX_SY_MOVE_CAST_ERROR
| |
| |--CX_SY_PROGRAM_NOT_FOUND
| |
| |--CX_SY_PROVIDE_EXCEPTION
| | |
| | |--CX_SY_PROVIDE_INTERVAL_OVERLAP
| | |
| | |--CX_SY_PROVIDE_TABLE_NOT_SORTED
| |
| |--CX_SY_READ_SRC_LINE_TOO_LONG
| |
| |--CX_SY_REF_IS_INITIAL
| |
| |--CX_SY_REPLACE_INFINITE_LOOP
| |
| |--CX_SY_SCAN_SOURCE_TOO_WIDE
| |
| |--CX_SY_SQL_ERROR
| | |
| | |--CX_SY_OPEN_SQL_ERROR
| | | |
| | | |--CX_SY_OPEN_SQL_DB
| | | |
| | | |--CX_SY_DYNAMIC_OSQL_ERROR
| | | |
| | | |--CX_SY_DYNAMIC_OSQL_SEMANTICS
| | | |
| | | |--CX_SY_DYNAMIC_OSQL_SYNTAX
| | |
| | |--CX_SY_NATIVE_SQL_ERROR
| |
| |--CX_SY_WRITE_SRC_LINE_TOO_LONG
|
|--CX_NO_CHECK
|
|--CX_SY_EXPORT_NO_SHARED_MEMORY
|
|--CX_SY_EXPORT_BUFFER_NO_MEMORY
|
|--CX_SY_GENERATE_SUBPOOL_FULL
|
|--CX_SY_LOCALIZATION_ERROR
|
|--CX_SY_NO_HANDLER
|
|--CX_SY_PIPES_NOT_SUPPORTED
|
|--CX_SY_PIPE_REOPEN
|
|--CX_SY_REMOTE_CALL_ERROR
| |
| |--CX_SY_RMC_COMM_FAILURE
| |
| |--CX_SY_RMC_INVALID_STATUS
| |
| |--CX_SY_RMC_SYSTEM_FAILURE
|
|--CX_SY_TOO_MANY_FILES