从内部 table 循环读取,没有结果
read from internal table with loop and no results
在下面的代码中,我使用 SELECT
从数据库 table 读取数据到内部 table dresult
.
读取内部 table 的第一行显示预期结果,但使用 LOOP
显示任何内容。
有什么问题?
注意:我尝试删除 ENDSELECT
并且成功了。为什么?
REPORT ZTEST02.
"Detail Informaion
TYPES : BEGIN OF details,
d1 type arktx, " description
d2 type lfimg, "quantity
END OF details.
DATA : dresult TYPE TABLE OF details WITH HEADER LINE,
t_dresult TYPE details,
sdno TYPE vbeln.
PARAMETERS packo TYPE vbeln OBLIGATORY MATCHCODE OBJECT f4_likp.
START-OF-SELECTION.
SELECT arktx,lfimg
INTO @dresult
FROM lips as detail
LEFT JOIN marm as material
ON detail~matnr = material~matnr
LEFT OUTER JOIN vbak
ON detail~vgbel = vbak~vbeln
WHERE detail~vbeln = @packo.
ENDSELECT.
READ TABLE dresult into t_dresult INDEX 1.
write: t_dresult-d1,t_dresult-d2.
LOOP AT dresult INTO t_dresult.
write: t_dresult-d1,t_dresult-d2.
ENDLOOP.
With SELECT ... ENDSELECT
你 select 将数据放入工作区(INTO @dresult
- 这实际上是内部 table 的 header 行一样的名字)。结果内部 table dresult
不包含任何数据,因此 LOOP
和 READ TABLE
将不起作用。
我会在没有 HEADER LINE
的情况下声明内部 table 并删除 ENDSELECT
:
DATA: dresult type STANDARD TABLE OF details,
...
SELECT ...
INTO TABLE @dresult
此外,在 READ TABLE
之后,检查是否找到条目总是好的:
READ TABLE ...
IF sy-subrc EQ 0.
...
ENDIF.
在下面的代码中,我使用 SELECT
从数据库 table 读取数据到内部 table dresult
.
读取内部 table 的第一行显示预期结果,但使用 LOOP
显示任何内容。
有什么问题?
注意:我尝试删除 ENDSELECT
并且成功了。为什么?
REPORT ZTEST02.
"Detail Informaion
TYPES : BEGIN OF details,
d1 type arktx, " description
d2 type lfimg, "quantity
END OF details.
DATA : dresult TYPE TABLE OF details WITH HEADER LINE,
t_dresult TYPE details,
sdno TYPE vbeln.
PARAMETERS packo TYPE vbeln OBLIGATORY MATCHCODE OBJECT f4_likp.
START-OF-SELECTION.
SELECT arktx,lfimg
INTO @dresult
FROM lips as detail
LEFT JOIN marm as material
ON detail~matnr = material~matnr
LEFT OUTER JOIN vbak
ON detail~vgbel = vbak~vbeln
WHERE detail~vbeln = @packo.
ENDSELECT.
READ TABLE dresult into t_dresult INDEX 1.
write: t_dresult-d1,t_dresult-d2.
LOOP AT dresult INTO t_dresult.
write: t_dresult-d1,t_dresult-d2.
ENDLOOP.
With SELECT ... ENDSELECT
你 select 将数据放入工作区(INTO @dresult
- 这实际上是内部 table 的 header 行一样的名字)。结果内部 table dresult
不包含任何数据,因此 LOOP
和 READ TABLE
将不起作用。
我会在没有 HEADER LINE
的情况下声明内部 table 并删除 ENDSELECT
:
DATA: dresult type STANDARD TABLE OF details,
...
SELECT ...
INTO TABLE @dresult
此外,在 READ TABLE
之后,检查是否找到条目总是好的:
READ TABLE ...
IF sy-subrc EQ 0.
...
ENDIF.