当前位置:网站首页>SAP ABAP 内部表:创建、读取、填充、复制和删除-06
SAP ABAP 内部表:创建、读取、填充、复制和删除-06
2022-06-22 15:01:00 【雨天行舟】
SAP ABAP 内部表:创建、读取、填充、复制和删除-06
什么是内部表?
内部表用于从固定结构中获取数据,以便在 ABAP 中动态使用。内部表中的每一行都具有相同的字段结构。内部表的主要用途是用于在程序中存储数据库表中的数据并设置其格式。
在本教程中,您将学习:
- 什么是内部表?
- 什么是工作区?
- 内部工作台和工作区之间的区别 ?
- 内部表的类型
- 创建内部表
- 填充内部表
- 复制内部表
- 读取内部
- 删除内部表
什么是工作区?
工作区是单行数据。它们应具有与任何内部表相同的格式。它用于一次处理一行内部表中的数据。
内部工作台和工作区之间的区别 ?
一张图片胜过千言万语
内部表的类型
有两种类型的内部表。
- 带标题行的内部表
- 不带标题行的内部表。
带标题行的内部表
- 在这里,系统自动创建工作区。
- 工作区具有与内部表相同的数据类型。
- 此工作区称为 HEADER 行。
- 正是在这里,对表格内容的所有更改或任何操作都已完成。因此,可以直接将记录插入到表中或直接从内部表中访问。
不带标题行的内部表格 :
- 这里没有与工作台关联的工作区。
- 当我们需要访问此类表时,应显式指定工作区。
- 因此,无法直接访问这些表。
创建内部表
创建内部表的方法有很多种。让我们一一一看——
1.By 使用类型语句
现在,让我们使用 TYPE 语句创建一个内部表 itab。
语法是 –
Types : begin of line,
column1 type I,
column2 type I,
end of line.
例:
TYPES : begin of line,
empno type I,
empname(20) type c ,
end of line.
TYPES 语句创建定义的结构线。
要实际创建内部表,请使用以下命令-
Data itab type line occurs 10.
使用线条结构创建内部表。 除了声明内部表的结构外,OCCURRENCE 子句还定义了在主存储中维护的表条目数(在本例中为 10)。额外的记录被写出到分页区域,并可能影响性能
2.By 引用另一个表
您可以通过引用现有表来创建内部表。现有表可以是标准 SAP 表、Z 表或其他内部表。
语法-
Data <f> <type> [with header line].
示例-
DATA itab TYPE line OCCURS 10 with header line.
这里创建了一个带有标题行的类型行的内部表 itab。请注意,“带标题行”是可选的。
3.By 参考现有结构
语法-
Data <f> LIKE <struct> occurs n [with header line].
示例-
DATA itab LIKE sline OCCURS 10.
这里创建了一个与斜线结构相同的表itab
4.By 创建新结构
现在,让我们使用自己的结构创建一个内部表。默认情况下,此处使用标题行创建表。
语法 –
Data : Begin of <f> occurs <n>,
<component declaration>,
.................................,
End of <f>.
示例 –
Data : Begin of itab occurs 10,
column1 type I,
column2(4) type C,
column3 like mara-ernam,
End of itab.
创建内部表
填充内部表
现在我们已经成功创建了一些内部表,让我们看看如何用一些记录填充它们。有多种方法可用于填充表
1.逐行追加数据
第一种可用的方法是使用 APPEND 语句。
使用 APPEND 语句,我们可以将另一个工作区中的一行添加到内部表中,也可以向内部表添加一个初始行。
语法 –
APPEND [<wa> TO / INITIAL LINE TO] <itable>.
此处的工作区域或初始行附加到内部表<可编辑>。
系统变量 SY-TABIX 包含追加行的索引。
例:
Data: Begin of itab occurs 10,
col1 type C,
col2 type I,
end of itab.
Append initial line to itab.
结果 : ’ ’ ‘0’
初始行将使用其类型的正确值初始化的行添加到表中。这里,col1 是一个字符,col2 是一个整数。然后附加初始行,添加一行相对于列的数据类型初始化的行,即col1的空间和col2的0空间。
2.使用收集语句
COLLECT 是用于填充内部表的另一种形式的语句。通常,COLLECT 是在将行插入具有唯一标准键的内部表中时使用的。
可以用来计算节点
语法-
COLLECT [<wa> INTO] <itable>.
对于带有标题行的表,将省略 INTO 选项。假设已经有一个条目具有与您尝试追加的条目相同的键,则不会向表中添加新行,但会添加这两个条目的数值字段,并且只存在一个与该键对应的条目。SY-TABIX 的值将更改为原始条目所在的行。否则 COLLECT 的行为类似于 APPEND,SY-TABIX 包含已处理行的索引。
3.使用 INSERT 语句
INSERT 语句将行/工作区添加到内部表中。可以通过将 INDEX 子句与 INSERT 语句一起使用来指定要添加新行的位置。
语法
INSERT [<wa> INTO / INITIAL LINE INTO] <itable> [index <idx>].
在这里,工作区 & lt ; wa & gt ; 或 INITIAL LINE 入到索引 & lt ; idx & gt ; 处的内部表中 & lt ; 可编辑 & gt ; 。
复制内部表
可以使用 APPEND LINES 或 INSERT LINES 语句将一个内部表的内容复制到另一个内部表。更简单的方法是使用以下语法。
MOVE <itab1> To <itab2>.
OR
<itab1> = <itab2>.
它们将 ITAB1 的内容复制到 ITAB2。对于带有标题行的内部表格,我们必须使用[]来区分工作区。因此,要复制带有标题行的内部表的内容,语法变为,
itab1[] = itab2[].
读取内部表
我们现在熟悉了内部表的创建和用数据填充它们。现在,我们将了解如何实际使用数据或从内部表中检索数据。
1. 使用循环-尾环
访问或读取内部表的方法之一是使用 LOOP-ENDLOOP。
语法
LOOP AT <itable> [INTO <wa>]
...................................
ENDLOOP.
在这里,当您说LOOP AT ITABLE时,则内部表ITABLE将逐行读取。您可以在 LOOP-ENDLOOP 结构的任何部分访问该行的列的值。SY-SUBRC 的值设置为 0,即使只读取一条记录也是如此。
2. 使用读取
读取内部表的另一种方法是使用 READ 语句。
语法-
READ TABLE <itable> [INTO <wa>] INDEX <idx>.
此语句读取索引 指定的当前行或行。SY-TABIX 的值是行读取的索引。如果找到具有指定索引的条目,则 SY-SUBRC 设置为 0。如果指定的索引小于 0,则会发生运行时错误。如果指定的索引超过表大小,则 SY-SUBRC 设置为 4。
删除内部表
有许多方法可以从内部表中删除行。
1.删除循环中的行。
这是删除行的最简单方法。
语法
DELETE <ITABLE>.
此语句仅在循环中起作用。它将删除当前行。可以通过添加 WHERE 子句有条件地删除循环中的行。
2.使用索引删除行。
这用于从任何已知索引的内部表中删除行。
语法
DELETE <ITABLE> INDEX <IDX>.
索引为 IDX 的行将被删除。以下行的索引递减 1。
参考:https://www.guru99.com/all-about-sap-internal-tables.html
边栏推荐
- ORB_VI思想框架
- [Shanda conference] software performance optimization and bug repair
- Applet development - Custom expiration cache
- 各位学弟学妹,别再看教材了,时间复杂度看这篇就好了
- 谷歌浏览器的小细节
- 让pycharm项目里面的文本模板支持jinjia2语法
- UK considers listing arm in London based on national security
- [Huawei cloud to Jian Zhiyuan] the winning list of essay solicitation is released!
- New design of databend SQL planner
- [Shanda conference] definitions of some basic tools
猜你喜欢

