Abap “现场”;str_mara“;未知,但有一个具有类似名称的字段;它是“马拉”;

Abap “现场”;str_mara“;未知,但有一个具有类似名称的字段;它是“马拉”;,abap,Abap,我想显示Mara表的内容 types : begin of str_mara, matnr type mara-matnr, ernam type mara-ernam, end of str_mara. data it_mara type table of str_mara . select matnr ernam from mara into TABLE it_mara . loop at it_mara into str_mar

我想显示Mara表的内容

types : begin of str_mara,
          matnr type mara-matnr,
          ernam type mara-ernam,
        end of str_mara.

data it_mara type table of str_mara .

select matnr ernam from mara into TABLE it_mara .

loop at it_mara into str_mara.
  write:/ str_mara-matnr , str_mara-ernam.
endloop.

嗯,没有名为
str_mara
的变量。只有一个类型名为
str_mara

只需使用字段符号循环即可,因为无论如何都应该这样做

LOOP AT it_mara ASSIGNING FIELD-SYMBOL(<str_mara>).
   WRITE: /, <str_mara>-matnr, <str_mara>-ernam.
ENDLOOP.
在其上循环\u mara赋值字段-SYMBOL()。
写:/,-matnr,-ernam。
结束循环。

您还可以使用内联声明以较少的ABAP代码行显示mara表的内容

SELECT matnr, ernam FROM mara INTO TABLE @DATA(lt_mara) .
LOOP AT lt_mara ASSIGNING FIELD-SYMBOL(<fs_mara>).
   WRITE: /, <fs_mara>-matnr, <fs_mara>-ernam.
ENDLOOP.
从mara中选择matnr、ernam到表@DATA(lt_mara)。
在lt_mara处循环分配字段-SYMBOL()。
写:/,-matnr,-ernam。
结束循环。

类型只是一个静态定义,没有分配内存,因此不能单独使用

您可以创建该类型的变量,也可以使用内联声明创建类似的变量

  • 选项1:
    data ls\u mara type str\u mara.

  • 选项2:
    在lt_mara循环到数据(ls_mara)。

或者用奥马尔的回答:)


顺便说一句,一定要检查访问mara表时的where条件。

这就是变量和类型之间的所有区别……您是否绝对确定要在不使用任何标准的情况下将
mara
表中的所有条目选择到内部表中?上问的问题完全相同
types : begin of str_mara,
          matnr type mara-matnr,
          ernam type mara-ernam,
        end of str_mara.

data it_mara type table of str_mara .

select matnr ernam from mara into TABLE it_mara .

loop at it_mara into str_mara.
  write:/ str_mara-matnr , str_mara-ernam.
endloop.