Skip to content

FIELD SYMBOLS 语句与内表

一、介绍

  内表也可用于在给变量赋值的过程中分配给FIELDSYMBOLS使用。利用FIELD SYMBOLS 修改内表,可以省略赋值到结构体的过程,即可提高性能。下面是把 FIELD SYMBOLS 分配到内表中使用的代码。

abap
TYPES: BEGIN OF t line,
        col1 TYPE c,
        col2 TYPE c,
    END OF t line.

DATA: gs wa TYPE t line,
      gt_itab TYPE HASHED TABLE OF t line WITH UNIQUE KEY col1.
      gv_key(4) TYPE c VALUE 'COL1'.
FIELD-SYMBOLS <fS>TYPE ANY TABLE.
ASSIGN gt_itab TO <fs>.
READ TABLE <f$> WITH TABLE KEY (gv key) = 'X' INTO wa.

  此标题虽然是“FIELD SYMBOLS 与内表”,但实际上要讲述的是FIELD SYMBOLS的动态类型定义与 Generic Type FIELD SYMBOLS。即定义成一般类型的 FIELD SYMBOLS(Generic Type Specification),在程序执行时动态指定 FIELD SYMBOLS 类型的技术。上面语句中 FIELD SYMBOLS<fs>是参照没有指定类型的内表定义的。然后通过 ASSIGN 语句内表将 itab 分配到 FIELDSYMBOLS 中。最后 FIELD SYMBOLS<fS>动态连接到以 col1 字段为主键的内表内存地址(address)中。   是否记得“10.2.1 FIELD SYMBOLS的定义”中的定义部分?在前面也提到,没有指定类型的 Line 类型可以使用 FIELD-SYMBOLS <fS>TYPE ANY.语句。   通过[例10-9]确认下FIELD SYMBOLS 与内表的实现代码。 alt text1. 定义内表为 SORTED TABLE。
2. 定义内表为 HASHED TABLE。
3. 定义内表为 STANDARD TABLE。
4. 以旧式定义法定义内表(类型为 Standard Table)。
5. 定义FIELD SYMBOLS。
  定义1、2、3中的内表和5中的 FIELD SYMBOLS 后,可以执行6、7中的 ASSIGN与 READ 语句,但使用④中带表头的内表,在6 ASSIGN 语句中会产生如[图 10-4]所示的类型转换错误。ASSIGN 带表头的内表需使用如下语句。

abap
ASSIGNgt itab4[] TO <fs>.

alt text6. 执行 ASSIGN 语句。
7. 执行 READ 语句。
  在5语句中要定义成 TYPE ANY TABLE.形式,FIELDSYMBOLS 才能充当内表,且FIELD SYMBOLS 可以使用READ语句。定义FIELDSYMBOLS为 Generic Type,因此要使用(gv fname)动态语句。类似于 READ TABLE<fS> WITH TABLE KEY col1='X'.,明确指定字段名会产生错误。