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

Lil*_*hal 3 abap

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

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

Lil*_*hal 6

我是否需要在SELECT语句之前清除内部表?

不,你没有.一个SELECT [...] INTO TABLE语句总是会清除目标表,无论声明是否成功完成.

正如SAP关键字文档所述:

如果INTO使用,则初始化内部表.如果APPENDING使用,以前的行保持不变.

因此,无论查询是否成功,一个SELECTwith INTO TABLE将始终清除表,而一个with APPENDING TABLE将始终保留原始条目.


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

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|.
Run Code Online (Sandbox Code Playgroud)

该报告将输出:

First SELECT. Table contains: 20 rows
Second SELECT - 10 rows
APPEND - 15 rows
Failed APPEND - 15 rows
Failed SELECT - 0 rows
Run Code Online (Sandbox Code Playgroud)