JSRUN 用代码说话

创建内部表

编辑教程

创建内部表

DATA语句用于声明一个内部表。 程序必须告知表的开始和结束位置。 所以使用BEGIN OF语句,然后声明表名。 之后,使用OCCURS添加,后跟一个数字,这里为0. OCCURS告诉SAP正在创建一个内部表,0表示它最初不包含任何记录。 它将随着它填充数据而扩展。

以下是语法

DATA: BEGIN OF <internal_tab> Occurs 0,

让我们在一个新行上创建字段。 例如,创建声明为LIKE ZCUSTOMERS1-name的\'name\'。 创建另一个名为“dob"的字段,LIKE ZCUSTOMERS1-dob。 最初给内部表中的字段名称与其他地方创建的其他字段相同的名称很有用。 最后,使用“END OF< internal_tab&gt ;."声明内部表的结尾,如下面的代码所示:

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子句之前使用OCCURS子句之前的BEGIN OF子句或WITH HEADER LINE子句。 要创建没有标题行的内部表,请使用不带BEGIN OF子句的OCCURS子句。

您还可以使用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表行保留一个内存空间。 每当声明内部表对象时,表的大小不属于表的数据类型。

注意 - 首次填充内部表时消耗的内存大大减少。

例子

步骤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.
JSRUN闪电教程系统是国内最先开创的教程维护系统, 所有工程师都可以参与共同维护的闪电教程,让知识的积累变得统一完整、自成体系。 大家可以一起参与进共编,让零散的知识点帮助更多的人。
X
支付宝
9.99
无法付款,请点击这里
金额: 0
备注:
转账时请填写正确的金额和备注信息,到账由人工处理,可能需要较长时间
如有疑问请联系QQ:565830900
正在生成二维码, 此过程可能需要15秒钟