SAP ABAP - 新建内部表

  • 简述

    DATA语句用于声明内表。必须告诉程序表的开始和结束位置。所以使用BEGIN OF语句然后声明表名。此后,使用 OCCURS 添加,后跟一个数字,此处为 0。OCCURS 告诉 SAP 正在创建一个内部表,0 表示它最初不会包含任何记录。然后它会随着数据的填充而扩展。
    以下是语法 -
    
    DATA: BEGIN OF <internal_tab> Occurs 0,
    
    让我们在新行上创建字段。例如,创建声明为 LIKE ZCUSTOMERS1-name 的“名称”。创建另一个名为“dob”的字段,如 ZCUSTOMERS1-dob。最初为内部表中的字段名称指定与在其他地方创建的其他字段相同的名称是很有用的。最后,用“END OF <internal_tab>”声明内部表的结尾。如下面的代码所示 -
    
    DATA: BEGIN OF itab01 Occurs 0,
       name LIKE ZCUSTOMERS1-name,
       dob LIKE ZCUSTOMERS1-dob, 
    END OF itab01.
    
    这里“itab01”是在 SAP 中创建临时表时常用的简写。OCCURS 子句用于通过声明表的字段来定义内部表的主体。使用 OCCURS 子句时,您可以指定数字常量“n”来确定额外的默认内存(如果需要)。OCCUR 0 子句使用的默认内存大小为 8 KB。现在已经创建了内表的结构,可以编写代码来填充记录。
    可以使用或不使用标题行创建内部表。要创建带有标题行的内部表,请在内表定义中的 OCCURS 子句之前使用 BEGIN OF 子句,或者在 OCCURS 子句之后使用WITH HEADER LINE 子句。要创建没有标题行的内部表,请使用 OCCURS 子句而不使用 BEGIN OF 子句。
    您还可以使用 TYPES 语句创建内部表作为本地数据类型(仅在当前程序的上下文中使用的数据类型)。此语句使用 TYPE 或 LIKE 子句来引用现有表。
    创建内部表作为本地数据类型的语法是 -
    
    TYPES <internal_tab> TYPE|LIKE <internal_tab_type> OF 
       <line_type_itab> WITH <key> INITIAL SIZE <size_number>.
    
    这里<internal_tab_type>指定内部表<internal_tab>的表类型,<line_type_itab>指定内部表行的类型。在 TYPES 语句中,可以使用 TYPE 子句将内表的行类型指定为数据类型,使用 LIKE 子句将行类型指定为数据对象。为内部表指定键是可选的,如果用户未指定键,SAP 系统将定义具有任意键的表类型。
    INITIAL SIZE <size_number> 通过为其分配初始内存量来创建内部表对象。在前面的语法中,INITIAL SIZE 子句为 size_number 表行保留内存空间。每当声明内部表对象时,表的大小不属于表的数据类型。
    Note− 首次填充内部表时消耗的内存要少得多。
  • 例子

    步骤 1− 通过执行 SE38 事务代码打开 ABAP 编辑器。出现 ABAP 编辑器的初始屏幕。
    步骤 2− 在初始屏幕中,输入程序名称,选择源代码单选按钮,然后单击创建按钮创建新程序。
    步骤 3− 在“ABAP:程序属性”对话框中,在“标题”字段中输入程序的简短描述,从“属性”组框中的“类型”下拉菜单中选择“可执行程序”选项。单击“保存”按钮。
    步骤 4− 在ABAP编辑器中编写以下代码。
    
    REPORT ZINTERNAL_DEMO. 
    TYPES: BEGIN OF CustomerLine, 
    Cust_ID TYPE C, 
    Cust_Name(20) TYPE C, 
    END OF CustomerLine. 
     
    TYPES mytable TYPE SORTED TABLE OF CustomerLine  
    WITH UNIQUE KEY Cust_ID. 
    WRITE:/'The mytable is an Internal Table'. 
    
    步骤 5− 照常保存、激活并执行程序。
    在此示例中,mytable 是一个内部表,并且在 Cust_ID 字段上定义了唯一键。
    上面的代码产生以下输出 -
    
    The mytable is an Internal Table.