我正在尝试搜索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-name不是常量。我想知道我应该实现我想做的事情。
答案 0 :(得分:1)
当我运行它时,我得到的错误是lt_tables_to_search_coll-name不是常量。
声明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.
答案 1 :(得分:0)
了解LOOP syntax。您不应在每次迭代中声明lv_current_table
。使用方式如下:
LOOP AT lt_tables_to_search_coll INTO DATA(lv_current_table).
相应地,您的FROM
将是
FROM (lv_current_table-name)