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对象不允许),因为它容易出错,有太多的受害者……你认为阅读第一行是有效的,它会被显示出来,但我无法重现(它只显示空白,不显示第一行)。