关键词不能为空

当前您在: 主页 > 英语 >

作者:高考题库网
来源:https://www.bjmy2z.cn/gaokao
1970-01-01 08:00
tags:

-

2021年1月23日发(作者:iop)
中的异常处理

作者:
dyq_972

提交日期:
2008-4-15 9:39:00
|
分类
: |
访问量:
895


在平时的
ABAP
开发中 ,需要捕获的异常通常为两种,一种是执行
SQL
,比
如主键重复,
INSE RT
语句字段类型不匹配等。还有就是
RFC
的通信错误,比如
不能进行远程 连接等。通常可以这么处理:

1.
数据库异常:



DATA: lcx_error TYPE REF TO cx_root.



DATA i_tab LIKE TABLE OF spfli WITH HEADER LINE.


DATA err_text TYPE c LENGTH 1000.





TRY.


INSERT spfli FROM TABLE i_tab.


CATCH cx_sy_open_sql_db INTO lcx_error.


err_text = lcx_error->get_text( ).
得到错误信息



sy-subrc = 4.
改变系统变量



ENDTRY.





IF sy-subrc <> 0.


WRITE :/ '
数据更新失败!
'.


WRITE err_text.


ROLLBACK WORK.


ELSE.


WRITE :/ '
数据更新成功!
'.


COMMIT WORK.


ENDIF.

异常:

TRY.
CALL FUNCTION 'Z_DAQ_CALL_JCO'
DESTINATION 'ZJCOSERVER_DAQ'
EXPORTING
pv_empid = l_empid
IMPORTING
pv_rlt = l_rlt
TABLES
it_spfli = i_tab
EXCEPTIONS
system_failure = 1 MESSAGE err_text
communication_failure = 2 MESSAGE err_text.
ENDTRY.
IF SY-SUBRC <> 0.
WRITE: / '
调用
***
失败!
' , err_text.
ENDIF.

-------------------------------------
详细的信息可以参加下面的内容:

/CompassButton/archive/2007/04/03/
1
、异常分类


sap 6.10
开始,
aba p
的异常分为两类:
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部

)< br>。

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 class_exception
DEFINITION*-------------------------------------- --------------------
------------**
All
Exception
Class
must
inherit
from
Class
CX_ROOT
or
its
subclass*----------------------------------------- -------------------
----------*CLASS class_exception DEFINITION INHERITING FROM
cx_static_check. PUBLIC SECTION. METHODS write_SS.

Class-based Exceptions Implementation

*------------------------- -------------------------------------------
--* * CLASS class_exception
IMPLEMENTATION*------- -----------------------------------------------
----------------*CLASS
class_exception
IMPLEMENTATION.
METHOD
write_msg.
WRITE / 'Method of Class class_exception'. ENDMETHOD.

Class main Definition

*------------------------------------------------- -------------------
--** CLASS main
DEFINIT ION*---------------------------------------------- ------------
------------*CLASS
main
DEFINITION.
PUBLIC
SECTION.*
This
method
use
the
class exceptions class_exception* to deal with error. To do this we use
the statement RAISING METHODS action RAISING class_SS.

Class main Implementation

*------------------------- -------------------------------------------
--* * CLASS main
IMPLEMENTATION*------------------ ------------------------------------
---------- ------*CLASS main IMPLEMENTATION. METHOD action.* Here we're
raising an exception that should be Treated by* exception class
class_exception RAISE EXCEPTION TYPE class_exception. ENDMETHOD.

Defining Objects

DATA
o_exception
TYPE
REF
TO
class_
o_main
TYPE
REF
TO
main.
Instance Creation

START-OF-SELECTION. CREATE OBJECT o_main.
Calling Methods

*
The
statement
TRY
must
be
used
to
define
a
block
that
CATCH
the
exceptions
TRY.
o_main->action(
).*
The
Statement
CATCH
define
a
block
that
catches
the exceptions of the* exception class class_exception CATCH
class_exception. WRITE / 'Exception Caught'. ENDTRY.* The statement TRY
must be used to define a block that CATCH the exceptions TRY.
o_main->action( ).* The Statement CATCH define a block that catches the
exceptions
of
the*
exception
class
class_exception
CATCH
class_exception
INTO
o_exception.
WRITE
/
'Exception
Caught'.
o_exception->write_msg(
).
ENDTRY.


(Associated superclass: CX_SY_ARITHMETIC_ERROR)

