遍历充满 table 名称的内部 table 并在 select 语句中搜索每个 table

Looping over an internal table filled with table names and searching each of those table in a select statement

我正在尝试搜索 8 tables 并检查某个值是否存在。我四处搜索了很多,我想我必须使用字段符号和动态语句。这是在报告中完成的(executable 程序)。 到目前为止,我有我的内部 table,其中填充了必须搜索的 table 的 8 table 个名称:

BEGIN OF lt_tables_to_search_coll OCCURS 0,
      name TYPE tabname,
    END OF lt_tables_to_search_coll.
lt_tables_to_search_coll-name = 'TAB_01'. 
APPEND lt_tables_to_search_coll.
lt_tables_to_search_coll-name = 'TAB_02'. 
APPEND lt_tables_to_search_coll.
lt_tables_to_search_coll-name = 'TAB_03'. 
APPEND lt_tables_to_search_coll.
lt_tables_to_search_coll-name = 'TAB_04'. 
APPEND lt_tables_to_search_coll.
lt_tables_to_search_coll-name = 'TAB_05'. 
APPEND lt_tables_to_search_coll.
lt_tables_to_search_coll-name = 'TAB_06'. 
APPEND lt_tables_to_search_coll.
lt_tables_to_search_coll-name = 'TAB_07'. 
APPEND lt_tables_to_search_coll.
lt_tables_to_search_coll-name = 'TAB_08'. 
APPEND lt_tables_to_search_coll.

所以现在我想我做一个循环来检查这个 table。在这个循环中,我进入 select 语句并将找到的值添加到先前声明的 table。

我试过的是:

PARAMETERS: p_id    TYPE "id-type"

START-OF-SELECTION.

LOOP AT lt_tables_to_search_coll.
DATA: lv_current_table VALUE lt_tables_to_search_coll-name.

  SELECT tabname AS table_id ddtext AS table_description 
    COUNT(*) AS nr_of_records  FROM (lv_current_table)
  INTO TABLE lt_where_used_data_of_coll
  WHERE id = p_id AND ddlanguage = 'EN'
  GROUP BY tabname ddtext.

ENDLOOP.

当我 运行 这个但是我得到的错误是 lt_tables_to_search_coll-name 不是一个常量。我想知道我应该实施我想做的事情。

When I run this however I get the error that lt_tables_to_search_coll-name is not a constant.

声明DATA: lv_current_table VALUE lt_tables_to_search_coll-name.无效。 VALUE加法只能在右边为常数值时使用,例如数字或字符串。

你可以对lv_current_table做一个正常的声明(给它一个类型),然后给它赋值lt_tables_to_search_coll-name

遗憾的是,ABAP 的表达式不如其他语言灵活。


I would like to know I should implement what I am trying to do.

您最好使用 DATA() 在 table 处循环到动态结构中以完全减轻声明。

PARAMETERS: p_id    TYPE "id-type"

START-OF-SELECTION.

LOOP AT lt_tables_to_search_coll INTO DATA(ls_tables_to_search_coll).

  SELECT tabname AS table_id ddtext AS table_description 
    COUNT(*) AS nr_of_records  FROM (ls_tables_to_search_coll-name)
  INTO TABLE lt_where_used_data_of_coll
  WHERE id = p_id AND ddlanguage = 'EN'
  GROUP BY tabname ddtext.

ENDLOOP.

学习LOOP syntax。您不应该在每次迭代中都声明 lv_current_table 。像这样使用:

LOOP AT lt_tables_to_search_coll INTO DATA(lv_current_table).

相应地,您的 FROM 将是

FROM (lv_current_table-name)