循环遍历填充了表名的内部表,并在 select 语句中搜索每个表



我正在尝试搜索 8 个表并检查是否存在某个值。我搜索了很多,我认为我必须使用字段符号和动态语句。这是在报告(可执行程序(中完成的。 到目前为止,我有我的内部表,里面装满了必须搜索的 8 个表名:

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.

所以现在我想我绕了一圈来浏览这张桌子。在这个循环中,我进入 select 语句并将找到的值添加到先前声明的表中。

我尝试的是:

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名称不是常量。我想知道我应该实施我正在努力做的事情。

但是当我运行它时,我收到错误,lt_tables_to_search_coll名称不是常量。

声明DATA: lv_current_table VALUE lt_tables_to_search_coll-name.无效。仅当右侧是常量值(如数字或字符串(时,才能使用VALUE加法。

您可以对lv_current_table进行常规声明(为其指定类型(,然后为其分配值lt_tables_to_search_coll-name

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


想知道我应该实施我正在努力做的事情。

您最好使用DATA()在表上循环到动态结构中,以完全缓解声明。

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 语法。不应在每次迭代中声明lv_current_table。像这样使用:

LOOP AT lt_tables_to_search_coll INTO DATA(lv_current_table).

相应地,您的FROM将是

FROM (lv_current_table-name)

相关内容

  • 没有找到相关文章

最新更新