从内部 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 不包含任何数据,因此 LOOPREAD 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.