从ABAP

时间:2018-04-30 12:46:06

标签: replace sap selection abap

我的程序中有一个下拉列表,我在其中输入了不同表的名称。所以我使用了IF声明。基本上是:

if wa_list-key = '1'.
(replace name of table with the one choosen from the dropdown list)
endif.

我有这样的选择:

select * from customer into table lt_customer.

什么是替换表名的语法? 我知道替换语句只适用于字符串但是有办法吗?

2 个答案:

答案 0 :(得分:2)

您可以从表中动态选择:

DATA: lv_table TYPE tabname.

    SELECT * 
           INTO TABLE lt_table
           FROM (lv_table).

但是你选择的lt_table必须具有与你选择的数据库表相同的结构,否则它将被转储。要解决此问题,您可以使用INTO COORESPONDING FIELDS OF lt_table(而不是INTO TABLE...)。您还可以动态声明WHERE条件:WHERE (lv_where)这完全取决于您的确切需求。

答案 1 :(得分:1)

在JozsefSzikszai中,当结构和数据库表不同时,你会得到转储。所以,你可以试试这个 -

DATA: lv_tabname TYPE tabname.

DATA: lo_tabtype     TYPE REF TO cl_abap_tabledescr,
      lo_struct_type TYPE REF TO cl_abap_structdescr,
      lr_data        TYPE REF TO data,
      lt_comp_tab    TYPE cl_abap_structdescr=>component_table,
      ls_comp_fld    TYPE cl_abap_structdescr=>component.

FIELD-SYMBOLS: <fs_tab> TYPE ANY TABLE,
               <fs_struct> TYPE ANY.

lv_tabname = 'ZTEST_DIV'.  " Give tab name from your dropdown select

lo_struct_type ?= cl_abap_typedescr=>describe_by_name( lv_tabname ).
lt_comp_tab  = lo_struct_type->get_components( ).

lo_struct_type = cl_abap_structdescr=>create( lt_comp_tab ).
lo_tabtype     = cl_abap_tabledescr=>create( lo_struct_type ).

CREATE DATA lr_data TYPE HANDLE lo_tabtype.
ASSIGN lr_data->* TO <fs_tab>.

*CREATE DATA lr_data TYPE HANDLE lo_struct_type. " Use this when you want same table structure
*ASSIGN lr_data->* TO <fs_struct>.

* dynamic select
SELECT *
  FROM (lv_tabname)
  INTO CORRESPONDING FIELDS OF TABLE <fs_tab>.

它会更通用。它将使用lv_tabname创建动态内部表。因此,在Select语句中,您将不会转储。