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