ABAP中的内表概要小结

简单内表操作实例:
REPORT  z_simple_itab.
DATA: begin of line,  "work area
      num TYPE i,
      sqr TYPE i,
      end of line,  "internal table
      itab LIKE STANDARD TABLE OF line WITH KEY table_line.
DO 5 TIMES.
  line-num = sy-index.
  line-sqr = sy-index ** 2.
  APPEND line TO itab.
ENDDO.
LOOP AT itab INTO line.
  WRITE: / line-num, line-sqr.
ENDLOOP.

CLEAR itab.


定义内表语法:

TYPES|DATA itab (TYPE|LIKE) tabkind
          OF {linetype|lineobj}
          [WITH key]
          [INITIAL SIZE n].
tabkind:内表种类,linetype:行类型,key:表关键字

1,内表种类:
    <1>,标准表:表类型关键字为STANDARD TABLE,有索引
    <2>,排序表:表类型关键字为SORTED TABLE,有索引(排序表总是按其表关键字升序排序后再进行存储)
    <3>,哈希表:表类型关键字为HASHED TABLE,无索引(只能通过关键字访问,系统用哈希算法管理表中数据)
    <4>,一般类型:索引表INDEX TABLE和任意表ANY TABLE
假设t_addr是一个结构表,创建标准表:
TYPE t_addr_table TYPE STANDARD TABLE OF t_addr.
创建排序表:
TYPE t_addr_table TYPE SORTED TABLE OF t_addr.

2,行结构:内表的行结构可以是由任意的类型ABAP数据类型组成。一般来说,内表的行类型大多数是结构体,或者是引用数据字典中的结构形成的,但由单个基本类型或者引用类型组成的数组也常常在程序中出现。如果内表的行结构中还包含有内表类型,则可以构造出十分复杂的数据类型

3,内表的表关键字:在访问内表和内表排序的过程中起着相当重要的作用,使用WITH key指定表关键字,也可以不指定,则系统会使用默认(标准)关键字。
几种形式:

    *如果内表行结构是结构体,则可以指定结构体中的某几个字段作为内表关键字,该字段不能使内表或者引用类型,但可以是嵌套结构体。

    ... WITH [UNIQUE|NON-UNIQUE] KEY comp1 ... compn

    *如果内表的整个行都是由基本类型字段组成,则可以把内表整行指定为表关键字。如果内表字段本身是结构化类型,则不适指定整行作为关键字段。

    ... WITH [UNIQUE|NON-UNIQUE] KEY TABLE LINE

    *如果不指定任何关键字,则可以使用默认的标准关键字,该选项为默认选项。

    ... WITH [UNIQUE|NON-UNIQUE] DEFAULT KEY

    扁平结构内表的默认(标准)表关键字是非数字和非内表的组件字段。
    举例来说,一个内表有字段姓名(c类型),年龄(n类型)和工资(f类型),则默认的关键字为姓名和年龄。如果内表的整个行都是单个基本类型组成,则默认关键字为整个行,如果内表字段含有内表类型字段,则没有默认关键字。

4.UNIQUE/NON-UNIQUE
    选项UNIQUE|NON-UNIQUE决定内表是否允许存在相同关键字的记录,即如果指明为UNIQUE KEY,则通过表关键字能够唯一确定内表的行记录,在程序中不能插入具有相同关键字的多行记录;
    1.标准表只能指定为NON-UNIQUE,可以不指定,不指定默认就是NON-UNIQUE。
     2.排序表可以为UNIQUE,也可以为NON-UNIQUE.
    3.哈希表只能是UNIQUE,其必须指定UNIQUE关键字,如果允许相同的关键字记录,则hash值就相同,所以只能是UNIQUE,不允许重复的关键字存在。

5,初始化内存大小:
    ... INITIAL SIZE n ...(n值可以为0或者任何正数,除非系统管理员限制一个最大值)

定义内表实例:
REPORT  ZTCXHTEST_INTERNAL_TABLE.
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 HASHED TABLE
                                OF company
                                WITH UNIQUE KEY name.

DATA: itab_company_sorted LIKE SORTED TABLE
                                OF company
                                WITH UNIQUE KEY name.

猜你喜欢

转载自blog.csdn.net/littlemangoyx/article/details/80135353
今日推荐