我正在尝试搜索 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)