ABAP异常处理
来源:互联网 发布:ubuntu压缩命令 编辑:程序博客网 时间:2024/05/18 06:18
1、异常分类
从sap 6.10开始,abap的异常分为两类:1)基于异常类的异常,2)非类异常。非类异常又分为系统定义异常(如:被0除异常)和用户自定义异常(用户自定义函数中由exception语句定义,raise语句产生的异常)。
异常有的是可以截获处理,用户可以截获做相应处理,系统将可以继续执行程序。如果用户不处理,系统将产生错误,并停止执行程序。有的异常为不可截获的错误异常,系统将直接产生错误,并停止执行程序。
2、异常处理语句
基于类异常相关语句:
a)TRY.
... guarded section
CATCH cx11 ... cx1n [INTO ex1].
... handlers for exceptions cx11 to cx1n
CATCH cx21 ... cx2m [INTO ex2].
... handlers for exceptions cx21 bis cx2m
... other handlers
CLEANUP.
... cleanup block
ENDTRY.
b)RAISE EXCEPTION TYPE class.
c)RAISING cx1 ... cxn
非类异常相关语句:
a)catch system-exceptions ARITHMETIC_ERRORS = 4.
....
endcatch.
c) raise (In function or method)
3、异常截获处理方法
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)
此异常处理sap建议使用try...endtry代替(错误和异常类对应关系参见第5部分)。
data RESULT type I.
catch system-exceptions ARITHMETIC_ERRORS = 4.
RESULT = 1 / 0.
endcatch.
if SY-SUBRC = 4.
...
endif.
4、代码样例
a)RAISING cx1 ... cxn
form adbc_exists_view using view_name type dd25l-viewname
changing subrc type sy-subrc
raising cx_sql_exception.
data: stmt type string,
ref type ref to data,
stmt_ref type ref to cl_sql_statement,
res_ref type ref to cl_sql_result_set,
cnt type sy-tabix.
subrc = 4.
create object stmt_ref.
get reference of view_name into ref.
stmt_ref->set_param( ref ).
stmt = 'select count(*) from user_views where view_name = ?'.
res_ref = stmt_ref->execute_query( stmt ).
* Host-Variable zur Ergebnisaufnahme zuordnen
get reference of cnt into ref.
res_ref->set_param( ref ).
res_ref->next( ).
if cnt = 1.
subrc = 0.
endif.
res_ref->close( ).
endform.
form exists_view using view_name type dd25l-viewname
changing subrc type sy-subrc.
try.
perform adbc_exists_view(sdb4fora)
using view_name
changing subrc.
catch cx_sql_exception.
subrc = 8.
endtry.
endform.
b)基于类的异常代码样例
5、错误与异常类对应关系
Exception group: ARITHMETIC_ERRORS
Class-based Exceptions Definition
Class-based Exceptions Implementation
Class main Definition
Class main Implementation
Defining Objects
Instance Creation
Calling Methods
(Associated superclass: CX_SY_ARITHMETIC_ERROR)
BCD_ZERODIVIDECX_SY_ZERODIVIDECOMPUTE_FLOAT_ZERODIVIDECX_SY_ZERODIVIDECOMPUTE_INT_ZERODIVIDECX_SY_ZERODIVIDEADDF_INT_OVERFLOWCX_SY_ARITHMETIC_OVERFLOWBCD_OVERFLOWCX_SY_ARITHMETIC_OVERFLOWCOMPUTE_BCD_OVERFLOWCX_SY_ARITHMETIC_OVERFLOWCOMPUTE_COSH_OVERFLOWCX_SY_ARITHMETIC_OVERFLOWCOMPUTE_EXP_RANGECX_SY_ARITHMETIC_OVERFLOWCOMPUTE_FLOAT_DIV_OVERFLOWCX_SY_ARITHMETIC_OVERFLOWCOMPUTE_FLOAT_MINUS_OVERFLOWCX_SY_ARITHMETIC_OVERFLOWCOMPUTE_FLOAT_PLUS_OVERFLOWCX_SY_ARITHMETIC_OVERFLOWCOMPUTE_FLOAT_TIMES_OVERFLOWCX_SY_ARITHMETIC_OVERFLOWCOMPUTE_INT_ABS_OVERFLOWCX_SY_ARITHMETIC_OVERFLOWCOMPUTE_INT_DIV_OVERFLOWCX_SY_ARITHMETIC_OVERFLOWCOMPUTE_INT_MINUS_OVERFLOWCX_SY_ARITHMETIC_OVERFLOWCOMPUTE_INT_PLUS_OVERFLOWCX_SY_ARITHMETIC_OVERFLOWCOMPUTE_INT_TIMES_OVERFLOWCX_SY_ARITHMETIC_OVERFLOWCOMPUTE_LOG10_ERRORCX_SY_ARITHMETIC_OVERFLOW, CX_SY_ARG_OUT_OF_DOMAINCOMPUTE_LOG_ERRORCX_SY_ARITHMETIC_OVERFLOW, CX_SY_ARG_OUT_OF_DOMAINCOMPUTE_MATH_OVERFLOWCX_SY_ARITHMETIC_OVERFLOWCOMPUTE_POW_RANGECX_SY_ARITHMETIC_OVERFLOWCOMPUTE_SINH_OVERFLOWCX_SY_ARITHMETIC_OVERFLOWCOMPUTE_ACOS_DOMAINCX_SY_ARG_OUT_OF_DOMAINCOMPUTE_ASIN_DOMAINCX_SY_ARG_OUT_OF_DOMAINCOMPUTE_ATAN_DOMAINCX_SY_ARG_OUT_OF_DOMAINCOMPUTE_COSH_DOMAINCX_SY_ARG_OUT_OF_DOMAINCOMPUTE_COS_DOMAINCX_SY_ARG_OUT_OF_DOMAINCOMPUTE_EXP_DOMAINCX_SY_ARG_OUT_OF_DOMAINCOMPUTE_MATH_DOMAINCX_SY_ARG_OUT_OF_DOMAINCOMPUTE_POW_DOMAINCX_SY_ARG_OUT_OF_DOMAINCOMPUTE_SINH_DOMAINCX_SY_ARG_OUT_OF_DOMAINCOMPUTE_SIN_DOMAINCX_SY_ARG_OUT_OF_DOMAINCOMPUTE_SQRT_DOMAINCX_SY_ARG_OUT_OF_DOMAINCOMPUTE_TANH_DOMAINCX_SY_ARG_OUT_OF_DOMAINCOMPUTE_COS_LOSSCX_SY_PRECISION_LOSSCOMPUTE_MATH_LOSSCX_SY_PRECISION_LOSSCOMPUTE_SIN_LOSSCX_SY_PRECISION_LOSSCOMPUTE_TAN_LOSSCX_SY_PRECISION_LOSSBCD_FIELD_OVERFLOWCX_SY_CONVERSION_OVERFLOWException group: CONVERSION_ERRORS
(Associated superclass: CX_SY_CONVERSION_ERROR)
BCD_FIELD_OVERFLOWCX_SY_CONVERSION_OVERFLOWCONVT_OVERFLOWCX_SY_CONVERSION_OVERFLOWCONVT_CODEPAGECX_SY_CONVERSION_CODEPAGECONVT_NO_NUMBERCX_SY_CONVERSION_NO_NUMBERBCD_OVERFLOWCX_SY_ARITHMETIC_OVERFLOWException 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_TYPECX_SY_CREATE_DATA_ERRORCREATE_DATA_NOT_ALLOWED_TYPECX_SY_CREATE_DATA_ERRORCREATE_DATA_LEN_NOT_ALLOWEDCX_SY_CREATE_DATA_ERRORCREATE_DATA_ILLEGAL_LENGTHCX_SY_CREATE_DATA_ERRORCREATE_DATA_ILLEGAL_DECIMALSCX_SY_CREATE_DATA_ERRORCREATE_DATA_ILLEGAL_INIT_SIZECX_SY_CREATE_DATA_ERRORException 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_FOUNDCX_SY_CREATE_OBJECT_ERRORCREATE_OBJECT_CLASS_ABSTRACTCX_SY_CREATE_OBJECT_ERRORCREATE_OBJECT_CREATE_PRIVATECX_SY_CREATE_OBJECT_ERRORCREATE_OBJECT_CREATE_PROTECTEDCX_SY_CREATE_OBJECT_ERRORException 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_NEGATIVECX_SY_RANGE_OUT_OF_BOUNDSDATA_LENGTH_NEGATIVECX_SY_RANGE_OUT_OF_BOUNDSDATA_LENGTH_0CX_SY_RANGE_OUT_OF_BOUNDSDATA_LENGTH_TOO_LARGECX_SY_RANGE_OUT_OF_BOUNDSDATA_OFFSET_LENGTH_TOO_LARGECX_SY_RANGE_OUT_OF_BOUNDSREFI_WRONG_SECTIONCX_SY_RANGE_OUT_OF_BOUNDSSTRING_OFFSET_NEGATIVECX_SY_RANGE_OUT_OF_BOUNDSSTRING_OFFSET_TOO_LARGECX_SY_RANGE_OUT_OF_BOUNDSSTRING_LENGTH_NEGATIVECX_SY_RANGE_OUT_OF_BOUNDSSTRING_LENGTH_TOO_LARGECX_SY_RANGE_OUT_OF_BOUNDSSTRING_OFFSET_LENGTH_TOO_LARGECX_SY_RANGE_OUT_OF_BOUNDSDATA_OFFSET_LENGTH_NOT_ALLOWEDCX_SY_OFFSET_NOT_ALLOWEDSince a subfield access can occur in almost all statements, no keywords can be assigned.
Exception group: DYNAMIC_CALL_METHOD_ERRORS
(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_ABSTRACTCX_SY_DYN_CALL_ILLEGAL_CLASSDYN_CALL_METH_CLASS_NOT_FOUNDCX_SY_DYN_CALL_ILLEGAL_CLASSDYN_CALL_METH_CLASSCONSTRUCTORCX_SY_DYN_CALL_ILLEGAL_METHODDYN_CALL_METH_CONSTRUCTORCX_SY_DYN_CALL_ILLEGAL_METHODDYN_CALL_METH_NOT_FOUNDCX_SY_DYN_CALL_ILLEGAL_METHODDYN_CALL_METH_NO_CLASS_METHODCX_SY_DYN_CALL_ILLEGAL_METHODDYN_CALL_METH_PRIVATECX_SY_DYN_CALL_ILLEGAL_METHODDYN_CALL_METH_PROTECTEDCX_SY_DYN_CALL_ILLEGAL_METHODDYN_CALL_METH_EXCP_NOT_FOUNDCX_SY_DYN_CALL_EXCP_NOT_FOUNDDYN_CALL_METH_PARAM_KINDCX_SY_DYN_CALL_ILLEGAL_TYPEDYN_CALL_METH_PARAM_LITL_MOVECX_SY_DYN_CALL_ILLEGAL_TYPEDYN_CALL_METH_PARAM_TAB_TYPECX_SY_DYN_CALL_ILLEGAL_TYPEDYN_CALL_METH_PARAM_TYPECX_SY_DYN_CALL_ILLEGAL_TYPEDYN_CALL_METH_PARAM_MISSINGCX_SY_DYN_CALL_PARAM_MISSINGDYN_CALL_METH_PARREF_INITIALCX_SY_DYN_CALL_PARAM_MISSINGDYN_CALL_METH_PARAM_NOT_FOUNDCX_SY_DYN_CALL_PARAM_NOT_FOUNDDYN_CALL_METH_REF_IS_INITIALCX_SY_REF_IS_INITIALThe following keywords are assigned to this exception group:
CALL METHOD
Exception group: FILE_ACCESS_ERRORS
(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_CLOSECX_SY_FILE_CLOSEDATASET_CANT_OPENCX_SY_FILE_OPENEXPORT_DATASET_CANNOT_OPENCX_SY_FILE_OPENDATASET_WRITE_ERRORCX_SY_FILE_IODATASET_READ_ERRORCX_SY_FILE_IOEXPORT_DATASET_WRITE_ERRORCX_SY_FILE_IODATASET_SEEK_ERRORCX_SY_FILE_POSITIONDATASET_NO_POSITIONCX_SY_FILE_POSITIONDATASET_READ_ONLYCX_SY_FILE_OPEN_MODEDATASET_NOT_OPENCX_SY_FILE_OPEN_MODEOPEN_DATASET_NO_AUTHORITYCX_SY_FILE_AUTHORITYOPEN_PIPE_NO_AUTHORITYCX_SY_FILE_AUTHORITYDATASET_TOO_MANY_FILESCX_SY_TOO_MANY_FILESDATASET_NO_PIPECX_SY_PIPES_NOT_SUPPORTEDException group: IMPORT_MISMATCH_ERRORS
(Common class: CX_SY_IMPORT_MISMATCH_ERROR)
This group contains runtime errors that may occur during the import of data
- from the ABAP memory,
- from the database,
- from the SHARED BUFFER, or
- from a file
if the type or the length of the data stored is not identical with that of the target type.
CONNE_IMPORT_WRONG_COMP_DECSCX_SY_IMPORT_MISMATCH_ERRORCONNE_IMPORT_WRONG_COMP_LENGCX_SY_IMPORT_MISMATCH_ERRORCONNE_IMPORT_WRONG_COMP_TYPECX_SY_IMPORT_MISMATCH_ERRORCONNE_IMPORT_WRONG_FIELD_DECSCX_SY_IMPORT_MISMATCH_ERRORCONNE_IMPORT_WRONG_FIELD_LENGCX_SY_IMPORT_MISMATCH_ERRORCONNE_IMPORT_WRONG_FIELD_TYPECX_SY_IMPORT_MISMATCH_ERRORCONNE_IMPORT_WRONG_OBJECT_TYPECX_SY_IMPORT_MISMATCH_ERRORCONNE_IMPORT_WRONG_STRUCTURECX_SY_IMPORT_MISMATCH_ERRORIMPORT_ALIGNMENT_MISMATCHCX_SY_IMPORT_MISMATCH_ERRORIMPORT_WRONG_END_POSCX_SY_IMPORT_MISMATCH_ERRORException 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_ALLOWEDCX_SY_LOCALIZATION_ERRORTEXTENV_INVALIDCX_SY_LOCALIZATION_ERRORTEXTENV_KEY_INVALIDCX_SY_LOCALIZATION_ERRORException 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_FAILURECX_SY_RMC_COMM_FAILURERMC_INVALID_STATUSCX_SY_RMC_INVALID_STATUSRMC_SYSTEM_FAILURECX_SY_RMC_SYSTEM_FAILURECALL METHOD
Not assigned to an exception group:
ASSIGN_CASTING_ILLEGAL_CASTCX_SY_ASSIGN_CAST_ILLEGAL_CASTASSIGN_CASTING_UNKNOWN_TYPECX_SY_ASSIGN_CAST_UNKNOWN_TYPEASSIGN_FIELD_NOT_IN_RANGECX_SY_ASSIGN_OUT_OF_RANGEDATASET_OFFSET_TOO_LARGECX_SY_FILE_POSITIONDYN_CALL_METH_NOT_IMPLEMENTEDCX_SY_DYN_CALL_ILLEGAL_METHODEXPORT_BUFFER_NO_MEMORYCX_SY_EXPORT_BUFFER_NO_MEMORYGENERATE_SUBPOOL_DIR_FULLCX_SY_GENERATE_SUBPOOL_FULLMOVE_CAST_ERRORCX_SY_MOVE_CAST_ERRORPERFORM_PROGRAM_NAME_TOO_LONGCX_SY_PROGRAM_NOT_FOUNDREPLACE_INFINITE_LOOPCX_SY_REPLACE_INFINITE_LOOP6、类异常类树
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
|
- ABAP异常处理
- ABAP异常处理
- abap--关于异常的处理
- abap--关于异常的处理
- abap--关于异常的处理
- abap--关于异常的处理
- abap异常处理--第一篇
- abap--关于异常的处理
- abap--关于异常的处理
- abap--关于异常的处理
- abap--关于异常的处理
- 【转】 ABAP中的异常处理
- ABAP异常
- SAP ABAP Exception handleing异常处理及使用
- SAP ABAP Exception handleing异常处理及使用
- ABAP中的异常处理 - TRY CATCH的使用实例
- abap对excel处理
- ABAP 字符串处理
- Java堆外内存的使用
- 一个简单的XML文档例子
- 【整理】C#中GridView隐藏指定列的方法
- 当你学不进去的时候,试试“普瑞马法则”
- 多个Tomcat应用的部署与启动
- ABAP异常处理
- parsererror:SyntaxError: Unexpected token { {stack: (...), message: "Unexpected token {"}
- [Java基础] final关键字
- 清除svn隐藏文件 mac
- Android 如何统一管理log日志,在发布版本时不输出任何日志信息。
- Word Ladder☆
- VI 删除行尾空格
- Ext Js(4.2)Grid
- AsyncSocket使用心得