5.ABAP结构体和内表

总学习目录请点击下面连接

SAP ABAP开发从0到入职,冷冬备战-CSDN博客


目录

5.1.结构化数据对象

定义

如何引用结构化的数据对象

拷贝

实战练习

创建

拷贝

调试代码

5.2.内表

行类型

表种类

存取类型

表类型

如何在本地定义表类型

内表三种可能的定义

内表的5种操作

内表批量处理

标准表和哈希表排序

刷新

清除

释放

内表表头的好处和坏处

5.3.使用内表操作

内表三种定义方式

使用ABAP字典

如何创建内表对象

使用结构来定义内表

不使用ABAP字典中的类型来定义

5种内表操作

APPEND

INSERT

READ

使用with table key

MODIFY更新

DELETE删除

内表多行操作

循环LOOP

CLEAR

FREE

where

修改一个表中所有数据的某个字段。

删除特定的数据


5.1.结构化数据对象

目标:认识结构化的数据类型的定义,使用调试器来分析结构化的数据对象。

能定义结构化数据对象,能够使用ABAP语句进行操作数据对象。

定义

结构化数据变量,就是使用一个变量来对应多个值,现在感觉有点像数组或者set map什么的。

结构中的元素可以嵌套,还可以有内表。

有个gs_f变量,里面有6个空间。

定义方法,使用DATA+名字+type+类型

也可以使用

types BEGIN of 结构名

types。。。。

types EDN of 结构名,定义结构,类似C语言结构体。

定义中间使用逗号进行分割,最终以句号结尾。

中间定义的每个元素都需要指定类型。

如何引用结构化的数据对象

首先是有一个对象的名称,每个对象里面还有很多元素也都有名称。

引用时,如果要引用对象中一个单值的化,使用 “对象名”+“-”+“里面一个部件的名字”。

拷贝

MOVE-CORRESPONDING语句能够一次性拷贝一个结构中的内容到另一个结构中,使用这个语句的时候,只有两个结构中间同名的组件被有效拷贝,其他不同名的部分保持不变。对单个值的分配,可以使用MOVE语句。

如果两个对象结构完全一样,也可以使用等于号来进行赋值。

在调试的时候,双击结构化数据对象的名字,就会被复制到右边区域,可以看到它的一个结构图。

实战练习

创建

先创建好一个新项目

简单定义一个结构

有三个变量,名字,性别和高度。

用DATA创建对象,并使用对象名-元素,来获取内部元素。

拷贝

新创建一个对象,使用struc01的值对他进行赋值。

发现可行。再使用MOVE-CORRESPONDING进行拷贝

同样实现了拷贝操作。

调试代码

打好断点

调试进入代码

双击结构体名称,查看结构

5.2.内表

学习目标:如何定义内表,使用ABAP语句操作内表,调试器中调试查看内表结构和内容。

内表是一种数据对象,运行时可以在内表中保存多个同一结构数据对象,数据记录的数量只和系统安装的容量有关。

ABAP运行时系统动态管理内表的大小,作为开发,不需要做任何事情。

内表中的单个数据称为表行或者表的条目。

一行中单个组件被称为内表的字段或者列

内表行的类型能够通过任何数据类型被指定,表类型描述表条目的行结构。

内表中的数据都有相同结构,所以内表称为结构化方式处理大数据集的一个简单途径,

可应用于:

1.从数据库表或者顺序文件中存留数据为将来的处理

2.为屏幕或打印输出格式化

3.为使其他服务格式化数据

行类型

就是行的结构,下图列出了行有那些字段。一般是一个多字段的结构。甚至是多个更复杂的结构。

内表的键由键字段包括他们的顺序构成,键字段的顺序被用来为按照键排序。按照存取类型,键可以被定义为唯一或者不唯一。

表种类

内表的表种类一般是根据用途来区分的。

分为标准表,排序表,和哈希表。

根据用途,对这个三种表进行了不同的实现。

存取类型

如果表条目可以通过指定对应的行号来存取,就叫做,按索引存取。

如果通过键值来存取条目,就叫做按键存取。

基于存取类型,应该选择合适的表。

使用标准表:索引存取和行号存取都可以选。

使用排序表:表的记录以键的顺序自动排序。如果需要按键排序就选这个。

使用哈希表:使用散列法程序排序,不能按索引存取。如果内表很大,并且要只通过键存取。

表类型

内表的类型称为表类型。

表类型,能够在ABAP字典中进行定义,或者在本地进行定义

如何在本地定义表类型

types 后面跟表类型名字,然后type table of 后面跟with 。。这个可以省略,

内表类型是在结构的基础上面进行定义。

下面是更详细的代码。

第一个部分是一个结构类型。

