使用OpenSQL在ABAP中实现游标的正确方法
我使用SELECT语句用大量记录填充内部表。我是ABAP和OpenSQL的新手。我知道游标是如何工作的,为什么在这种情况下需要它们,但我似乎找不到任何好的例子来说明它们的正确实现。这是我正在使用的代码:使用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
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)内部表中的所有记录
我可以用什么方式向代码中引入一个游标,以便它以较小的批量选择和删除记录 有一个问题。我不完全清楚为什么在删除条目之前需要阅读这些条目,但可能有一个很好的理由让您忽略了提及(例如记录值)。对于正在实施的流程,请注意中的以下警告:
如果对数据库表进行写访问,则
游标处于打开状态,结果集特定于数据库且未定义。
尽可能避免这种并行访问
我需要先选择它们,因为不幸的是,目前无法生成“删除所有条目”语句。这个例子确实很有帮助。我并没有像图中所示那样逐行完成,而是使用了“包大小”。