我正在尝试搜索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不是常量 . 我想知道我应该实现我想做的事情 .
2 回答
声明
DATA: lv_current_table VALUE lt_tables_to_search_coll-name.
无效 . 仅当右侧是常量值(例如数字或字符串)时,才可以使用VALUE
加法 .您可以对
lv_current_table
进行正常声明(给它一个类型),然后为其赋值lt_tables_to_search_coll-name
.遗憾的是,ABAP不像其他语言那样灵活 .
最好使用
DATA()
将表循环到动态结构中以完全缓解声明 .学习LOOP syntax . 您不应在每次迭代中声明
lv_current_table
. 使用这样:相应地你的
FROM
将是