[代码]动态创建内表和动态Select语句例子

一段创建动态内表和动态select数据库表的abap程序。

逻辑如下:

1,通过 cl_abap_tabledescr=>create()创建动态内表

2,通过动态Select语句抽取数据库表数据

3,ALV显示

完整代码:

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结构:

以上。

posted @ 2019-08-30 16:00  真的是很难  阅读(895)  评论(0编辑  收藏  举报