带有多个内部表的ABAP光标获取

  • 本文关键字:ABAP 光标 获取 内部 abap
  • 更新时间 :
  • 英文 :


我在下面有一个光标。

OPEN CURSOR WITH HOLD s_cursor FOR
  SELECT * FROM (QUERY_TABLE)   WHERE (OPTIONS).
DO.
    FETCH NEXT CURSOR s_cursor APPENDING TABLE <lt_itab>  PACKAGE SIZE 100000.
    IF sy-subrc <> 0.
      EXIT.
    ENDIF.
ENDDO.

由于表中有大量数据,因此我需要将数据拆分为多个内部表。这里想要的是,需要为每个FECTH传递不同的内部表。

也需要创建具有相同结构的多个内部表。内表的命名将如下 CONCATENATE 'Lt_ITAB' count INTO intname。我应该能够从变量插图创建内部表。

请提供一些样本或逻辑。

预先感谢S sukumar

DATA tables TYPE STANDARD TABLE OF table_type WITH EMPTY KEY.
OPEN CURSOR WITH HOLD cursor FOR
  SELECT *
    FROM (db_table)
    WHERE (conditions).
WHILE sy-subrc = 0.
  INSERT NEW LINE INTO TABLE tables ASSIGNING FIELD-SYMBOL(<target_table>).
  FETCH NEXT CURSOR cursor APPENDING TABLE <target_table> PACKAGE SIZE 100000.
ENDWHILE.

请注意,这是没有意义的。正如桑德拉·罗西(Sandra Rossi)指出的那样, FETCH CURSOR的想法是,数据库存储的数据比ABAP的主要内存所能拥有的数据要多。无论如何,您都想将所有数据检索到主内存中 - 如果您的数据集确实很大,则您无论如何都会用尽内存。

另一方面,您的数据集足够小以适合ABAP的主要内存,则应将其加载到一口气中,然后使用合适的包装,如

SELECT * FROM (db_table) INTO TABLE (all_data) WHERE (conditions).
DATA(tables) = split_data_in_packages( data = all_data  package_size = 100000 ).

另外,请注意,无法动态创建一组lt_itab<count>变量。我的解决方案代替了表格表,然后可以用[]索引访问器来方便地解决该表,如lt_itab[ <count> ]中。

此答案侧重于包装方面。您的问题还有另一个方面,(db_table)是动态的,您可能在运行时不知道实际的表类型。对于这些情况,您可以参考ABAP的运行时类型接口(RTTI)和CREATE DATA语句以确定和实例化合适的数据类型。

相关内容

  • 没有找到相关文章

最新更新