ABAP 每日随笔 day2READTABLE

作者:SAPTAB 约 3 分钟阅读 更新日期:2025-03-02 1 年前更新 标签:ABAP, Data Engineering, 开发, 数据工程
ABAP 每日随笔 day2READTABL - 封面图
ABAP 每日随笔 day2READTABL - 封面图

原创 Tab [ SAP TAB ](javascript:void\(0\);)

点击上方 蓝字 :关注Tab 一起来学习SAP技术

今天学习一下内表的READ TABLE 表达式在ABAP 7.4之后的语法:

SELECT * FROM mara INTO TABLE @DATA(gt_mara)

UP TO 10 ROWS.

DATA gt_mara_sort TYPE SORTED TABLE OF mara WITH UNIQUE KEY primary_key

COMPONENTS matnr.

"旧语法

DATA LV_MATKL TYPE MARA-MATKL.

READ TABLE GT_MARA INDEX 1 INTO DATA(LS_MARA).
READ TABLE gt_mara_sort INTO DATA(ls_mara_sort1) INDEX 1 USING KEY

primary_key.

READ TABLE gt_mara_sort INTO DATA(ls_mara_sort2) WITH KEY matnr = 'AT001'.
IF SY-SUBRC EQ 0.

LV_MATKL = LS_MARA_SORT2-MATKL.

ENDIF.

"新语法

DATA(LS_MARA_NEW) = GT_MARA[ 1 ].

DATA(ls_mara_sort1_new) = gt_mara_sort1[ KEY primary_key INDEX 1 ].

"若是gt_mara_sort已经按照matnr排序,则按照二分法搜索

DATA(ls_mara_sort2_new) = gt_mara_sort2[ matnr = 'AT001' ].

DATA(LV_MATKL_NEW) =

GT_MARA_SORT2[ MATNR = 'AT001' ]-MATKL.

"检查是否存在某个数据

"旧语法

READ TABLE gt_mara TRANSPORTING NO FIELDS WITH KEY matnr = 'AT001'.

"新语法

CHECK line_exists( gt_mara[ matnr = 'AT001' ] ).

"得到数据在内表中的行

"旧语法

DATA lv_tabix TYPE sy-tabix.

READ TABLE gt_mara TRANSPORTING NO FIELDS WITH KEY matnr = 'AT001'.
IF sy-subrc EQ 0.
lv_tabix = sy-tabix.
ENDIF.

"新语法

DATA(lv_tabix_new) = line_index( gt_mara[ matnr = 'AT001' ] ).
ABAP 每日随笔 day2READTABL - 封面图
ABAP 每日随笔 day2READTABL - 封面图

**注意事项:** 若当GT_MARA 中不存在 matnr = 'AT001'的数据时, 直接执行

DATA (LS_MARA ) = GT_MARA[ MATNR = 'AT001' ] .

会使程序dump,所以一般写成如下的样子:

ASSIGN gt_mara[ matnr = 'AT001' ] TO FIELD-SYMBOL(<fs>).

IF sy-subrc EQ 0.

• ...

ENDIF.

\- TAB 学习技术 热爱生活

SAPTAB

关于作者:SAPTAB

企业信息化与 SAP 技术顾问,长期专注 SAP ABAP、FI/CO、MM、SD 等模块的技术分享与实战经验总结。查看更多介绍

来源说明:本文内容由「ABAP每日随笔day2READTABLE.md」整理生成,仅用于内部技术分享与学习交流。