abap - 在 SELECT 语句中重新使用内部表之前是否需要清除它?

标签 abap

当使用 SELECT [...] INTO TABLE 语法将数据选择到内部表中时,我是否需要确保先清除该表?

SELECT 语句是否总是会为我清除表,即使它失败了?

最佳答案

Do I need to clear my internal table before a SELECT statement?

不,你不需要。 SELECT [...] INTO TABLE 语句将始终清除目标表,无论语句是否成功完成。

作为the SAP Keyword Documentation states :

If INTO is used, the internal table is initialized. Previous rows remain intact if APPENDING is used.

因此带有 INTO TABLESELECT 将始终清除表,而带有 APPENDING TABLESELECT 将始终保留原始条目,无论是否查询是否成功。


因为我并不总是相信文档,所以我自己进行了快速测试:

DATA:
lt_table TYPE STANDARD TABLE OF but000.

SELECT *
UP TO 20 ROWS
FROM but000
INTO TABLE lt_table.

WRITE :/ |First SELECT. Table contains: { lines( lt_table ) } rows|.

SELECT *
UP TO 10 ROWS
FROM but000
INTO TABLE lt_table.

WRITE :/ |Second SELECT - { lines( lt_table ) } rows|.

SELECT *
UP TO 5 ROWS
FROM but000
APPENDING TABLE lt_table.

WRITE :/ |APPEND - { lines( lt_table ) } rows|.

SELECT *
UP TO 5 ROWS
FROM but000
APPENDING TABLE lt_table
WHERE partner = 0.

WRITE :/ |Failed APPEND - { lines( lt_table ) } rows|.

SELECT *
UP TO 5 ROWS
FROM but000
INTO TABLE lt_table
WHERE partner = 0.

WRITE :/ |Failed SELECT - { lines( lt_table ) } rows|.

该报告将输出:

First SELECT. Table contains: 20 rows
Second SELECT - 10 rows
APPEND - 15 rows
Failed APPEND - 15 rows
Failed SELECT - 0 rows

关于abap - 在 SELECT 语句中重新使用内部表之前是否需要清除它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48808873/

相关文章:

abap - INSERT INTO itab 时抑制不可抑制的警告

abap - 使用动态方法名称调用方法,RuntimeException

unit-testing - ABAP 单元测试 - 为什么我的设置方法被调用两次?

abap - 带有压缩数字的 SAP Smartforms 布局问题

abap - 用于读取 CCMS 值的 BAPI

abap - 无法显示 SOAMANAGER

abap - FOR ALL ENTRIES 通过空 itab 从数据库中选择所有记录

treeview - 获取 ALV 树节点的级别?

abap - 作为 FM 参数的函数方法调用的语法?

abap - 字段输入值比屏幕字段 ABAP 长