我使用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)内部表的所有记录。
我可以用什么方式将光标引入此代码,以便选择和删除较小批量的记录?
答案 0 :(得分:1)
有一个good example in the documentation。我不完全确定为什么你需要在删除之前阅读这些条目,但可能有一个很好的理由你忽略了(例如记录值)。对于您正在实施的流程,请注意documentation中的以下警告:
如果对数据库的数据库表进行写访问 游标已打开,结果集是特定于数据库且未定义的。 如果可能,请避免这种并行访问。