结构体与内表的定义

    • 结构体Structure
    • 内表Internal Table

结构体Structure

结构体是一种数据类型,它是把多个具有类似功能性质的简单类型变量打包成一个整体,方便在编写代码时调用这些变量,其存在的意义就是为了方便程序代码的管理与操作。
结构体不属于数据字典对象,在程序运行时会被作为临时对象创建。

定义结构体实例1

* 先声明结构体类型,TYPES关键字一般用于声明某种数据类型
Types: BEGIN OF t_ren,
	   name TYPE c LENGTH 20,
	   country TYPE c LENGTH 15,
	   age TYPE i,
	END OF t_ren.
	
* 然后定义结构体变量,DATA关键字一般用于定义某个变量
DATA gs_people TYPE t_ren.

* 调用并赋值结构体的变量
gs_people-name = 'Cruise'.
gs_people-country = 'China'.
gs_people-age = 28.

定义结构体实例2


* 使用DATA: BEGIN OF 关键字直接声明并定义一个结构体变量
DATA: BEGIN OF gs_people,
	   name TYPE c LENGTH 20,
	   country TYPE c LENGTH 15,
	   age TYPE i,
	END OF gs_people.

* 调用并赋值结构体的变量
gs_people-name = 'Cruise'.
gs_people-country = 'China'.
gs_people-age = 28.

相关参考:ABAP开发基础知识:4) 结构体(Structure)

内表Internal Table

内表就是指在内存中存在的一张表,其存在原因在于我们直接在数据库中取数速度慢,而内存的速度远远高于存储数据的硬盘的速度,我们将数据库表拷贝至存在于内存中的内表上,再在内表上进行查询、取数等操作,效率将大大提高。

  1. 内表是一个动态二维数组,其列结构的列数是固定不变的,而行结构的行数会根据存储数据的量动态增长,所以内表的创建时一般不需要指定暂用内存的大小。
  2. 内表支持循环对每行数据进行操作,也支持整体操作
  3. 内表是一种临时的表,仅仅在程序运行期间在内存存储数据、
  4. ABAP有三种内表类型:标准表、哈希表、排序表。

定义内表的实例1

*先TYPES定义一个结构体数据类型
TYPES:BEGIN OF s_type,
	   no(6) TYPE c,
	   name(10) TYPE c,
	   part(16) TYPE c,
  END OF s_type.

* 用关键字TYPE STANDARD TABLE OF参考结构体类型创建内表,表示内表的列结构跟参考的结构体类型一样

DATA gt_itab TYPE STANDARD TABLE OF s_type.
DATA gt_itab TYPE TABLE OF s_type.

* TYPE STANDARD TABLE OF = TYPE TABLE OF,都是用于定义标准内表,所以上述两条语句的效果是一致的
* TYPE SORTED TABLE OF 定义排序内表
* TYPE HASHED TABLE OF 定义哈希内表

标准定义内表的实例2

* 先用DATA直接声明并定义结构体变量,此时的结构体变量也可以称之为内表的工作区Work Area
DATA: BEGIN OF s_type ,
  	   no(6) TYPE c,
  	   name(10) TYPE c,
  	   part(16) TYPE c,
  END OF s_type.

* 用关键字LIKE参考结构体变量创建内表,表示该内表的列结构跟参考的结构体变量一样
DATA gt_itab LIKE STANDARD TABLE OF s_type.
DATA gt_itab LIKE TABLE OF s_type.
* LIKE STANDARD TABLE OF = LIKE TABLE OF ,都是用于参考结构体变量来定义内表

对比实例1、2定义内表的形式,实例1的内表本质上是用TYPE声明了一种变量类型,需要为它赋值、初始化。而实例2的内表本质上是一个已经初始化变量,创建时已经分配了内存空间。

定义内表的实例3——老版本定义方式

  1. OCCURS语句是Release 3.x之前版本一直使用的带表头的内表定义方式,在Release 4.0之后的版本开始使用Initial Size语句代替Occurs语句了。
  2. OCCURS意思是告诉SAP正在创建一个内表并未这个内表分配多大的空间,可以简单的理解为为内表分配了若干行的空间,0表示它最初不包含任何记录,它将随着它填充数据而扩展。
  3. OCCURS定义的内表与标准表的形式相同,但是不能定义排序内表哈希表内表
  4. OCCURS定义的内表,即使没有WITH HEADER LINE语句,默认也包含表头。
DATA: BEGIN OF line OCCURS 0,
      LINE1 TYPE I,
      LIEN2 TYPE I,
  END OF line.

更多推荐

SAP ABAP 结构体Structure、内表Internal Table定义的相关辨析