BCD_ZERODIVIDE CX_SY_ZERODIVIDE
COMPUTE_FLOAT_ZERODIVIDE CX_SY_ZERODIVIDE
COMPUTE_INT_ZERODIVIDE CX_SY_ZERODIVIDE
ADDF_INT_OVERFLOW CX_SY_ARITHMETIC_OVERFLOW
BCD_OVERFLOW CX_SY_ARITHMETIC_OVERFLOW
COMPUTE_BCD_OVERFLOW CX_SY_ARITHMETIC_OVERFLOW
COMPUTE_COSH_OVERFLOW CX_SY_ARITHMETIC_OVERFLOW
COMPUTE_EXP_RANGE CX_SY_ARITHMETIC_OVERFLOW
COMPUTE_FLOAT_DIV_OVERFLOW CX_SY_ARITHMETIC_OVERFLOW
COMPUTE_FLOAT_MINUS_OVERFLOW CX_SY_ARITHMETIC_OVERFLOW
COMPUTE_FLOAT_PLUS_OVERFLOW CX_SY_ARITHMETIC_OVERFLOW
COMPUTE_FLOAT_TIMES_OVERFLOW CX_SY_ARITHMETIC_OVERFLOW
COMPUTE_INT_ABS_OVERFLOW CX_SY_ARITHMETIC_OVERFLOW
COMPUTE_INT_DIV_OVERFLOW CX_SY_ARITHMETIC_OVERFLOW
COMPUTE_INT_MINUS_OVERFLOW CX_SY_ARITHMETIC_OVERFLOW
COMPUTE_INT_PLUS_OVERFLOW CX_SY_ARITHMETIC_OVERFLOW
COMPUTE_INT_TIMES_OVERFLOW CX_SY_ARITHMETIC_OVERFLOW
COMPUTE_LOG10_ERROR
CX_SY_ARITHMETIC_OVERFLOW,
CX_SY_ARG_OUT_OF_DOMAIN
COMPUTE_LOG_ERROR CX_SY_ARITHMETIC_OVERFLOW, CX_SY_ARG_OUT_OF_DOMAIN
COMPUTE_MATH_OVERFLOW CX_SY_ARITHMETIC_OVERFLOW
COMPUTE_POW_RANGE CX_SY_ARITHMETIC_OVERFLOW
COMPUTE_SINH_OVERFLOW CX_SY_ARITHMETIC_OVERFLOW
COMPUTE_ACOS_DOMAIN CX_SY_ARG_OUT_OF_DOMAIN
COMPUTE_ASIN_DOMAIN CX_SY_ARG_OUT_OF_DOMAIN
COMPUTE_ATAN_DOMAIN CX_SY_ARG_OUT_OF_DOMAIN
COMPUTE_COSH_DOMAIN CX_SY_ARG_OUT_OF_DOMAIN
COMPUTE_COS_DOMAIN CX_SY_ARG_OUT_OF_DOMAIN
COMPUTE_EXP_DOMAIN CX_SY_ARG_OUT_OF_DOMAIN
COMPUTE_MATH_DOMAIN CX_SY_ARG_OUT_OF_DOMAIN
COMPUTE_POW_DOMAIN CX_SY_ARG_OUT_OF_DOMAIN
COMPUTE_SINH_DOMAIN CX_SY_ARG_OUT_OF_DOMAIN
COMPUTE_SIN_DOMAIN CX_SY_ARG_OUT_OF_DOMAIN
COMPUTE_SQRT_DOMAIN CX_SY_ARG_OUT_OF_DOMAIN
COMPUTE_TANH_DOMAIN CX_SY_ARG_OUT_OF_DOMAIN
COMPUTE_COS_LOSS CX_SY_PRECISION_LOSS
COMPUTE_MATH_LOSS CX_SY_PRECISION_LOSS
COMPUTE_SIN_LOSS CX_SY_PRECISION_LOSS
COMPUTE_TAN_LOSS CX_SY_PRECISION_LOSS
BCD_FIELD_OVERFLOW CX_SY_CONVERSION_OVERFLOW



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

-


-


-


-


-


-


-


-



本文更新与1970-01-01 08:00,由作者提供,不代表本网站立场,转载请注明出处:https://www.bjmy2z.cn/gaokao/553244.html
    上一篇:没有了
    下一篇:没有了

的相关文章