第二个部分是应用上面的结构类型来定义了一个内表。然后由三个可选的表类型。后面with+键,这些是可选项。

内表三种可能的定义

第一种是表准表,很简洁。 名字+类型

第二种是详细的定义,是类型+键。

第三种后面跟的是结构类型,使用的是type table of。如果是普通类型就是type。

内表的5种操作

这5个操作可以处理内表单条的记录。

处理一行的时候,需要跟这个内表结构一样的结构变量,这个结构变量被称为工作区。

操作都是,操作关键字+工作区 +关键词+ 内表。

Append:追加结构的内容到内表最后。

Insert:插入一行记录到内表。标准表会放到最后,排序表会按顺序插入。

Read:将内表中的一行拷贝到工作区中。

Change:使用工作区中的内容来覆盖内表里面的内容。

Dlete:删除内表行。

除了这5种操作

Collect:累加,将结构中的内容加到具有相同键的一行。只能为非键字段都是数字的表所用。

内表批量处理

LOOP循环:从内表的第一行开始,逐行把内表中的行记录放到into后面指定的工作区中。

第二行是删除,删除满足逻辑条件的所有内表的行。

第三行是插入行,拷贝一个内表的内容到另一个内表,和插入的那个语句有很大区别,一个是操作单个内表,一个是操作多个内表

第四行是附加行,把一个内表多行的内容,附加到另一个标准表的后面。

可以把需要的数据写入工作区,然后使用insert语句把他插入到内表

可以使用loop逐行读取并编辑内表行的内容,在运行中,系统字段sy-subrc包含了当前表条目的行号。

在例子中,所有内表顺序的被处理并使用write打印

如果要在LOOP过程中修改当前表行的内容,首先在工作区中修改行的拷贝,并使用MODIFY语句把它写回到当前的表行,语法是。

MODIFY itab FROM wa.

loop循环中,可以使用from-to指定行来限制存取,read table中可以使用index来指定需要的行记录行号。

对于loop循环,可以使用where 语句来限制条件 ,不符合条件的就不进入

使用read读取内表行时,额可以使用with table key指定整个键值,如果有一个对应的被找到了,返回码,sy-subrc被设置为0. with key 返回符合条件的第一条记录,with table key 记录数据不唯一。

标准表和哈希表排序

可以按照表键或者列使用sort语句进行排序,如果都没有

ascending是升序,descending是降序,只作用于前面紧挨的一个字段。默认asc

刷新

删除内表的整个内容,部分先前用过的内存依然为将来插入可用。

语句 pefresh 表名

清除

对于没有表头的内白哦,相当于刷新,如果有就只是初始化表头。

释放

删除内表整个内存并释放使用过的内存。

语句free 内表名

在调试器中,可以通过双击来追踪和显示内表的内容。

在table标签下面显示内表内容。

在定义内表时,使用附加语句with header line 我们创建了带表头行的内表,那么这个内表就会带有一个表头

表头的名字和内表同名,是内表的一个工作区。

内表表头的好处和坏处

内表表头就是内表的一个工作区,我们不用单独定义了。但是现在不建议这种方式,会影响可读性。

1.自动生成的和内表同名,可读性差

2.嵌套数据对象不能使用表头,ABAP对象也不能使用表头。

如果带头行内表称为itbab,那么itab-表字段被用来定位工作区中对应的字段

我们使用itab访问表的主体。

内表前面的一些操作和效果:进行了表的复制。使用表头语法没有问题,但不提倡银行

5.3.使用内表操作

首先打开一个程序

内表三种定义方式

使用ABAP字典

可以通过表ABAP字典中的表类型来定义

进入字典

搜索这个表类型BC402_T_FLIGHTS,这个是ABAP字典中的一个表类型。但我这里没有搜搜到,有可能是主播自己创建的。

如何创建内表对象

语法: DATA + 对象名+type +表类型

使用结构来定义内表

同样从ABAP字典中找到一个结构

语法: DATA + 对象名+ type table of+表类型

区别使用结构定义需要table of

不使用ABAP字典中的类型来定义

先创建一个结构体,然后同样的语句。

5种内表操作

APPEND

创建一个工作区并进行复制,然后appen到内表里面

调试一下,看值部分是0*4表示目前里面存了0条数据

下一步

可以看到已经有一条信息存入了

刚才工作区的值都追加进去了。

值也变为了1*4

INSERT

在标准表中append和insert是一样的

运行发生了报错

原因是使用insert时,需要指定一个index

当不够3时会放到最后一个

测试放到第一位。

发现找到了合适的位置,插入了进去。插入的位置就是咋们指定的地方。

READ

通常习惯呢,在read的之前把工作区清理空。

