使用OpenSQL在ABAP中实现游标的正确方法

使用OpenSQL在ABAP中实现游标的正确方法,abap,opensql,Abap,Opensql,我使用SELECT语句用大量记录填充内部表。我是ABAP和OpenSQL的新手。我知道游标是如何工作的,为什么在这种情况下需要它们,但我似乎找不到任何好的例子来说明它们的正确实现。这是我正在使用的代码: TYPES: BEGIN OF lty_it_ids, iteration_id TYPE dat_itr_id, END OF lty_it_ids. DATA: lt_it_ids TYPE STANDARD TABLE OF lty

我使用SELECT语句用大量记录填充内部表。我是ABAP和OpenSQL的新手。我知道游标是如何工作的,为什么在这种情况下需要它们,但我似乎找不到任何好的例子来说明它们的正确实现。这是我正在使用的代码:

TYPES: BEGIN OF lty_it_ids,
         iteration_id TYPE dat_itr_id,
       END OF lty_it_ids.

DATA:  lt_it_ids            TYPE STANDARD TABLE OF lty_it_ids,
       lt_records_to_delete TYPE STANDARD TABLE OF tab_01p.

SELECT 01r~iteration_id    
            INTO TABLE lt_it_ids
            FROM tab_01r AS 01r INNER JOIN tab_01a AS 01a
            ON 01r~iteration_id = 01a~iteration_id
            WHERE 01a~collection_id = i_collection_id.

IF lt_it_ids IS NOT INITIAL. 

  SELECT * FROM tab_01p INTO CORRESPONDING FIELDS OF TABLE lt_records_to_delete
           FOR ALL ENTRIES IN lt_it_ids
           WHERE iteration_id = lt_it_ids-iteration_id AND collection_id = i_collection_id.

  IF lt_records_to_delete IS NOT INITIAL.

    DELETE tab_01p FROM TABLE lt_records_to_delete.      

  ENDIF.
ENDIF.
在第一个SELECT语句中,我用一些与较大表的索引相对应的值填充一个小的内部表。有了这些索引,我可以在较大的表中更快地搜索,以找到我要删除的所有条目。它是第二个SELECT语句,用于填充一个大的(几百万行)内部表。我要从数据库表中删除此(lt_records_to_delete)内部表中的所有记录

我可以用什么方式向代码中引入一个游标,以便它以较小的批量选择和删除记录

有一个问题。我不完全清楚为什么在删除条目之前需要阅读这些条目,但可能有一个很好的理由让您忽略了提及(例如记录值)。对于正在实施的流程,请注意中的以下警告:

如果对数据库表进行写访问,则 游标处于打开状态,结果集特定于数据库且未定义。 尽可能避免这种并行访问


我需要先选择它们,因为不幸的是,目前无法生成“删除所有条目”语句。这个例子确实很有帮助。我并没有像图中所示那样逐行完成,而是使用了“包大小”。