ABAP第二课 内部表

 

内部表实际上是一个临时表,它包含正在执行的 ABAP 程序的记录。 内部表仅在 SAP 程序的运行时期间存在。 它们用于通过使用ABAP语言处理大量数据。 当您需要从数据库表中检索数据时,我们需要在 ABAP 程序中声明一个内部表。

内部表中的数据存储在行和列中。 每一行称为,每一列称为字段。 在内部表中,所有记录具有相同的结构和键。 使用索引或键访问内部表的各个记录。 由于内部表存在直到正在执行相关联的程序,因此当程序的执行终止时,内部表的记录被丢弃。 因此,内部表可以用作临时存储区或临时缓冲区,其中可以根据需要修改数据。 这些表只在运行时而不是在声明时占用内存。

内部表仅在程序运行时存在,因此在编写代码时,内部表必须以程序可以使用的方式进行结构化。 你会发现内部表的操作方式与结构相同。 主要区别是结构只有一行,而内部表可以有所需的行。

内部表可以由多个字段组成,对应于表的列,正如在 ABAP 字典中一样,使用多个字段创建表。 关键字段也可以与内部表一起使用,在创建这些内部表时,它们提供稍微更大的灵活性。 使用内部表,可以指定非唯一键,允许存储任意数量的非唯一记录,并且如果需要,允许存储重复记录。

内部表的大小或其包含的行数不是固定的。 内部表的大小根据与内部表相关联的程序的要求而改变。 但是建议保持内部表尽可能小。 这是为了避免系统运行缓慢,因为它努力处理大量的数据。

内部表用于许多目的:

  • 它们可用于保存以后可在程序中使用的计算结果。

  • 内部表还可以保存记录和数据,以便可以快速访问,而不必从数据库表访问此数据。

  • 他们是非常多才多艺。 它们可以使用任何数量的其他定义的结构来定义。  

内部表的种类:

  • 标准表,表类型为关键字​STANDARD TABLE​,系统为该表的每一行生成一个逻辑索引。填充标准表时,可以讲数据附加在现有行之后,也可以插入到指定的位置,程序对内表行的寻址操作可以通过索引或者关键字,另外,在对表进行插入,删除等操作时,个数据行在内存中的位置不变,系统仅重新排列个数据行的索引值。

  • 排序表,表类型关键字为​SORTED TABLE​,也具有一个逻辑索引,不同之处在于排序表总是按其关键字生序排列以后再存储,其访问方式与标准表相同。

  • 哈希表,表类型关键字为​HASHED TABLE​,没有索引,只能通过关键字来访问,系统用哈希算法管理表中的数据,因而其寻址一个数据行的时间与表的大小无关。

表关键字:

  • 如果内表行是结构体,则可以指定结构体中的某几个字段作为内表关键字,该字段不能是内表或者引用类型,但可以是嵌套体。
  • 如果内表的整个行都是由基本类型字段组成,则可以把内表整行指定为关键字。
  • 如果不指定任何关键字,则可以使用默认的标准关键字,该选项为默认选项。
  • 扁平结构内表的默认表关键字是非数字和非内表的组件字段,举例来说,一个内表有字段姓名(c 类型),年龄(n 类型)和工资(f 类型),则默认的关键字为姓名和年龄。
  • 如果内表的整个行都是单个基本类型组成,则默认关键字为整个行,如果内表字段含有内表类型字段,则没有默认关键字。

表的使用:

  1. SAP里面主要有三处类型的内表:​standard table​,​sorted table​,​hashed table
  2. 定义语法:​TYPES|DATA itab {TYPE|LIKE} tabkind OF {linetype|lineobj} [WITH KEY] [INITIAL SIZE n]​.
  3. standard table​,​sorted table​ 可以通过索引和关键字进行访问,​hashed table​ 只能通过关键字进行访问
  4. standard table​在增加或插入数据行时并不对数据行的特理地址进行重新排序存储,只是对其索引进行重表排列。​sorted table​ 在增加和插入数据行时要对数据存储的物理地址进行重新排列。
  5. hashed table​ 在检索数据里与数据行数无关,时间复杂度通常是 o(1) 的时间
  6. SAP 里内表的层次结构如下:

    any table
    index table           hashed table
    standard table     sorted table

any table​ 和 ​index table ​是抽象接口类型,不能用于定义具体的数据对象

 下面是一个例子:

append lines of it_tabA to lt_tabB.其实就是将内表A的值附到内表B,而且,B原有的数据也被保存着。算是添加
如果只是单纯的内表赋值:it_tabB[] = it_tabA[].

TYPES: BEGIN OF address,        
            street(20) TYPE c,        
            city(20) TYPE c,       
    END OF address.
DATA: BEGIN OF company,        
        name(20) TYPE c,        
        addresses TYPE address,      
    END OF company.
DATA: itab_company LIKE STANDARD TABLE OF company WITH NON-UNIQUE KEY
name.
DATA: wa LIKE company.

wa-name = 'china'.wa-addresses-street = 'aaa'.
wa-addresses-city = 'shanghai'.
APPEND wa TO itab_company.
LOOP AT itab_company  INTO wa.  
    WRITE: / sy-tabix,wa-name,wa-addresses-street,wa-addresses-city.
ENDLOOP.


wa-name = 'america'.
wa-addresses-street = 'ccc'.
wa-addresses-city = 'new york'.
INSERT wa INTO itab_company INDEX 1.
LOOP AT itab_company  INTO wa .  
    WRITE: / sy-tabix,wa-name,wa-addresses-street,wa-addresses-city.
ENDLOOP.


wa-name = 'america'.
wa-addresses-street = 'DDD'.
wa-addresses-city = 'new york'.
MODIFY itab_company[] INDEX 1 FROM wa.
WRITE: / '...............................'.
LOOP AT itab_company  INTO wa .  
    WRITE: / sy-tabix,wa-name,wa-addresses-street,wa-addresses-city.
ENDLOOP.

输出结果:

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值