「SAP ABAP」你真的了解OPEN SQL的DML语句吗 (附超详细案例讲解)

💂作者简介: THUNDER王,一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学本科在读,同时任汉硕云(广东)科技有限公司ABAP开发顾问。在学习工作中,我通常使用偏后端的开发语言ABAP,SQL进行任务的完成,对SAP企业管理系统,SAP ABAP开发和数据库具有较深入的研究。
💅文章概要: 各位小伙伴们大家好呀!今天继续SAP ABAP系列文章的讲解,本节带来的内容是OPEN SQL中DML语句的介绍,希望大家喜欢!
🤟每日一言: 永远年轻,永远热泪盈眶!
目录
- 前言
- DML语句分类
- INSERT语句介绍
- 插入单条数据
- 使用结构体变量插入数据
- 使用内表插入数据
- 插入多条数据
- 不使用ACCEPTING DUPLICATE KEYS语句
- 使用ACCEPTING DUPLICATE KEYS语句
- UPDATE语句介绍
- 修改单条数据
- 使用结构体变量修改数据
- 使用内表修改数据
- 使用SET修改指定数据
- 修改多条数据
- 使用内表修改多条数据
- 使用SET修改指定多条数据
- 写在最后的话
前言

各位小伙伴们大家好呀!今天继续SAP ABAP系列文章的讲解,本节带来的内容是OPEN SQL中DML语句的介绍,限于篇幅原因,本节内容只涉及到INSERT语句和UPDATE语句,剩余两个语句将在下一小节进行讲解,希望大家喜欢!
DML语句分类

DML语句(data manipulation language)又称数据操控语言,在传统关系数据库中数据操控语言只有三种,分别是INSERT,UPDATE,DELETE语句,而在SAP ABAP OPEN SQL中DML语句还额外多了一个MODIFY语句,该语句融合了INSERT和UPDATE语句的特点,如果数据库中不存在该条数据会进行INSERT操作,如果存在该条数据会进行UPDATE操作。
ABAP四种DML语句的基本介绍如下表所示:
| 语句 | 功能 |
|---|---|
| INSERT | 插入语句 |
| UPDATE | 更新语句 |
| DELETE | 删除语句 |
| MODIFY | 插入&更新语句 |
INSERT语句介绍

ABAP INSERT语句用于向数据库表中插入新的行。
PS:在ABAP中,如果向一个已经存在一条数据的数据库表中再次使用INSERT语句插入相同的数据,通常会导致运行时错误。这是因为数据库表的主键要求每行数据具有唯一性,而重复的数据会违反该要求(主键唯一性约束)。
插入单条数据
以下是插入单条数据的一般语法样式:
INSERT INTO <table_name> VALUES <wa>.
INSERT <table_name> FROM <wa>.
INSERT <table_name> FROM TABLE <itab>.
参数介绍:
<table_name>是要更新的数据库表的名称。<wa>:存放待插入数据的结构体变量(工作区)。<itab>:存放待插入数据的内表。
使用结构体变量插入数据
下面给出一段以SFLIGHT数据库表为基准的示例代码,对ABAP OPEN SQL中通过结构体变量INSERT插入单条数据进行详细的讲解,仅供参考:
DATA:gs_sflight TYPE sflight.
gs_sflight-carrid = 'AC'.
gs_sflight-connid = 0820.
INSERT INTO sflight VALUES gs_sflight.


这段代码中首先参照数据库表sflight定义了一个结构体变量,并且对结构体中的carrid和connid字段赋值,最后使用INSERT语句将该结构体变量的值插入到数据库表中。
PS:插入单条数据一般通过结构体变量赋值来插入,也可以使用只有一行数据的内表来插入。
使用内表插入数据
下面给出一段以SFLIGHT数据库表为基准的示例代码,对ABAP OPEN SQL中通过内表INSERT插入单条数据进行详细的讲解,仅供参考:
DATA:gs_sflight TYPE sflight.
DATA:gt_sflight TYPE TABLE OF sflight.gs_sflight-carrid = 'AC'.
gs_sflight-connid = 0820.
gs_sflight-fldate = '20020217'.
APPEND gs_sflight TO gt_sflight.
INSERT sflight FROM TABLE gt_sflight.


这段代码中首先参照数据库表sflight定义了一个结构体变量和内表变量,并且对结构体中的carrid和connid以及fldate字段赋值,然后将结构体变量的值插入到内表中。最后使用INSERT语句将该内表中的数据插入到数据库表中。
插入多条数据
以下是插入多条数据的一般语法样式:
INSERT <table_name> FROM TABLE <itab> [ACCEPTING DUPLICATE KEYS] .
参数介绍:
<table_name>是要更新的数据库表的名称。<itab>:存放待插入数据的内表。
下面给出一段以SFLIGHT数据库表为基准的示例代码,对ABAP OPEN SQL中通过内表INSERT插入多条数据进行详细的讲解,仅供参考:
DATA:gs_sflight TYPE sflight.
DATA:gt_sflight TYPE TABLE OF sflight.gs_sflight-carrid = 'AC'.
gs_sflight-connid = 0820.
gs_sflight-fldate = '20020217'.
APPEND gs_sflight TO gt_sflight.gs_sflight-carrid = 'AC'.
gs_sflight-connid = 0820.
gs_sflight-fldate = '20020218'.
APPEND gs_sflight TO gt_sflight.INSERT sflight FROM TABLE gt_sflight.


这段代码中首先参照数据库表sflight定义了一个结构体变量和内表变量,并且对结构体中的carrid和connid以及fldate字段赋值,然后将结构体变量的值插入到内表中,并且向内表中插入了两条数据。最后使用INSERT语句将该内表中的数据插入到数据库表中。
PS:插入相同主键的数据时会发生
dump error,为了避免发生这种错误要使用ACCEPTING DUPLICATE KEYS语句
下面是两个详细案例,分别展现了当内表中存在相同主键数据时,使用ACCEPTING DUPLICATE KEYS语句和不使用的区别:
不使用ACCEPTING DUPLICATE KEYS语句
DATA:gs_sflight TYPE sflight.
DATA:gt_sflight TYPE TABLE OF sflight.gs_sflight-carrid = 'AC'.
gs_sflight-connid = 0820.
gs_sflight-fldate = '20020219'.
APPEND gs_sflight TO gt_sflight.gs_sflight-carrid = 'AC'.
gs_sflight-connid = 0820.
gs_sflight-fldate = '20020219'.
APPEND gs_sflight TO gt_sflight.INSERT sflight FROM TABLE gt_sflight.

PS:当内表中存在相同主键数据时,不使用ACCEPTING DUPLICATE KEYS语句会造成ABAP编程错误。
使用ACCEPTING DUPLICATE KEYS语句
DATA:gs_sflight TYPE sflight.
DATA:gt_sflight TYPE TABLE OF sflight.gs_sflight-carrid = 'AC'.
gs_sflight-connid = 0820.
gs_sflight-fldate = '20020219'.
APPEND gs_sflight TO gt_sflight.gs_sflight-carrid = 'AC'.
gs_sflight-connid = 0820.
gs_sflight-fldate = '20020219'.
APPEND gs_sflight TO gt_sflight.INSERT sflight FROM TABLE gt_sflight ACCEPTING DUPLICATE KEYS.

PS:当内表中存在相同主键数据时,使用ACCEPTING DUPLICATE KEYS语句不会造成ABAP编程错误,两条相同的数据会被视作一条并且能够被正常插入到数据库表中。
UPDATE语句介绍

UPDATE语句用于更新数据库表中的数据。
修改单条数据
以下是修改单条数据的一般语法样式:
UPDATE <table_name> FROM <wa> .
UPDATE <table_name> FROM TABLE <itab>.
UPDATE <table_name> SET <set> WHERE <cond>.
参数介绍:
<table_name>:目标表的名称。<wa>:存放待更新数据的结构体变量(工作区)。<itab>:存放待更新数据的内表。<set>:更新后字段的具体数值。<cond>:WHERE字句的限定条件。
使用结构体变量修改数据
下面给出一段以SFLIGHT数据库表为基准的示例代码,对ABAP OPEN SQL中通过结构体变量UPDATE更新单条数据进行详细的讲解,仅供参考:
DATA:gs_sflight TYPE sflight.gs_sflight-carrid = 'AC'.
gs_sflight-connid = 0820.
gs_sflight-fldate = '00000000'.
gs_sflight-price = 1600.UPDATE sflight FROM gs_sflight.


这段代码中首先参照数据库表sflight定义了一个结构体变量,并且对结构体中的carrid,connid,fldate以及price字段赋值。最后使用INSERT语句将该结构体变量中的数据更新回数据库表中。
使用内表修改数据
下面给出一段以SFLIGHT数据库表为基准的示例代码,对ABAP OPEN SQL中通过内表UPDATE更新单条数据进行详细的讲解,仅供参考:
DATA:gs_sflight TYPE sflight,gt_sflight TYPE TABLE OF sflight.gs_sflight-carrid = 'AC'.
gs_sflight-connid = 0820.
gs_sflight-fldate = '00000000'.
gs_sflight-price = 1600.
APPEND gs_sflight TO gt_sflight.UPDATE sflight FROM TABLE gt_sflight.


这段代码中首先参照数据库表sflight定义了一个结构体变量和内表变量,并且对结构体中的carrid,connid,price以及fldate字段赋值,然后将结构体变量的值插入到内表中。最后使用UPDATE语句将该内表中的数据更新回数据库表中。
使用SET修改指定数据
下面给出一段以SFLIGHT数据库表为基准的示例代码,对ABAP OPEN SQL中通过SET更新单条指定数据进行详细的讲解,仅供参考:
UPDATE SFLIGHT SET PRICE = 1600 CURRENCY = 'CNY'
WHERE CARRID = 'AC'AND CONNID = 0820 AND FLDATE = '20020217'.


修改多条数据
以下是修改多条数据的一般语法样式:
UPDATE <table_name> FROM TABLE <itab>.
UPDATE <table_name> SET <set1> <set2> WHERE <cond>.
参数介绍:
<table_name>:目标表的名称。<itab>:存放待更新数据的内表。<set1>、<set2>等是更新后字段的具体数值。<cond>:WHERE字句的限定条件。
使用内表修改多条数据
下面给出一段以SFLIGHT数据库表为基准的示例代码,对ABAP OPEN SQL中通过内表UPDATE更新多条数据进行详细的讲解,仅供参考:
DATA:gs_sflight TYPE sflight.
DATA:gt_sflight TYPE TABLE OF sflight.gs_sflight-carrid = 'AC'.
gs_sflight-connid = 0820.
gs_sflight-fldate = '00000000'.
gs_sflight-price = 2000.
APPEND gs_sflight TO gt_sflight.gs_sflight-carrid = 'AC'.
gs_sflight-connid = 0820.
gs_sflight-fldate = '20020217'.
gs_sflight-price = 2100.
APPEND gs_sflight TO gt_sflight.UPDATE sflight FROM TABLE gt_sflight.


这段代码中首先参照数据库表sflight定义了一个结构体变量和内表变量,并且对结构体中的carrid,connid,price以及fldate字段赋值,然后将结构体变量的值插入到内表中,并且内表中存在两条数据。最后使用UPDATE语句将该内表中的两条数据更新回数据库表中。
使用SET修改指定多条数据
UPDATE SFLIGHT SET PRICE = 1600 CURRENCY = 'CNY'
WHERE CARRID = 'AC'AND CONNID = 0820 AND FLDATE = '00000000'.


写在最后的话
本文花费大量时间介绍了OPEN SQL中的INSERT语句和UPDATE语句的详细语法,希望能帮助到各位小伙伴,码文不易,还望各位大佬们多多支持哦,你们的支持是我最大的动力!

