使用SELECT [...] INTO TABLE
语法在内部表中选择数据时,是否需要确保首先清除该表?
SELECT语句是否总是为我清除表,即使它失败了?
答案 0 :(得分:6)
我是否需要在SELECT语句之前清除内部表?
不,你没有。 SELECT [...] INTO TABLE
语句将始终清除目标表,无论语句是否成功完成。
作为the SAP Keyword Documentation states:
如果使用
INTO
,则初始化内部表。如果使用APPENDING
,以前的行保持不变。
因此SELECT
INTO TABLE
将始终清除该表,而APPENDING TABLE
的{{1}}将始终保留原始条目,无论查询是否成功。
因为我并不总是信任文档,所以我自己进行了快速测试:
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