Abap 在SELECT语句中重用内部表之前,是否需要清除它?

Abap 在SELECT语句中重用内部表之前,是否需要清除它?,abap,Abap,使用SELECT[…]into table语法将数据选择到内部表中时,是否需要确保首先清除该表 SELECT语句是否总是为我清除表,即使它失败 我需要在SELECT语句之前清除我的内部表吗 不,您不需要。无论语句是否成功完成,一条选择[…]进入表的语句将始终清除目标表 作为: 如果使用了INTO,则初始化内部表。如果使用了追加,则前几行保持不变 因此,无论查询是否成功,带有到表中的选择将始终清除表,而带有附加表的选择将始终保留原始条目 因为我并不总是相信文档,所以我自己做了一个快速测试: DA

使用
SELECT[…]into table
语法将数据选择到内部表中时,是否需要确保首先清除该表

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

我需要在SELECT语句之前清除我的内部表吗

不,您不需要。无论语句是否成功完成,一条
选择[…]进入表的
语句将始终清除目标表

作为:

如果使用了
INTO
,则初始化内部表。如果使用了
追加
,则前几行保持不变

因此,无论查询是否成功,带有
到表中的
选择
将始终清除表,而带有
附加表的
选择将始终保留原始条目


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

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

因为我发誓,我开始怀疑自己,至少每年一次,没有任何好的搜索点击率。另一方面,对文档的准确性表示怀疑可能会让你在地狱里呆上几(更多)年:-)