直接clear+工作区

调试查看,clear之后,工作区直接被清空,只有初始值。

确实取到了正确的值

使用with table key

使用前也需要清理工作区。

查看效果

sy-subrc=0说明读取成功

进去查看结果,成功读到了

with key也是可以读到记录的。

在read table之后要判断一下sy-subrc,

如果不是0,就要输出一下报错信息。

MODIFY更新

现在可以在内表中读取到某一行的记录,接下来尝试在工作区中更改这一行的记录。

使用MODIFY 列表 from 工作区

修改前

修改后

DELETE删除

delete 内表 index + 行号

就可以删除指定的一行了。

内表多行操作

再定义一个内表。

相同结构可以直接内拷。

这样就可以了。

调试一下OC4有四条记录

OC3只有三条记录

循环LOOP

语句: LOOP AT GT_OC4 INTO WA_OC3.

成功循环了

修改工作区中的值,先修改,然后进行更新。

这里没有写行号,因为有一个指针默认指向当前行,可以直接用

SY-INDEX这个是当前循环的序号

可以通过它来修改

SY-TABIX 表示内表当前行

运行

发现都修改成功了

CLEAR

内表数量如果过大,可以使用clear

发现数据都没有了,但是内存空间还没有完全释放。

如果有表头就清除不了了

可以加一个【】

clear 表名【】,就可以清空了。

FREE

完全清除一个表的数据和所占用的内存空间

FREE + 表名

where
修改一个表中所有数据的某个字段。

MODIFY GT_OC4 FROM WA_OC3 TRANSPORTING HIGH WHERE NAME+(4) = 'ABAP'.

name+(4)表示前四个字母。

都修改成功了

删除特定的数据

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/934286.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C#搭建WebApi服务

1,OWIN的介绍 OWIN 的全称是 “Open Web Interface for .NET”, OWIN 在 .NET Web 服务器和 .NET Web 应用之间定义了一套标准的接口, 其目的是为了实现服务器与应用之间的解耦,使得便携式 .NET Web 应用以及跨平台的愿望成为现实…

unity 2D像素种田游戏学习记录(自用)

一、透明度排序轴 改变sprite的排序方式,默认按照z轴进行排序(离摄像机的远近)。可以将其改变成y轴的排序方式,这样可以使2D人物走在草丛的下方就不被遮挡,走在草丛上方就被遮挡,如下图。 在项目设置-图形…

K8S服务突然中断无法访问:报The node had condition: [DiskPressure]异常

一、背景 程序在运行过程中,突然无法访问,发现后台接口也无法访问;查看kuboard,发现报如下异常:The node had condition: [DiskPressure]. 继续查看磁盘使用率,发现系统盘使用率已经高达93%。问题前后呼应…

VLDB 2024 | 时空数据(Spatial-temporal)论文总结

VLDB 2024于2024年8月26号-8月30号在中国广州举行。 本文总结了VLDB 2024有关时空数据(time series data)的相关论文,主要包含如有疏漏,欢迎大家补充。 🌟【紧跟前沿】“时空探索之旅”与你一起探索时空奥秘&#xf…

GTC2024 回顾 | 优阅达携手 HubSpot 亮相上海,赋能企业数字营销与全球业务增长

从初创企业入门到成长型企业拓展,再到 AI 驱动智能化运营,HubSpot 为企业的每步成长提供了全方位支持。 2024 年 11 月下旬,备受瞩目的 GTC2024 全球流量大会(上海)成功举办。本次大会汇聚了全国内多家跨境出海领域企业…

如何使用go语言的gin库来搭建一个属于自己的网页版GPT

我们将会使用go语言的gin库来搭建一个属于自己的网页版GPT 一、准备工作 我们需要使用到ollama,如何下载和使用[ollama](Ollama完整教程:本地LLM管理、WebUI对话、Python/Java客户端API应用 - 老牛啊 - 博客园)请看这个文档 有过gin环境的直接运行就可…

用户登录流程详解

目录 前言1. 登录请求的发起1.1 表单设计与数据收集1.2 请求发送与状态反馈 2. 验证码校验2.1 验证码的生成与展示2.2 验证码的校验机制 3. 登录前置校验3.1 检查账户状态3.2 登录频率限制 4. SS认证管理器的用户校验4.1 密码校验机制4.2 用户角色与权限检查 5. 登录成功后的处…

虚拟机与Xshell5和Xftp4连接与虚拟机克隆

虚拟机与Xshell5和Xftp4连接与虚拟机克隆 虚拟机与Xshell5和Xftp4连接 虚拟机与Xshell5连接 下载Xshell5后启动出现如下界面,点击新建 新建会话输入虚拟机命名,如master,主机输入虚拟机IP,xxx.xxx.xxx.xxx然后确认,…

