SAP-ABAP-740新语法解析中文版二:内表read的新语法

如果没有找到表行,则会引发异常CX_SY_ITAB_LINE_NOT_FOUND。没有sy-subrc。

先上测试代码,后续再讲解。

*&---------------------------------------------------------------------*
*& Report ZLQT_TEST
*&---------------------------------------------------------------------*
*&  测试数据用开发机也有的域值表DD07T ,用MARA表ATTYP物料種類物料种类对应的域值
*&---------------------------------------------------------------------*
REPORT ZLQT_TEST.

SELECT * FROM DD07T
  WHERE  DOMNAME = 'ATTYP'
  AND    DDLANGUAGE = '1'
  INTO   TABLE @DATA(LT_07T) .

DATA LV_INDEX TYPE SY-TABIX .

TRY .
  "1.读内表的第几行
  READ TABLE LT_07T INDEX 1 INTO DATA(LS_07T_BEFORE) . "740之前
  DATA(LS_07T_AFTER) = LT_07T[ 1 ].
  WRITE /: '1.读内表的第几行' ,  LS_07T_BEFORE ,   LS_07T_AFTER .
  CLEAR  :LS_07T_BEFORE,LS_07T_AFTER .

  "2.根据某个字段读内表
  READ TABLE LT_07T WITH KEY VALPOS = '0001' INTO LS_07T_BEFORE .  "READ TABLE LT_07T WITH TABLE KEY VALPOS = '0001' DDLANGUAGE = '1' INTO LS_07T_BEFORE.
  LS_07T_AFTER = LT_07T[ VALPOS = '0001' ] .                       "LS_07T_AFTER = LT_07T[ KEY key VALPOS = '0001' ] .
  WRITE /: '2.根据某个字段读内表' ,  LS_07T_BEFORE ,  LS_07T_AFTER .
  CLEAR  :LS_07T_BEFORE,LS_07T_AFTER .

  "3.判断read的记录是否存在
  READ TABLE LT_07T WITH KEY VALPOS = '0001' TRANSPORTING NO FIELDS .
  IF SY-SUBRC = 0.
    LV_INDEX = SY-TABIX .  "BEFOR:读到的是第几行
    WRITE /: 'BEFORE:判断read的记录是否存在'.
  ENDIF.
  IF LINE_EXISTS( LT_07T[ VALPOS = '0001' ] ).
    WRITE /: 'AFTER:判断read的记录是否存在' .
  ENDIF.

  "4.读到的是第几行
  READ TABLE LT_07T WITH KEY VALPOS = '0001' TRANSPORTING NO FIELDS .
  IF SY-SUBRC = 0.
    LV_INDEX = SY-TABIX .  "BEFOR:读到的是第几行
    WRITE /: 'BEFOR:读到的是第几行' &&  LV_INDEX .
  ENDIF.
  DATA(LV_INDE) = LINE_INDEX( LT_07T[ VALPOS = '0001' ] ) ."AFTER:读到的是第几行
    WRITE /: 'AFTER:读到的是第几行' &&  LV_INDE .
CATCH CX_SY_ITAB_LINE_NOT_FOUND .
  "如果没有找到表行,则会引发异常CX_SY_ITAB_LINE_NOT_FOUND。没有sy-subrc。
  MESSAGE '未找到数据' TYPE 'E' .
ENDTRY.

1.使用新语法时,TRY ... CATCH必不可少。否则在表行没数据是程序会直接dump.所以需要抓异常CX_SY_ITAB_LINE_NOT_FOUND。

代码中有740前后的差异,但如果不能使用二分法,有时候对效率的影响挺大的

所以我后续测试新语法能否对排序表及哈希表使用。

猜你喜欢

转载自blog.csdn.net/Qunending/article/details/110488154
今日推荐