内表:为了临时存储表数据,但是不和数据库交互。内表是一个数据对象,在运行时可以用内表保存多个相同结构的数据。ABAP 运行时系统动态的管理内表的大小,这就是说,开发人员无需进行内表的内存管理。
工作区:和表结构一样(相同字段),但是只有一列,主要是缓存,操作内表都是通过工作区,比如更改内表数据,你先把内表一行数据放到工作区,操作完后写回内表。或者你要直接增加数据到内表,也要先到工作区,再写入内表。
表头:算是工作区的一种。区别呢,是定义内表时可以直接定义一个带有表头的内表。这样一句话就可以定义内表和表头,不需要定义工作区。
下面是学习代码,有说明。
*&---------------------------------------------------------------------*
*& Report ZTEST_YHY_02
*&
*&---------------------------------------------------------------------*
*&0908 内表学习。
*&
*&---------------------------------------------------------------------*
REPORT ZTEST_YHY_02.
*DATA: a TYPE i,
* b type i,
* c TYPE i.
*a = 10.
*IF a = 10.
* WRITE a.
*
*ENDIF.
*CASE a.
* WHEN 10.
* WRITE / 'a----1'.
* WHEN OTHERS.
*ENDCASE.
*WHILE a > 5.
*
* WRITE / sy-index.
* a = a - 1.
*ENDWHILE.
*-----------内表----------------------------
*自定义一个结构,内表类型,字段属性。
TYPES: BEGIN OF ty_stu,
a TYPE c LENGTH 10,
b TYPE c LENGTH 10,
c TYPE c LENGTH 10,
d TYPE c LENGTH 10, "注意这里是逗号
END OF ty_stu.
*定义一个it_stu内表, wa_stu,wa1_stu 都是一个工作区,是两种不同的定义方法。
DATA: it_stu TYPE STANDARD TABLE OF ty_stu,
wa_stu TYPE ty_stu.
DATA: wa1_stu Like LINE OF it_stu.
*定义一个有表头的内表。这里注意一般报表处理可以这样定义,
*不过在增强等情况不能用这种定义,增强不能用油表头的内表
DATA: it1_stu TYPE STANDARD TABLE OF ty_stu WITH HEADER LINE.
wa_stu-a = 'a1'.
wa_stu-b = 'b1'.
wa_stu-c = 'c1'.
wa_stu-d = 'd1'.
APPEND wa_stu TO it_stu.
CLEAR wa_stu. "每次工作区用完后清空
wa_stu-a = 'a2'.
wa_stu-b = 'b2'.
wa_stu-c = 'c2'.
wa_stu-d = 'd2'.
APPEND wa_stu TO it_stu.
CLEAR wa_stu.
wa_stu-a = 'a3'.
wa_stu-b = 'b3'.
wa_stu-c = 'c3'.
wa_stu-d = 'd3'.
INSERT wa_stu INTO it_stu INDEX 2. "插入到第二行,原来第二行的变成第三行
CLEAR wa_stu.
* *循环输出
LOOP AT it_stu INTO wa_stu.
WRITE / sy-tabix. "系统变量 计数器
WRITE: / wa_stu-a,
wa_stu-b,
wa_stu-c,
wa_stu-d.
ENDLOOP.
WRITE: / '现在用DATA: it1_stu TYPE STANDARD TABLE OF ty_stu WITH HEADER LINE. 这种方式处理数据'.
*现在用DATA: it1_stu TYPE STANDARD TABLE OF ty_stu WITH HEADER LINE. 这种方式处理数据
it1_stu-a = 'a1'.
it1_stu-b = 'b1'.
it1_stu-c = 'c1'.
it1_stu-d = 'd1'.
APPEND it1_stu.
CLEAR it_stu. "这样是清空表头
*CLEAR it_stu[]. "这样是清空内表
WRITE / '-----开始循环带表头的内表数据------'.
*注意循环方法
LOOP AT it1_stu.
WRITE: / it1_stu-a,
it1_stu-b,
it1_stu-c,
it1_stu-d.
ENDLOOP.
CLEAR wa_stu.
*READ TABLE it_stu INTO wa_stu WITH KEY b = '123'.
**sy-subrc是一个系统变量,对应数字代表读取的结果,如果为0则说明找到符合条件的数据。
*IF sy-subrc = 0.
* WRITE: / wa_stu-a,
* wa_stu-b,
* wa_stu-c,
* wa_stu-d.
*ELSE.
*
* MESSAGE '要提示的信息' TYPE 'E'. "MESSAGE de TYPE 有 S E W A I 等类型
*ENDIF.
*sort