【大模型系列篇】LLaMA-Factory大模型微调实践 - 从零开始

前一次我们使用了NVIDIA TensorRT-LLM 大模型推理框架对智谱chatglm3-6b模型格式进行了转换和量化压缩,并成功部署了推理服务,有兴趣的同学可以翻阅《NVIDIA TensorRT-LLM 大模型推理框架实践》,今天我们来实践如何通过LLaMA-Factory对大模型…

最大值和最小值的差

最大值和最小值的差 C语言代码C 语言代码Java语言代码Python语言代码 💐The Begin💐点点关注,收藏不迷路💐 输出一个整数序列中最大的数和最小的数的差。 输入 第一行为M,表示整数个数,整数个数不会大于1…

【SH】微信小程序调用EasyDL零门槛AI开发平台的图像分类研发笔记

文章目录 微信小程序字符串字符串模板字符串拼接 上传图片GET请求测试编写测试代码域名不合法问题 GET和POST请求测试 微信小程序字符串 字符串模板 这是ES6引入的特性,允许你通过反引号()创建模板字符串,并在其中嵌入变量或表达…

Certimate自动化SSL证书部署至IIS服务器

前言:笔者上一篇内容已经部署好了Certimate开源系统,于是开始搭建部署至Linux和Windows服务器,Linux服务器十分的顺利,申请证书-部署证书很快的完成了,但是部署至Windows Server的IIS服务时,遇到一些阻碍&a…

【C++算法】38.模拟_替换所有的问号

文章目录 题目链接:题目描述:解法C 算法代码: 题目链接: 1576. 替换所有的问号 题目描述: 解法 模拟算法就是依葫芦画瓢 特点是思路简单,主要考察代码能力 模拟算法流程(一定要在草稿纸上过一遍…

三菱FX3uPLC输入接线注意事项

FX3u微型控制器(DC输入型)的输入根据外部接线,漏型输入和源型输入都可使用。 但是,一定要连接S/S端子的接线。 详细事宜请参考“FX3U系列微型控制器硬件说明手册 AC电源型的输入接线事例(FX3U-囗MR/UA1除外) DC电源型的输入接线事例 *请不要与(0V)、(24V)端子接线…

Milvus向量数据库03-搜索理论

Milvus向量数据库03-搜索理论 1-ANN搜索 通过 k-最近邻(kNN)搜索可以找到一个查询向量的 k 个最近向量。kNN 算法将查询向量与向量空间中的每个向量进行比较,直到出现 k 个完全匹配的结果。尽管 kNN 搜索可以确保准确性,但十分耗…

链表刷题笔记(题解出自灵茶山)

反转链表 class Solution { public:ListNode* reverseList(ListNode* head){ListNode* cur head;ListNode* prv nullptr;while (cur){ ListNode* nxt cur->next; cur->next prv;prv cur;cur nxt; }return prv;} };反转倒数第n个链表 难点在于怎么找到要反转的头…

【JavaEE初阶】HTML

🌴什么是HTML? HTML 是用来描述网页的一种语言。 HTML 指的是超文本标记语言: HyperText Markup LanguageHTML 不是一种编程语言,而是一种标记语言标记语言是一套标记标签 (markup tag)HTML 使用标记标签来描述网页HTML 文档包含了HTML 标签…

一文理解 “Bootstrap“ 在统计学背景下的含义

🍉 CSDN 叶庭云:https://yetingyun.blog.csdn.net/ 一文理解 “Bootstrap“ 在统计学背景下的含义 类比:重新抽样 假设我参加了班级的考试,每位同学都获得了一个成绩。现在,我想了解整个班级的平均成绩,但…

2024年下半年郑州大学ACM招新赛题解(ABCDEFGHIJKL)

A n-th 题意 已知公式 π ∑ k 0 ∞ 1 1 6 k ( 4 8 k 1 − 2 8 k 4 − 1 8 k 5 − 1 8 k 6 ) \pi \sum_{k0}^{\infty} \frac{1}{16^k} (\frac{4}{8k1} - \frac{2}{8k4} - \frac{1}{8k5} - \frac{1}{8k6}) π∑k0∞​16k1​(8k14​−8k42​−8k51​−8k61​) 请你求出…

Flutter:开发环境搭建和Android Studio创建Flutter Project

一、系统要求 在安装和运行 Flutter 前,你的 macOS 或者 Windows 环境必须满足以下要求: 二、硬件要求 macOS Flutter 开发环境必须满足以下最低硬件要求。 Windows Flutter 开发环境必须满足以下最低硬件要求。 三、软件要求 要为 Android 编写和编译…