「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”模…...
java_网络服务相关_gateway_nacos_feign区别联系
1. spring-cloud-starter-gateway 作用:作为微服务架构的网关,统一入口,处理所有外部请求。 核心能力: 路由转发(基于路径、服务名等)过滤器(鉴权、限流、日志、Header 处理)支持负…...
STM32标准库-DMA直接存储器存取
文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA(Direct Memory Access)直接存储器存取 DMA可以提供外设…...
CocosCreator 之 JavaScript/TypeScript和Java的相互交互
引擎版本: 3.8.1 语言: JavaScript/TypeScript、C、Java 环境:Window 参考:Java原生反射机制 您好,我是鹤九日! 回顾 在上篇文章中:CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...
leetcodeSQL解题:3564. 季节性销售分析
leetcodeSQL解题:3564. 季节性销售分析 题目: 表:sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...
力扣-35.搜索插入位置
题目描述 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...
用机器学习破解新能源领域的“弃风”难题
音乐发烧友深有体会,玩音乐的本质就是玩电网。火电声音偏暖,水电偏冷,风电偏空旷。至于太阳能发的电,则略显朦胧和单薄。 不知你是否有感觉,近两年家里的音响声音越来越冷,听起来越来越单薄? —…...
使用LangGraph和LangSmith构建多智能体人工智能系统
现在,通过组合几个较小的子智能体来创建一个强大的人工智能智能体正成为一种趋势。但这也带来了一些挑战,比如减少幻觉、管理对话流程、在测试期间留意智能体的工作方式、允许人工介入以及评估其性能。你需要进行大量的反复试验。 在这篇博客〔原作者&a…...
Razor编程中@Html的方法使用大全
文章目录 1. 基础HTML辅助方法1.1 Html.ActionLink()1.2 Html.RouteLink()1.3 Html.Display() / Html.DisplayFor()1.4 Html.Editor() / Html.EditorFor()1.5 Html.Label() / Html.LabelFor()1.6 Html.TextBox() / Html.TextBoxFor() 2. 表单相关辅助方法2.1 Html.BeginForm() …...
STM32---外部32.768K晶振(LSE)无法起振问题
晶振是否起振主要就检查两个1、晶振与MCU是否兼容;2、晶振的负载电容是否匹配 目录 一、判断晶振与MCU是否兼容 二、判断负载电容是否匹配 1. 晶振负载电容(CL)与匹配电容(CL1、CL2)的关系 2. 如何选择 CL1 和 CL…...
OD 算法题 B卷【正整数到Excel编号之间的转换】
文章目录 正整数到Excel编号之间的转换 正整数到Excel编号之间的转换 excel的列编号是这样的:a b c … z aa ab ac… az ba bb bc…yz za zb zc …zz aaa aab aac…; 分别代表以下的编号1 2 3 … 26 27 28 29… 52 53 54 55… 676 677 678 679 … 702 703 704 705;…...
