ABAP-创建内表

ABAP-创建内表

1.创建内表的步骤

定义结构体类型

参照局部表类型创建内表


*定义结构体类型

TYPES: BEGIN OF s_type,
  no(6) TYPE c,
  name(10) type c,
  part(16) TYPE c,
  END OF s_type.

* 定义一个标准的内表
  DATA gt_itab TYPE STANDARD TABLE OF s_type WITH NON-UNIQUE KEY no
        WITH HEADER LINE.

  gt_itab-no ='0001'.
  gt_itab-name = 'Enjoy ABAP'.
  gt_itab-part = 'SAP Team'.

  APPEND gt_itab.

  LOOP AT gt_itab.
    WRITE: gt_itab-no,gt_itab-name,gt_itab-part.
    ENDLOOP.

ABAP-创建内表_第1张图片
当然可以直接定义结构体后直接参照此结构体定义内表。不过不能使用TYPE语句,而是用LIKE语句。

DATA: BEGIN OF s_type,
      no(6)  TYPE c,
      name(10) TYPE c,
      part(16) TYPE c,
     END OF s_type.
     
DATA gt_itab LIKE STANDARD TABLE OF s_type 
WITH NON-UNIQUE KEY no WITH HEADER LINE.

参照全局数据库表创建内表

示例模板:

DATA:itab TYPE<t_itab> WITH {UNIQUE|NON-UNIQUE}KEY<keys>
[INITIAL SIZE<n>][WITH HEADER LINE].

案例

*定义与SCARR 表有相同结构的内表

DATA gt_itab TYPE SORTED TABLE OF scarr WITH UNIQUE KEY carrid.

DATA gs_str LIKE LINE OF gt_itab.

SELECT * INTO TABLE gt_itab
  FROM scarr.

  LOOP AT gt_itab INTO gs_str.
    WRITE: gs_str-carrid,gs_str-carmame.
    ENDLOOP.

2.内表与表头

表头也叫工作区(Work Area),定义内表时
追加WITH HEADER LINE 语句会自动生成表头。
当时用带表头的内表时,明确表头的数据后再使用。

用如下语句定义带表头的内表,可以直接使用表头里的信息。

DATA itab TYPE type WITH HEADER LINE.

使用不带表头的内表时,需通过工作区编辑内表中的数据,而使用带表头的内表时,则可以直接使用表的名字编辑内表值。

  • 我们可以使用MODIFY 来编辑内表
    使用 MODIFY语句时,带表头的内表会省略FROM之后的语句。
MODIFY TABLE itab.
MODIFY TABLE itab FROM 表头
等于下面的
NODIFY TABLE itab FROM itab.

总而言之,带表头的语句主要省略了不带表头的内表所使用的语句中的工作区部分。

案例:
带表头与不带表头的内表的区别之处

*定义结构体
TYPES: BEGIN OF t_str,
  col1 TYPE i,
  col2 TYPE i,
  END OF t_str.
*带表头的内表使用表头而不用结构体的事实。带表头使用APPEND语句。
*带表头定义,表头的名字叫做gt_itab。添加到结构体 t_str
  DATA gt_itab TYPE TABLE OF t_str WITH HEADER LINE.

*做循环
DO 3 TIMES.

gt_itab-col1 = sy-index.
gt_itab-col2 = sy-index ** 2.

APPEND gt_itab.
ENDDO.

LOOP AT gt_itab.
  WRITE:/ gt_itab-col1,gt_itab-col2.
  ENDLOOP.
  
**********************************************************************
*& 内表的类型决定了访问内表行数据的方法,分为三种,标准表、排序表、哈希表
**********************************************************************
*& 标准表的测试
*& 标准表是有索引的树型结构内表,利用索引查找内表行数据时易于使用的内表类型。
*& 标准表关键字并非 唯一, 不能使用WITH UNIQUE语句

**定义结构体类型.
TYPES: BEGIN OF t_line,
       field1 TYPE c LENGTH 5,
       field2 TYPE c LENGTH 4,
       field3 TYPE i.
**2. 定义标准表类型
TYPES  t_tab TYPE STANDARD TABLE OF t_line WITH NON-UNIQUE DEFAULT KEY.
**3. 定义内表
DATA gt_itab TYPE t_tab WITH HEADER LINE.
gt_itab-field1 = 'Enjoy'.
gt_itab-field2 = 'ABAP'.
gt_itab-field3 = 1.
APPEND gt_itab.
READ TABLE gt_itab INDEX 1.
WRITE:/ gt_itab-field1,gt_itab-field2,gt_itab-field3.
**********************************************************************

**********************************************************************
*& 排序表是已经按关键字排序好的内表类型。
*& 有索引,或关键字查询对应的行。
*& 标准表只能使用with NON-UNIQUE语句

*1.定义结构体类型
TYPES: BEGIN OF t_line,
       col TYPE c,
       seq TYPE i,
       END OF t_line.
*2. 定义标准表类型
TYPES t_tab TYPE SORTED TABLE OF t_line WITH UNIQUE KEY col.

*3. 定义内表类型
DATA gt_itab TYPE t_tab WITH HEADER LINE.

gt_itab-col = 'B'.
gt_itab-seq = '1'.
INSERT TABLE gt_itab.

gt_itab-col = 'A'.
gt_itab-seq = '2'.
INSERT TABLE gt_itab.

clear gt_itab.

READ TABLE gt_itab INDEX 2.

WRITE:/ gt_itab-col, gt_itab-seq.

READ TABLE gt_itab INDEX 2. 读取行数第几行的数据。

哈希表

**********************************************************************
*& 哈希表没有顺次索引,只能用哈希值计算出的key值进行检索。
*& 检索速度与内表的数据无关,始终是相同的。
*& 哈希表一定要设定为UNIQUE的类型。

*1.定义结构体类型
TYPES: BEGIN OF t_line,
                        col     TYPE c,
                        seq     TYPE i,
       END OF   t_line.

*2. 定义标准表类型
TYPES t_tab TYPE HASHED TABLE OF t_line WITH UNIQUE KEY col.

*3. 定义内表类型
DATA gt_itab TYPE t_tab WITH HEADER LINE.

gt_itab-col = 'B'.
gt_itab-seq = '1'.
INSERT TABLE gt_itab.

gt_itab-col = 'A'.
gt_itab-seq = '2'.
INSERT TABLE gt_itab.

clear gt_itab.

READ TABLE gt_itab WITH KEY col = 'B'.

WRITE:/ gt_itab-col, gt_itab-seq.

READ TABLE gt_itab WITH KEY col = ‘B’.
获取数据的方式 通过读取 键。

你可能感兴趣的:(SAP,ABAP,开发语言)