abap内表

内表:为了临时存储表数据,但是不和数据库交互。内表是一个数据对象,在运行时可以用内表保存多个相同结构的数据。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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值