代码之家  ›  专栏  ›  技术社区  ›  Erik

在充满表名的内部表上循环,并在select语句中搜索每个表

  •  1
  • Erik  · 技术社区  · 7 年前

    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\u tables\u to\u search\u coll-name不是一个常数。我想知道我应该实施我正在努力做的事情。

    2 回复  |  直到 6 年前
        1
  •  1
  •   gkubed Sergei Grigoriev    7 年前

    宣言 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.
    
        2
  •  0
  •   Suncatcher    7 年前

    LOOP syntax .你不应该申报 lv_current_table 在每次迭代中。使用方式如下:

    LOOP AT lt_tables_to_search_coll INTO DATA(lv_current_table).
    

    相应地 FROM

    FROM (lv_current_table-name)