首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用OpenSQL实现ABAP中游标的正确方法

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

Stack Overflow用户
提问于 2017-07-27 10:07:32
回答 1查看 1.3K关注 0票数 1

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

代码语言:javascript
复制
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)内部表中的所有记录。

我可以以何种方式将游标引入到这段代码中,以便它以较小的批次选择和删除记录?

EN

回答 1

Stack Overflow用户

发布于 2017-07-27 11:37:54

有一个文档中的好示例。我不太清楚为什么您需要在删除这些条目之前阅读它们,但是可能有一个很好的原因您忽略了提及(例如,记录值)。对于正在实现的过程,请注意文档中的以下警告

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45347629

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档