繁体   English   中英

将内联声明的表分配给字段符号

[英]Assigning Inline declared table to Field Symbols

有一个从SELECT语句生成的内联声明表,如下所示:

SELECT *
INTO TABLE @DATA(lt_result)
FROM scarr.

如何将lt_result分配给字段符号?

我尝试了以下方法:

  FIELD-SYMBOLS: <fs_lt_result> TYPE ANY.

  LOOP AT lt_result ASSIGNING <fs_lt_result>.

但是我无法在循环内调用字段符号中的任何组件,例如:

WRITE / <fs_lt_result>-carrid.

(语法错误: The data object "<FS_LT_RESULT>" does not have a structure and therefore does not have a component called "CARRID".

ASSIGN 语句中内部表的字段符号的内联声明和 LOOP 中表行的字段符号的内联声明。

LOOP AT <lt_result> ASSIGNING FIELD-SYMBOL(<line>).
  ...
ENDLOOP. 

来源: https : //help.sap.com/doc/abapdocu_750_index_htm/7.50/en-US/abenfield-symbol_inline.htm

您声明字段符号是未知类型( ANY ,即确切类型仅在运行时已知),因此编译器无法确定提到的组件( CARRID )存在,因此出现语法错误。

如果您想静态提及一个组件,则必须通知编译器确切的类型(存在哪些组件)。

例如,这将起作用:

SELECT *
    INTO TABLE @DATA(lt_result)
    FROM scarr.

FIELD-SYMBOLS: <fs_lt_result> TYPE scarr.

LOOP AT lt_result ASSIGNING <fs_lt_result>.
  WRITE / <fs_lt_result>-carrid.
ENDLOOP.

或者使用您在自己的答案/解决方案中提出的字段符号的内联声明:

LOOP AT lt_result ASSIGNING FIELD-SYMBOL(<fs_lt_result>).

注意:如果您的内部表的类型仅在运行时确定,则无法静态指示组件名称,您需要动态引用组件:

ASSIGN COMPONENT ('CARRID') OF STRUCTURE <fs_lt_result> TO FIELD-SYMBOL(<field>).
IF sy-subrc = 0.
  WRITE / <field>.
ENDIF.

示例:字段符号:类型 VBAK。 数据:VBAK 的 ITAB 类型表。

SELECT * FROM VBAK INTO TABLE ITAB 最多 10 行。

循环在 ITAB 分配写入:/ -VBELN。 (写出你想要显示的输出)ENDLOOP。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM