SAP-13-内表与工作区

内表 

作用
内表是 ABAP 程序中一种非常重要的数据结构,它类似于数据库表,用于在程序运行时存储和处理数据。与数据库表不同的是,内表存在于程序的内存中,数据的读写速度比从数据库中读取要快很多。它可以存储多条具有相同结构的数据记录,这些记录就像数据库表中的行一样。例如,当你从数据库中读取一批客户数据时,可以将这些数据存储在内表中,然后在程序中对这些数据进行各种处理,如排序、筛选、计算等。

声明:

直接使用TYPES语句定义内表类型,然后再声明内表变量

 参照结构体定义内表

* 使用TYPES语句定义结构体类型
TYPES: BEGIN OF ty_person,name TYPE string,age  TYPE i,END OF ty_person.* 使用TYPES语句定义基于结构体类型的内表类型
TYPES: tt_people TYPE TABLE OF ty_person.* 声明内表变量
DATA: lt_people TYPE tt_people.

参照数据库定义内表 

* 参考MARA表定义内表
DATA: lt_mara TYPE TABLE OF mara.

 工作区

  • 定义与作用
    工作区是一个数据对象,它的结构与内表的行结构相同。它主要用于在内表操作时临时存储内表中的一行数据。就像你要处理内表中的某一行数据时,不能直接在整个内表上进行复杂操作,而是先把这一行数据取到工作区中,在工作区中处理完后,再将结果写回内表。例如,当你要对一个客户的信息进行格式调整时,先把这个客户的信息从内表读到工作区,调整完后再写回内表。
  • 声明方式
    可以使用LIKE LINE OF语句基于内表来声明工作区,使其结构与内表行结构一致。

 使用 LIKE LINE OF 基于内表定义

* 基于内表定义工作区
DATA: ls_employee LIKE LINE OF lt_employees.

 基于结构体定义

* 定义结构体
TYPES: BEGIN OF ty_employee,emp_id TYPE string,emp_name TYPE string,salary TYPE p LENGTH 10 DECIMALS 2,END OF ty_employee.* 基于结构体定义内表
DATA: lt_employees TYPE TABLE OF ty_employee.* 基于结构体定义工作区
DATA: ls_employee TYPE ty_employee.

 内表和工作区

工作区常用于LOOP循环中对内表数据进行逐行处理,或者在进行内表数据的增删改操作时作为临时存储数据的地方。

CLEAR 语句清空工作区

  • CLEAR gs_employee.

内表是存储多条相关数据记录的容器,而工作区是与内表行结构相同,用于临时处理数据


案例

1-增 

* 定义内表
DATA: lt_employees TYPE TABLE OF
{emp_id TYPE string,emp_name TYPE string,salary TYPE p LENGTH 10 DECIMALS 2
}.
* 定义工作区
DATA: ls_employee LIKE LINE OF lt_employees.* 填充工作区数据并添加到内表
ls_employee - emp_id = '001'.
ls_employee - emp_name = '张三'.
ls_employee - salary = 5000.00.
APPEND ls_employee TO lt_employees.* 展示内表所有数据
LOOP AT lt_employees INTO ls_employee.WRITE: / '员工编号:', ls_employee - emp_id,'姓名:', ls_employee - emp_name,'工资:', ls_employee - salary.
ENDLOOP.
可以将工作区数据插入到内表的指定位置。例如,要将一个新员工数据插入到内表的第二行:* 假设内表已有数据,这里省略定义和已有数据填充
DATA: new_employee LIKE LINE OF lt_employees.
new_employee - emp_id = '002'.
new_employee - emp_name = '李四'.
new_employee - salary = 6000.00.INSERT new_employee INTO TABLE lt_employees INDEX 2.

2-删 

* 假设内表已有数据,这里省略定义和已有数据填充
* 删除员工编号为 '001' 的员工数据
DELETE FROM lt_employees WHERE emp_id = '001'.* 展示内表所有数据
LOOP AT lt_employees INTO ls_employee.WRITE: / '员工编号:', ls_employee - emp_id,'姓名:', ls_employee - emp_name,'工资:', ls_employee - salary.
ENDLOOP.
可以通过指定内表行的索引来删除数据。例如,要删除内表的第三行数据:
* 假设内表已有数据,这里省略定义和已有数据填充
DELETE lt_employees INDEX 3.

 3-改

* 假设内表已有数据,这里省略定义和已有数据填充
* 修改员工编号为 '001' 的员工工资,增加 1000
MODIFY lt_employeesSET salary = salary + 1000.00WHERE emp_id = '001'.* 展示内表所有数据
LOOP AT lt_employees INTO ls_employee.WRITE: / '员工编号:', ls_employee - emp_id,'姓名:', ls_employee - emp_name,'工资:', ls_employee - salary.
ENDLOOP.
先通过索引或条件找到要修改的行,然后直接修改工作区对应字段的值,再写回内表。
例如,要给员工编号为 001 的员工涨薪 1000:* 假设内表已有数据,这里省略定义和已有数据填充
DATA: modify_employee LIKE LINE OF lt_employees.
READ TABLE lt_employees INTO modify_employee WITH KEY emp_id = '001'.
IF sy - subrc = 0.modify_employee - salary = modify_employee - salary + 1000.00.MODIFY lt_employees FROM modify_employee.
ENDIF.

 4-查

* 假设内表已有数据,这里省略定义和已有数据填充
* 定义工作区用于存放查询结果
DATA: found_employee LIKE LINE OF lt_employees.* 根据员工编号查询员工信息
READ TABLE lt_employees INTO found_employee WITH KEY emp_id = '001'.
IF sy - subrc = 0.WRITE: / '找到员工 - 员工编号:', found_employee - emp_id,'姓名:', found_employee - emp_name,'工资:', found_employee - salary.
ELSE.WRITE: / '未找到员工编号为 001 的员工'.
ENDIF.

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

dali本地安装和使用

Dali(Distance-matrix ALIgnment)是一种广泛使用的蛋白质结构比对工具,主要用于比较蛋白质三维结构之间的相似性。它通过计算蛋白质结构之间的距离矩阵来评估结构之间的相似性,并生成比对结果。 1. 安装 wget http://ekhidna2.b…

Unreal 从入门到精通之SceneCaptureComponent2D实现UI层3D物体360°预览

文章目录 前言SceneCaptureComponent2D实现步骤新建渲染目标新建材质UI控件激活3DPreview鼠标拖动旋转模型最后前言 我们在(电商展示/角色预览/装备查看)等应用场景中,经常会看到这种3D展示的页面。 即使用相机捕获一个3D的模型的视图,然后把这个视图显示在一个UI画布上,…

2024CCPC辽宁省赛 个人补题 ABCEGJL

Dashboard - 2024 CCPC Liaoning Provincial Contest - Codeforces 过题难度 B A J C L E G 铜奖 4 953 银奖 6 991 金奖 8 1664 B&#xff1a; 模拟题 // Code Start Here string s;cin >> s;reverse(all(s));cout << s << endl;A&#xff1a;很…

Java基础 Day17

一、递归 方法直接或者间接调用本身 将大问题, 层层转化为一个与原问题相似的、规模更小的问题来解决 二、异常 程序在编译或执行过程中&#xff0c;出现的非正常的情况 (错误) 语法错误不是异常 1、阅读异常信息 从下往上看&#xff1a;发生异常的位置、异常名称、发生异…

hook原理和篡改猴编写hook脚本

hook原理&#xff1a; hook是常用于js反编译的技术&#xff1b;翻译就是钩子&#xff0c;他的原理就是劫持js的函数然后进行篡改 一段简单的js代码 &#xff1a;这个代码是顺序执行的 function test01(){console.log(test01)test02() } function test02(){console.log(02)tes…

使用 Vue 展示 Markdown 文本

使用 Vue 展示 Markdown 文本可以通过以下几种方法&#xff1a; 方法 1&#xff1a;使用 v-html 指令 可以使用 v-html 指令来渲染 Markdown 文本&#xff1a; <template><div v-html"markdownText"></div> </template> <script>e…

深度解析 Java 中介者模式:重构复杂交互场景的优雅方案

一、中介者模式的核心思想与设计哲学 在软件开发的历史长河中&#xff0c;对象间的交互管理一直是架构设计的核心难题。当多个对象形成复杂的网状交互时&#xff0c;系统会陷入 "牵一发而动全身" 的困境。中介者模式&#xff08;Mediator Pattern&#xff09;作为行…

FreeCAD傻瓜教程-外螺纹的绘制,利用两个实体进行布尔运算来实现

起因&#xff1a;因为要设计一个波珠螺丝固定器&#xff0c;为了不跑偏&#xff0c;需要在螺柱上加工一个直径6mm&#xff0c;深度1.2mm的圆弧凹槽所以想用泉州制造的6.8车铣加工。 但是该加工目前不支持轴向的钻孔&#xff0c;所以想着干脆在两端加上M8的螺栓&#xff0c;也起…

权限控制相关实现

Spring Boot-Shiro-Vue&#xff1a; 这个项目可以满足基本的权限控制需求&#xff0c;前后端都有&#xff0c;开箱即用

Node.js路径处理指南:如何安全获取当前脚本目录路径

本文适用于 Node.js 14.x及以上版本&#xff0c;同时覆盖 CommonJS 和 ES Modules 模块系统 文章目录 一、为什么需要关注路径问题&#xff1f;二、三种核心方法详解方法1&#xff1a;经典方案 __dirname (CommonJS)方法2&#xff1a;ES Modules 解决方案方法3&#xff1a;动态…

web基础

域名概述 2-1 域名的概念&#xff1a;IP 地址不易记忆&#xff0c;域名是互联网络上识别和定位计算机的层次结构式的字符标识&#xff0c;与该计算机的互联网协议 (IP) 地址相对应&#xff0c;用于在数据传输时标识计算机的电子方位&#xff0c;方便人们记忆和输入。 早期使用…

医疗行业数据共享新实践:如何用QuickAPI打通诊疗全流程数据壁垒

在医疗行业&#xff0c;数据的高效流转直接影响诊疗效率和患者体验。某三甲医院在数字化转型中发现&#xff0c;虽然已积累大量核心业务数据&#xff0c;但各科室系统间的数据互通仍存在明显瓶颈——检验科的报告无法实时同步至门诊系统&#xff0c;药房库存数据与采购系统脱节…

高级认知型Agent

目标: 构建一个具备自主规划、多步推理、工具使用、自我反思和环境交互能力的智能代理,使其能够高效、可靠地完成复杂任务。 核心理念: Agent的智能涌现于一个精密的认知循环: 感知 (Perceive) -> 理解与规划 (Think/Plan - 想) -> 信息获取 (Search/Act - 查) -&g…

百度地图的地铁图API所有城市的城市名和citycode的对照关系列表

百度地图的地铁图API所有城市的城市名和citycode的对照关系列表 城市keywordcitycode北京beijing131上海shanghai289广州guangzhou257深圳shenzhen340重庆chongqing132天津tianjin332石家庄shijiazhuang150南京nanjing315成都chengdu75沈阳shenyang58杭州hangzhou179武汉wuhan2…

SymPy | 获取表达式自由变量方法与因式分解

SymPy 是 Python 中强大的符号计算库&#xff0c;广泛应用于数学建模、公式推导和科学计算。本文将从两个核心功能展开&#xff1a;表达式中自由变量的获取与因式分解的实现&#xff0c;通过完整代码示例和深入分析&#xff0c;帮助读者掌握其使用方法。 第一部分&#xff1a;获…

掩膜合并代码

def ensure_dir(path):"""若目录不存在则创建"""if not os.path.exists(path): #判断路径是否存在os.makedirs(path) #创建路径def read_and_resize(img_path, size):"""读取并缩放图像到指定尺寸&#xff0c;返回 numpy 数组&qu…

蓝桥杯5130 健身

问题描述 小蓝要去健身&#xff0c;他可以在接下来的 1∼n 天中选择一些日子去健身。 他有 m 个健身计划&#xff0c;对于第 i 个健身计划&#xff0c;需要连续的 天&#xff0c;如果成功完成&#xff0c;可以获得健身增益 si​ &#xff0c;如果中断&#xff0c;得不到任何…

auto关键字解析

前言 在11标准之前&#xff0c;auto在c中是声明存储器类型的关键字。而在11标准中它的功能变为了类型推导。 对此&#xff0c; 在这里引入Cprimer中的原句&#xff1a; 编程时常常需要把表达式的值赋给变量&#xff0c;这就要求在声明变量的时候清楚的知道表达式的类型。然而…

嵌入式STM32学习——串口USART 2.0(printf重定义及串口发送)

printf重定义&#xff1a; C语言里面的printf函数默认输出设备是显示器&#xff0c;如果要实现printf函数输出正在串口或者LCD显示屏上&#xff0c;必须要重定义标准库函数里调用的与输出设备相关的函数&#xff0c;比如printf输出到串口&#xff0c;需要将fputc里面的输出指向…

信号量机制:操作系统中的同步与互斥利器

在计算机操作系统中&#xff0c;信号量机制是一种重要的进程同步与互斥工具。它广泛应用于多进程或多线程环境中&#xff0c;用于解决并发访问共享资源时可能出现的竞态条件问题。本文将从信号量的基本概念出发&#xff0c;逐步深入探讨其工作原理、实现方式以及实际应用&#…