C# 实现插入排序

odoo本地文档功能开发记录

mysql - sql执行过程

Unity game optimization (version 2) learning record 8

ironSource Luna 推出苹果搜索广告限时优惠,注册即享3个月免费服务

Discover the number of media new users can insert

Quickly play ci/cd graphical choreography

Scala language learning-05-a comparison of the efficiency of recursion and tail recursion

Linux安装mysql

Jenkins 通过检查代码提交自动触发编译
随机推荐
C # implements insertion sorting
Make the text template in pycharm project support jinjia2 syntax
Unity game optimization (version 2) learning record 8
odoo本地文档功能开发记录
How can ordinary people make 1million yuan a year?
信创研究:国产数据库聚焦信创市场,华为Gauss有望成为最强
84. (cesium chapter) movement of cesium model on terrain
让pycharm项目里面的文本模板支持jinjia2语法
School enterprise alliance is on the way! Huawei cloud gaussdb has come to universities again
10款超牛Vim插件,爱不释手了
期货怎么开户?网上期货开户安全吗?
在JFlash中添加未知类型的单片机
pymssql模块使用指南
Unity游戏优化(第2版)学习记录8
天翼云乘风新基建,构建数字化转型“4+2”能力体系
[leetcode] 9. Palindromes
十九、Xv6上下文切换(上下文切换的实现;状态机的封装与恢复)
Simulation of vector
【山大会议】多人视频通话 WebRTC 工具类搭建
解决mysql远程登录报权限问题