SAP ABAP的内表及定义内表的方法

1.内表定义

内表是内存中建立的一个临时表,它同样是程序运行中被临时创建的一个存储空间,内表是一个变量,都具有插入,修改,删除等操作,程序跑完了,就会被释放。

2.内表的分类

内表实际上分为一般内表(standard table),排序表(sorted table),哈希表(Hashed table)。
标准表:在增加或插入数据行时并不对数据行的地址进行重新排序存储。
排序表:在增加和插入数据行时要对数据存储的地址进行重新排列。
哈希表:只能通过关键字进行访问,在检索数据里与数据行数无关.
with [ unique | non-unique] key comp1…compN " 排序表可以使用
with [unique | non-unique] key table_line

3.工作区

with header line:定义了带工作区的内表。
工作区:内表按照行进行访问,必须使用某个区域作为与表格互相传输的接口。
在内表中读取数据时,已定址的行内容覆盖工作区的内容。讲数据写入内表时,必须首先在工作区中输入数据。

4.内表的定义方法
4.1 参考自定义类型

types: begin of <ty_itab>

end of <ty_itab> ”定义类型
data type table of <ty_itab>.

4.2 参考表类型1

types:<t_itab> type <ty_itab> occurs 0. "定义表类型
data type <t_itab>

4.3 参考表类型2

types:<t_itab> type table of <ty_itab>. “定义表类型
data type <t_itab>.

4.4 直接定义内表

data直接定义内表
DATA: BEGIN OF OCCURS

END OF ITAB.

4.5 参考已有的表和结构

参考定义
data type table of <structure/table>

4.6 使用结构来继承

使用include structure来继承
DATA:BEGIN OF OCCURS 0
INCLUDE STRUCTURE .
DATA: TYPE .

DATA:END OF .

4.7查看内表属性

通过DESCRIBE获得内表的行
DESCRIBE TABLE LINES N

5.demo
以下分别是标准表,排序表,哈希表的例子。
DATA ITAB7 TYPE STANDARD TABLE OF zschange.
DATA ITAB8 TYPE SORTED TABLE OF ZLLD WITH UNIQUE KEY WERKS.
DATA ITAB9 TYPE HASHED TABLE OF  ZLLD WITH UNIQUE KEY WERKS.
5.1 直接定义

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

REPORT Z_HELLOWOLD.

DATA: BEGIN OF itab05 Occurs 0,
  field1 type char10,
   field2 type int2,
END OF itab05.
5.2 参考结构

您还可以使用TYPES语句创建内部表作为本地数据类型(仅在当前程序的上下文中使用的数据类型)。
结构定义

TYPES:BEGIN OF TY_itab1,   " 结构类型
   field1 type char10,
   field2 type int2,
  END OF ty_itab1.

TYPES: t_itab1 type TY_itab1 OCCURS 0.  "表类型 
TYPES: t_itab2 type TABLE OF TY_itab1.  "表类型
DATA: itab1 type TABLE OF TY_itab1,    " 三种内表,
      itab2 TYPE t_itab1,
      itab3 type t_itab2.
     
5.3 参考现有的表和结构
 DATA itab4 like itab1.
 DATA ITAB6 TYPE TABLE OF ZLLD. “ZLLD是数据库表
 DATA ITAB7 TYPE STANDARD TABLE OF zschange. " zschange是结构.

以下是本包含一个表的定义

DATA: BEGIN OF lt_rkwa  OCCURS 1.
       INCLUDE STRUCTURE RKWA.
 DATA: MAKTX LIKE MAKT-MAKTX,
       LFA1 LIKE LFA1-NAME1,
       END OF LT_RKWA. 
5.4 根据类型定义成内表和工作区,不用with herder line
TYPES: BEGIN OF ty_item,
         matnr     LIKE marc-matnr,
         maktx     LIKE makt-maktx,
         werks     LIKE marc-werks,
         lifnr     LIKE eina-lifnr,
         name1     LIKE lfa1-name1,
         major     LIKE ztesoppap-major,
         esostu    LIKE ztesoppap-esostu,
         esono     LIKE ztesoppap-esono,
         esodate   LIKE ztesoppap-esodate,
         ppapstu LIKE ztesoppap-ppapstu,
         ppapno    LIKE ztesoppap-ppapno,
         ppapdate  LIKE ztesoppap-ppapdate,
         dled      LIKE ztesoppap-dled,
       END OF ty_item.

DATA: item TYPE STANDARD TABLE OF ty_item ,
       wa_item type ty_item .
6.总结

在实际应用中,我们更喜欢使用第二种。一般不使用带表头的内表。

  • 4
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ABAP是一种编程语言,用于SAP系统中的应用程序开发。在ABAP中,动态内表是一种特殊类型的内表,它允许在运行时动态地添加、删除和修改表格的行和列。动态内表是通过使用ABAP内部表类型"ANY TABLE"来实现的。 要处理动态内表数据,您可以按照以下步骤进行操作: 1. 定义动态内表:使用内部表类型"ANY TABLE"来定义动态内表。例如: DATA: dynamic_table TYPE STANDARD TABLE OF ANY. 2. 创建动态行结构:定义一个结构体,用于描述动态内表中的行。这个结构体可以包含任意数量和类型的字段。例如: DATA: dynamic_row TYPE REF TO data, dynamic_row_structure TYPE STANDARD TABLE OF string. 3. 添加行到动态内表:使用CREATE DATA语句来创建动态行,并将其添加到动态内表中。例如: CREATE DATA dynamic_row TYPE HANDLE dynamic_row_structure. ASSIGN dynamic_row->* TO <dynamic_row>. APPEND <dynamic_row> TO dynamic_table. 4. 访问动态内表数据:使用ASSIGN语句将动态行的字段赋值给变量,并对其进行操作。例如: FIELD-SYMBOLS: <field> TYPE any. ASSIGN COMPONENT 'FIELD_NAME' OF STRUCTURE <dynamic_row> TO <field>. IF sy-subrc = 0. <field> = 'VALUE'. ENDIF. 5. 删除动态内表行:使用DELETE语句从动态内表中删除行。例如: DELETE dynamic_table INDEX i. 6. 修改动态内表行:使用MODIFY语句修改动态内表中的行。例如: MODIFY dynamic_table INDEX i FROM <dynamic_row>. 以上是处理ABAP动态内表数据的基本步骤。根据您具体的需求,您可以进一步扩展和优化这些步骤。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值