ABAP READ内表新老语法对比

科技资讯 投稿 8300 0 评论

ABAP READ内表新老语法对比

1、读取内表行新语法

1.1、根据字段值查找

"-----------------------------@斌将军-----------------------------
"老语法
READ TABLE lt_acd INTO ls_acd WITH KEY rbukrs = gs_acd-rbukrs.
IF sy-subrc EQ 0.

ENDIF.

"新语法
ls_acd = lt_acd[ rbukrs = gs_acd-rbukrs ].
"-----------------------------@斌将军-----------------------------

1.2、按索引查找

"-----------------------------@斌将军-----------------------------
"老语法
READ TABLE lt_acd INTO ls_acd INDEX 1.
IF sy-subrc EQ 0.

ENDIF.

"新语法
ls_acd = lt_acd[ 1 ].
"-----------------------------@斌将军-----------------------------

1.3、判断记录是否存在

"-----------------------------@斌将军-----------------------------
"老语法
READ TABLE lt_acd WITH KEY rbukrs = gs_acd-rbukrs TRANSPORTING NO FIELDS.
IF sy-subrc EQ 0.

ENDIF.

"新语法
IF LINE_EXISTS( lt_acd[ rbukrs = gs_acd-rbukrs ] .
    
ENDIF.
"-----------------------------@斌将军-----------------------------

 1.4、获取行索引

"-----------------------------@斌将军-----------------------------
"老语法
READ TABLE lt_acd WITH KEY rbukrs = gs_acd-rbukrs TRANSPORTING NO FIELDS.
IF sy-subrc EQ 0.
WRITE:SY-TABIX.
ENDIF.

"新语法
LV_INDEX = LINE_INDEX( lt_acd[ rbukrs = gs_acd-rbukrs ] .
"-----------------------------@斌将军-----------------------------

需要特别注意的是,新语法必须用TRY CATCH,或在查询前,用LINE_EXISTS(判断是否存在,否则将会导致DUMP

TRY .
    ls_acd = lt_acd[ rbukrs = '333' ].
CATCH cx_sy_itab_line_not_found .
    MESSAGE '未找到数据' TYPE 'E' .
ENDTRY.

"或

IF line_exists( lt_acd[ rbukrs = '333' ] .
  ls_acd = lt_acd[ rbukrs = '333' ].
ELSE.
  MESSAGE '未找到数据' TYPE 'E'

编程笔记 » ABAP READ内表新老语法对比

赞同 (40) or 分享 (0)
游客 发表我的评论   换个身份
取消评论

表情
(0)个小伙伴在吐槽