我写了一段代码:

TYPE-POOLS: abap.
TABLES: sflight.
TYPES: BEGIN OF ty_sflight,
carrid TYPE s_carrid,
connid TYPE s_conn_id,
fldate TYPE sy-datum,
price TYPE s_price,
END OF ty_sflight.
DATA: gt_sflight TYPE STANDARD TABLE OF ty_sflight.
data: gs_sflight type ty_sflight.
DATA: go_strucdes TYPE REF TO cl_abap_structdescr.
DATA: gt_components TYPE abap_compdescr_tab WITH HEADER LINE.
START-OF-SELECTION.
SELECT carrid
connid
fldate
price
INTO CORRESPONDING FIELDS OF TABLE gt_sflight
UP TO 10 ROWS
FROM sflight.

go_strucdes ?= cl_abap_typedescr=>describe_by_data( gs_sflight ).
gt_components[] = go_strucdes->components[].
LOOP AT gt_components.
WRITE:/ gt_components-name,
gt_components-type_kind,
gt_components-length.
ENDLOOP.

 

如下几点要说明一下:

1.这里是调用describe_by_data方法获取内表信息,传入的是一个structure并非内表本身。

2.我们可以通过describe_by_name方法获取abap dictionary的表结构信息,传入一个表名或者structure名。

3.对于前两点,获取的长度和本身会不一致,这是unicode的原因,办法是在其基础上除以2。