文章目录
一、内表填充
1.内表/结构声明
*声明`st_airport`结构
TYPES: BEGIN OF st_airport,
airportid TYPE /dmo/airport_id,
name TYPE /dmo/airport_name,
END OF st_airport.
*基于`st_airport`声明`tt_airports`内表类型
TYPES tt_airports TYPE STANDARD TABLE OF st_airport
WITH NON-UNIQUE KEY airportid.
*基于`tt_airports`声明内表变量
DATA airports TYPE tt_airports.
*使用`like line of`关键字,基于内表`airports`声明结构
DATA airport2 LIKE LINE OF airports.
使用like line of关键字参考内表声明结构可以使结构和内表完全适配,即使内表结构发生改变,结构依然适配。
2.append to 填充内表
使用append关键字,将结构填充到内表中。
airport2 = VALUE #( airportid = 'abc' name = 'test' ).
APPEND airport2 TO airports.
对以上语句进行简化,省去中间结构赋值的操作。
APPEND VALUE #( airportid = 'abc' name = 'test' ) TO airports.
3.tbl = #value()
value关键字不仅可以给结构赋值,也可以直接给内表赋值。如下,将多个结构作为参数,赋值给内表,每个结构对应内表的一行数据。
airports = VALUE #(
( airportid = 'abc' name = 'test' )
( airportid = 'xyz' name = 'test1' )
).
4.CORRESPONDING
CORRESPONDING用于两个内表相互赋值,两表结构可以不同,字段自动匹配,未匹配的字段默认为字段类型的初值。
DATA airport_copy TYPE tt_airports.
airport_copy = CORRESPONDING #( airports ).
二、读取内表值
1.根据指定字段值获取
airport2 = airports[ airportid = 'abc' name = 'test' ].
*
如果匹配到多行,则取第一行
2.loop遍历查找
LOOP AT airports INTO airport2 WHERE airportid = 'xyz'.
ENDLOOP.
三、修改内表值
1.modify table from .
airport2 = airports[ airportid = 'abc' name = 'test' ].
airport2-name = 'txt'.
MODIFY TABLE airports FROM airport2.
2.modify from (index ).
通过modify
修改内表时,还可以修改指定位置的数据。注意modify
后没有table
关键字,而末尾要添加index
关机那字
airport2-name = 'txt'.
MODIFY airports FROM airport2 index 1.
四、在ABAP SQL中使用内表
内表变量可以直接用来存放ABAP SQL
的查询结果,只需要在INTO
关键字后添加TABLE
关键字标识。
DATA airports_full TYPE STANDARD TABLE OF /dmo/i_airport
WITH NON-UNIQUE KEY airportid.
SELECT
FROM /dmo/i_airport
FIELDS airportid, name, city, countrycode
WHERE city = 'London'
INTO TABLE @airports_full.
与结构在ABAP SQL
中的使用想类型,内表变量在ABAP SQL
中也支持@DATA
和CORRESPONDING
。
SELECT
FROM /dmo/i_airport
FIELDS airportid, name AS AirportName
WHERE city = 'London'
INTO TABLE @DATA(airports_inline).
out->write( data = airports_inline ).
SELECT
FROM /dmo/i_airport
FIELDS *
WHERE city = 'London'
INTO CORRESPONDING FIELDS OF TABLE @airports.
out->write( data = airports ).
总结
打完收工。