✨原创不易,还希望各位大佬支持一下\textcolor{blue}{原创不易,还希望各位大佬支持一下}原创不易,还希望各位大佬支持一下
👍 点赞,你的认可是我创作的动力!\textcolor{9c81c1}{点赞,你的认可是我创作的动力!}点赞,你的认可是我创作的动力!
⭐️ 收藏,你的青睐是我努力的方向!\textcolor{ed7976}{收藏,你的青睐是我努力的方向!}收藏,你的青睐是我努力的方向!
✏️ 评论,你的意见是我进步的财富!\textcolor{98c091}{评论,你的意见是我进步的财富!}评论,你的意见是我进步的财富!
相关文章:
「SAP ABAP」你真的了解OPEN SQL的DML语句吗 (附超详细案例讲解)
💂作者简介: THUNDER王,一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学本科在读,同时任汉硕云(广东)科技有限公司ABAP开发顾问。在学习工作中,我通常使用偏后端的开发语言A…...
数据结构3——线性表2:线性表的顺序结构
顺序结构的基本理解 定义: 把逻辑上相邻的数据元素存储在物理上相邻(占用一片连续的存储单元,中间不能空出来)的存储单元的存储结构 存储位置计算: LOC(a(i1))LOC(a(i))lLOC(a(i1))LOC(a(i))l LOC(a(i1))LOC(a(i))l L…...
VMware虚拟机搭建环境通用方法
目录一、前期准备1.下载并安装一个虚拟机软件二、开始创建虚拟机1.配置虚拟机硬件相关操作2.虚拟机网络相关操作三、开机配置相关内容0.开机遇到报错处理(选看--开机没有报错请忽略)1.开始配置2.开机之后配置3.使用xshell远程登录4.使用xshell配置虚拟机…...
2.Fully Convolutional Networks for Semantic Segmentation论文记录
欢迎访问个人网络日志🌹🌹知行空间🌹🌹 文章目录1.基础介绍2.分类网络转换成全卷积分割网络3.转置卷积进行上采样4.特征融合5.一个pytorch源码实现参考资料1.基础介绍 论文:Fully Convolutional Networks for Semantic Segmentati…...
深度解析Spring Boot自动装配原理
废话不多说了,直接来看源码。源码解析SpringBootApplication我们在使用idea创建好Spring Boot项目时,会发现在启动类上添加了SpringBootApplication注解,这个注解就是Spring Boot的核心所在。点击注解可以查看到到它的实现ementType.TYPE) Re…...
Linux:环境变量
目录一、环境变量的理解(1)什么是环境变量?(2)Linux中的环境变量二、环境变量的使用(1)PATH环境变量(2)和变量相关的指令三、环境变量与普通变量的区别在平时使用电脑的时…...
Codeforces Round 703 (Div. 2)(A~D)
A. Shifting Stacks给出一个数组,每次可以将一个位置-1,右侧相邻位置1,判断是否可以经过若干次操作后使得数列严格递增。思路:对于每个位置,前缀和必须都大于该位置应该有的最少数字,即第一个位置最少是0&a…...
Django项目5——基于tensorflow serving部署深度模型——windows版本
1:安装docker for windows 可能需要安装WLS2,用于支持Linux系统,参照上面的教程安装 2:在Powershell下使用docker docker pull tensorflow/serving3:在Powershell下启动tensorflow serving docker run -p 8500:8500 …...
MySQL基础篇3
第一章 多表关系实战 1.1 实战1:省和市 方案1:多张表,一对多 方案2:一张表,自关联一对多 id1 name‘北京’ p_id null; id2 name‘昌平’ p_id1 id3 name‘大兴’ p_id1 id3 name‘上海’ p_idnull id4 name‘浦东’…...
携程 x TiDB丨应对全球业务海量数据增长,一栈式 HTAP 实现架构革新
随着新冠病毒疫情的缓解和控制,全球旅游业逐渐开始重新复苏。尤其在一些度假胜地,游客数量已经恢复到疫情前的水平。 携程作为全球领先的一站式旅行平台,旗下拥有携程旅行网、去哪儿网、Skyscanner 等品牌。携程旅行网向超过 9000 万会员提供…...
记一次Kafka warning排查过程
1、前因 在配合测试某个需求的时候,正好看到控制台打印了个报错,如下: 2023-03-06 17:05:58,565[325651ms][pool-28-thread-1][org.apache.kafka.common.utils.AppInfoParser][WARN] - Error registering AppInfo mbean javax.management.I…...
MySQL学习笔记(6.视图)
1. 视图作用 (1). 简化业务,将多个复杂条件,改为视图 (2). mysql对用户授权,只能控制表权限,通过视图可以控制用户字段权限。 (3). 可以避免基本表变更,影响业务。只需更改视图即可。 2. 视图(创建&…...
java多线程与线程池-01多线程知识复习
多线程知识复习 文章目录 多线程知识复习第1章 多线程基础1.1.2 线程与进程的关系1.2 多线程启动1.2.1 线程标识1.2.2 Thread与Runnable1.2.3 run()与start()1.2.4 Thread源码分析1.3 线程状态1.3.1 NEW状态1.3.2 RUNNABLE状态1.3.3 BLOCKED状态1.3.4 WAITING状态1…...
Typescript - 将命名空间A导入另一个命名空间B作为B的子命名空间,并全局暴露命名空间B
前言 最近相统一管理 ts 中的类型声明,这就需要将各模块下的命名空间整合到全局的命名空间下,牵涉到从别的文件中引入命名空间并作为子命名空间在全局命名空间中统一暴露。 将命名空间A导入另一个命名空间B作为B的子命名空间 文件说明 assets.ts 文件中…...
Windows下实现Linux内核的Python开发(WSL2+Conda+Pycharm)
许多软件可以通过Python交互,但没有开发Windows版本,这个时候装双系统或虚拟机都很不方便,可以采取WSL2CondaPycharm的策略来进行基于Linux内核的Python开发。启动WSL2,安装Linux内核教程:旧版 WSL 的手动安装步骤 | M…...
新闻发布网站分析及适用场景
在当今数字时代,发布新闻的渠道已经不再局限于传统媒体,越来越多的企业、组织和个人开始使用互联网平台发布新闻稿,以提升品牌知名度和影响力。本文将介绍一些可以发布新闻的网站,并分析其特点和适用场景。一、新闻稿发布平台1.新…...
云原生时代顶流消息中间件Apache Pulsar部署实操之Pulsar IO与Pulsar SQL
文章目录Pulsar IO (Connector连接器)基础定义安装Pulsar和内置连接器连接Pulsar到Cassandra安装cassandra集群配置Cassandra接收器创建Cassandra Sink验证Cassandra Sink结果删除Cassandra Sink连接Pulsar到PostgreSQL安装PostgreSQL集群配置JDBC接收器创建JDBC Sink验证JDBC …...
Input子系统(一)启动篇
代码路径 基于AndroidS(12.0)代码 system/core/libutils/Threads.cppframeworks/base/services- java/com/android/server/SystemServer.java- core- java/com/android/server/input/InputManagerService.java- jni/com_android_server_input_InputMan…...
WuThreat身份安全云-TVD每日漏洞情报-2023-03-08
漏洞名称:Agilebio Lab Collector 远程命令执行 漏洞级别:高危 漏洞编号:CVE-2023-24217,CNNVD-202303-375 相关涉及:Agilebio Lab Collector 4.234 漏洞状态:EXP 参考链接:https://tvd.wuthreat.com/#/listDetail?TVD_IDTVD-2023-05536 漏洞名称:PrestaShop “Xen Forum”模…...
手游刚开服就被攻击怎么办?如何防御DDoS?
开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...
CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型
CVPR 2025 | MIMO:支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题:MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者:Yanyuan Chen, Dexuan Xu, Yu Hu…...
React hook之useRef
React useRef 详解 useRef 是 React 提供的一个 Hook,用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途,下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...
JVM垃圾回收机制全解析
Java虚拟机(JVM)中的垃圾收集器(Garbage Collector,简称GC)是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象,从而释放内存空间,避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...
Neo4j 集群管理:原理、技术与最佳实践深度解析
Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...
基于Docker Compose部署Java微服务项目
一. 创建根项目 根项目(父项目)主要用于依赖管理 一些需要注意的点: 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件,否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...
相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...
EtherNet/IP转DeviceNet协议网关详解
一,设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络,本网关连接到EtherNet/IP总线中做为从站使用,连接到DeviceNet总线中做为从站使用。 在自动…...
高防服务器能够抵御哪些网络攻击呢?
高防服务器作为一种有着高度防御能力的服务器,可以帮助网站应对分布式拒绝服务攻击,有效识别和清理一些恶意的网络流量,为用户提供安全且稳定的网络环境,那么,高防服务器一般都可以抵御哪些网络攻击呢?下面…...
