示例代码:
"test6
"secondary key
FORM f_test6.
DATA:lt_spfli TYPE TABLE OF spfli
WITH UNIQUE HASHED KEY k_hash COMPONENTS carrid connid countryfr
WITH NON-UNIQUE SORTED KEY k_sort COMPONENTS carrid connid.
SELECT * FROM spfli INTO TABLE lt_spfli.
"loop时使用
LOOP AT lt_spfli INTO DATA(ls_spfli) USING KEY k_sort WHERE carrid = 'AA' AND connid = '0001'.
ENDLOOP.
"read时使用
READ TABLE lt_spfli INTO ls_spfli WITH KEY k_sort COMPONENTS carrid = 'AA' connid = '0001'.
"当使用key读出记录需要更新时,必须使用对应key
"sy-tabix记录的值会被key影响
"更新时需要指定transporting字段,不能更新key值字段
MODIFY lt_spfli USING KEY k_sort FROM ls_spfli INDEX sy-tabix
TRANSPORTING countryfr.
ENDFORM.
1.16 Internal Table:Processing Internal Tables Using Expressions
示例代码:
"test7
"表达式访问内表
FORM f_test7.
DATA:lt_spfli TYPE TABLE OF spfli
WITH NON-UNIQUE SORTED KEY k_sort
COMPONENTS countryfr.
DATA:ls_spfli LIKE LINE OF lt_spfli.
DATA:lv_countryfr TYPE spfli-countryfr.
SELECT * FROM spfli INTO TABLE lt_spfli.
"line index从1开始
ls_spfli = lt_spfli[ 1 ].
WRITE:/ ls_spfli-carrid, ls_spfli-connid.
"匹配多笔,只返回第一笔记录
ls_spfli = lt_spfli[ carrid = 'AA' ].
WRITE:/ ls_spfli-carrid, ls_spfli-connid.
"使用key
ls_spfli = lt_spfli[ KEY k_sort COMPONENTS countryfr = 'DE' ].
WRITE:/ ls_spfli-carrid, ls_spfli-connid.
"访问结构字段
lv_countryfr = lt_spfli[ carrid = 'AA' ]-countryfr.
"通过line index访问行
* READ TABLE lt_spfli WITH KEY k_sort COMPONENTS countryfr = 'DE' TRANSPORTING NO FIELDS.
* LOOP AT lt_spfli INTO ls_spfli FROM sy-tabix.
* ENDLOOP.
"line_index()方法
"line_exists()方法
"需要line_exists先判断访问数据行是否存在,
"再使用line_index获取数据行
IF line_exists( lt_spfli[ KEY k_sort COMPONENTS countryfr = 'DE' ] ).
LOOP AT lt_spfli INTO ls_spfli
FROM line_index( lt_spfli[ KEY k_sort COMPONENTS countryfr = 'DE' ] ).
ENDLOOP.
ENDIF.
ENDFORM.
1.17 Internal Table:Creating Comprehensions And Reductions
简化内表循环处理;
数据汇总方法;
示例代码:
"test8
"Creating Comprehensions And Reductions
FORM f_test8.
DATA:lt_spfli TYPE TABLE OF spfli
WITH NON-UNIQUE SORTED KEY s_sort COMPONENTS countryfr.
DATA:lt_spfli2 TYPE TABLE OF spfli.
DATA:ls_spfli LIKE LINE OF lt_spfli.
TYPES:BEGIN OF s_ty1,
carrid TYPE spfli-carrid,
connid TYPE spfli-connid,
END OF s_ty1.
DATA:lt_ty1 TYPE TABLE OF s_ty1.
DATA:ls_ty1 LIKE LINE OF lt_ty1.
SELECT * FROM spfli INTO TABLE lt_spfli.
"使用MOVE-CORRESPONDING进行内表赋值
MOVE-CORRESPONDING lt_spfli TO lt_ty1.
"保留lt_ty1已有记录
"MOVE-CORRESPONDING lt_spfli TO lt_ty1 KEEPING TARGET LINES.
"如果有嵌套结构赋值
"MOVE-CORRESPONDING lt_spfli TO lt_ty1 EXPANDING NESTED TABLES.
"不使用Loop,获取内表部分行
lt_spfli2 = VALUE #( FOR wa IN lt_spfli
WHERE ( carrid = 'AA' )
( wa ) ).
"结合动态where条件,注意where两边括号不能有空格
DATA:lv_carrid TYPE string VALUE 'AZ'.
DATA:lv_connid TYPE string VALUE '0788'.
DATA:lv_where TYPE string.
lv_where = | CARRID = '{ lv_carrid }' AND CONNID = '{ lv_connid }' |.
WRITE:/ lv_where.
lt_spfli2 = VALUE #( FOR wa IN lt_spfli
WHERE (lv_where)
( wa ) ).
LOOP AT lt_spfli2 INTO DATA(ls_spfli2).
WRITE:/ ls_spfli2-carrid,ls_spfli2-connid.
ENDLOOP.
"通过REDUCE,进行数据汇总
DATA:lt_sflight TYPE TABLE OF sflight.
DATA:ls_sflight LIKE LINE OF lt_sflight.
TYPES:BEGIN OF s_ty2,
carrid TYPE sflight-carrid,
connid TYPE sflight-connid,
sum_occ TYPE i,
END OF s_ty2.
DATA:lt_sflight2 TYPE TABLE OF s_ty2.
DATA:lt_sflight3 TYPE TABLE OF s_ty2.
DATA:lv_occ_total TYPE I.
SELECT * FROM sflight INTO TABLE lt_sflight.
"加总所有seatsocc
lv_occ_total = REDUCE i( INIT i = 0
FOR ls_sflight2 IN lt_sflight
NEXT i = i + ls_sflight2-seatsocc
).
"根据carrid,connid分组汇总seatsocc
LOOP AT lt_sflight INTO ls_sflight
GROUP BY ( carrid = ls_sflight-carrid
connid = ls_sflight-connid
size = GROUP SIZE )
ASCENDING ASSIGNING FIELD-SYMBOL(<fs_sflight>).
lt_sflight2 = VALUE #( (
carrid = <fs_sflight>-carrid
co

最低0.47元/天 解锁文章
476

被折叠的 条评论
为什么被折叠?



