一段创建动态内表和动态select数据库表的abap程序。
逻辑如下:
1,通过 cl_abap_tabledescr=>create()创建动态内表
2,通过动态Select语句抽取数据库表数据
3,ALV显示
完整代码:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | REPORT ztest_dyn_select. PARAMETERS p_name TYPE rsrd1-tbma_val. DATA: lr_struc  TYPE REF TO cl_abap_structdescr,       lr_data   TYPE REF TO cl_abap_datadescr,       lr_table  TYPE REF TO cl_abap_tabledescr,       dyn_table TYPE REF TO data,       dyn_wa    TYPE REF TO data. DATA:l_tabname TYPE tabname. FIELD-SYMBOLS: <dyn_table> TYPE STANDARD TABLE,                <dyn_wa>    TYPE any. l_tabname = p_name. lr_struc ?= cl_abap_typedescr=>describe_by_name( l_tabname ). lr_table ?= cl_abap_tabledescr=>create( p_line_type = lr_struc ). CREATE DATA dyn_wa    TYPE HANDLE lr_struc. CREATE DATA dyn_table TYPE HANDLE lr_table. ASSIGN dyn_wa->*    TO <dyn_wa>. ASSIGN dyn_table->* TO <dyn_table>. SELECT * INTO CORRESPONDING FIELDS OF TABLE <dyn_table>        UP TO 100 ROWS      FROM (l_TABNAME). CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'   EXPORTING     i_structure_name = l_TABNAME   TABLES     t_outtab         = <dyn_table>   EXCEPTIONS     program_error    = 1     OTHERS           = 2. IF sy-subrc <> 0.   MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno           WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. | 
运行:
输入表T000,运行,

表T000的数据显示成ALV,与SE11中的结构一致。

表T000结构:

以上。


发表评论