我使用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)内部表的所有记录 .
以什么方式可以将光标引入此代码,以便选择和删除较小批量的记录?
1 回答
有一个good example in the documentation . 我不完全确定为什么你需要在删除之前阅读这些条目,但可能有一个很好的理由你忽略了(例如记录值) . 对于您正在实施的流程,请注意documentation中的以下警告: