首页 文章

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

提问于
浏览
1

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

  • 0

    当我运行它时,我得到的错误是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

    学习LOOP syntax . 您不应在每次迭代中声明 lv_current_table . 使用这样:

    LOOP AT lt_tables_to_search_coll INTO DATA(lv_current_table).
    

    相应地你的 FROM 将是

    FROM (lv_current_table-name)
    

相关问题