Abap 从带循环的内部表读取,无结果

Abap 从带循环的内部表读取,无结果,abap,Abap,在下面的代码中,我使用SELECT将数据库表中的数据读取到内部表dresult 读取内部表的第一行将显示预期结果,但使用循环将不显示任何内容 有什么问题吗 注意:我试图删除ENDSELECT,但成功了。为什么? REPORT ZTEST02. "Detail Informaion TYPES : BEGIN OF details, d1 type arktx, " description d2 type lfimg, "quantity

在下面的代码中,我使用
SELECT
将数据库表中的数据读取到内部表
dresult

读取内部表的第一行将显示预期结果,但使用
循环
将不显示任何内容

有什么问题吗

注意:我试图删除
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.

使用
选择。。。ENDSELECT
将数据选择到工作区(
进入@dresult
——实际上是同名内部表的标题行)。因此,内部表
dresult
不包含任何数据,因此
循环
读取表
将无法工作

我将声明不带
标题行的内部表
,并删除
ENDSELECT

DATA: dresult type STANDARD TABLE OF details,

...

SELECT ...
       INTO TABLE @dresult
此外,在
读取表
后,最好检查是否找到条目:

READ TABLE ...
IF sy-subrc EQ 0.
... 
ENDIF.

如果进行调试,您会看到
dresult
处的循环没有任何问题,是内部表
dresult
为空。它是空的,因为选择了
。所以问题应该是关于
选择
。此外,您忘了说只有在
中间插入
表格
到@dresult
中才能删除
ENDSELECT
。最后,这就引出了使用标题行的问题,而你只是这个过时概念的一个新受害者(自2005年以来,ABAP对象不允许),因为它容易出错,有太多的受害者……你认为阅读第一行是有效的,它会被显示出来,但我无法重现(它只显示空白,不显示第一行)。