「SAP ABAP」OPEN SQL(五)【INSERT语句 | UPDATE语句】
创始人
2025-06-01 08:12:34
0

在这里插入图片描述

💂作者简介: 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  VALUES .
INSERT  FROM .
INSERT  FROM TABLE .

参数介绍:

  • 是要更新的数据库表的名称。
  • :存放待插入数据的结构体变量(工作区)。
  • :存放待插入数据的内表。

  使用结构体变量插入单条数据

  下面给出一段以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定义了一个结构体变量,并且对结构体中的carridconnid字段赋值,最后使用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定义了一个结构体变量和内表变量,并且对结构体中的carridconnid以及fldate字段赋值,然后将结构体变量的值插入到内表中。最后使用INSERT语句将该内表中的数据插入到数据库表中。

 插入多条数据


  以下是插入多条数据的一般语法样式:

INSERT  FROM TABLE  [ACCEPTING DUPLICATE KEYS] .

参数介绍:

  • 是要更新的数据库表的名称。
  • :存放待插入数据的内表。

  下面给出一段以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定义了一个结构体变量和内表变量,并且对结构体中的carridconnid以及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  FROM  .
UPDATE  FROM TABLE .
UPDATE  SET  WHERE .

参数介绍:

  • :目标表的名称。
  • :存放待更新数据的结构体变量(工作区)。
  • :存放待更新数据的内表。
  • :更新后字段的具体数值。
  • :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定义了一个结构体变量,并且对结构体中的carridconnidfldate以及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  FROM TABLE .
UPDATE  SET   WHERE .

参数介绍:

  • :目标表的名称。
  • :存放待更新数据的内表。
  • 等是更新后字段的具体数值。
  • :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修改指定多条数据

  下面给出一段以SFLIGHT数据库表为基准的示例代码,对ABAP OPEN SQL中通过SETUPDATE更新多条数据进行详细的讲解,仅供参考:

UPDATE SFLIGHT SET PRICE = 2000 CURRENCY = 'USD'
WHERE PRICE = ''.

在这里插入图片描述
在这里插入图片描述

  这段代码使用SET将SFLIGHT数据库表中PRICE等于空值的数据进行了更新,令PRICE等于2000并且CURRENCY等于USD


写在最后的话

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

在这里插入图片描述

✨原创不易,还希望各位大佬支持一下\textcolor{blue}{原创不易,还希望各位大佬支持一下}原创不易,还希望各位大佬支持一下

👍 点赞,你的认可是我创作的动力!\textcolor{9c81c1}{点赞,你的认可是我创作的动力!}点赞,你的认可是我创作的动力!

⭐️ 收藏,你的青睐是我努力的方向!\textcolor{ed7976}{收藏,你的青睐是我努力的方向!}收藏,你的青睐是我努力的方向!

✏️ 评论,你的意见是我进步的财富!\textcolor{98c091}{评论,你的意见是我进步的财富!}评论,你的意见是我进步的财富!

相关内容

热门资讯

《书怀》 《书怀》 刘幽求 唐代 刘幽求 心为明时尽,君门尚不容。田园迷径路,归去欲何从。 《书怀》刘...
《四时白纻歌 春白纻》 《四时白纻歌 春白纻》 沈约 南北朝 沈约 兰叶参差桃半红。飞芳舞縠戏春风。如娇如怨状不同。...
《长命女》 《长命女》 冯延巳 五代 冯延巳 春日宴,绿酒一杯歌一遍。再拜陈三愿:一愿郎君千岁,二愿妾身...
《寄程鹏飞》 《寄程鹏飞》 刘过 宋代 刘过 往事游边忆少年,未尝携刺五侯门。春风跃马汉南道,落日椎牛淮上...
《夜香》 《夜香》 陆游 宋代 陆游 投老误乘传,窃食惭无功。清夜一炷香,实与天心通。忤物虽至愚,许国...
《月上瓜洲·寓乌夜啼南徐多景... 《月上瓜洲·寓乌夜啼南徐多景楼作》 张辑 宋代 张辑 江头又见新秋。几多愁。塞草连天何处、是...
《竹枝词二首》 《竹枝词二首》 黄庭坚 宋代 黄庭坚 撑崖拄谷蝮蛇愁,入箐攀天猿掉头。鬼门关外莫言远,五十三...
《寄魏景山》 《寄魏景山》 方回 宋代 方回 长桥身作长城梦,南五湖天北济淮。重听吴歈怜我老,忆骑塞马与君...
《金釜山灵泉》 《金釜山灵泉》 吴宗旦 宋代 吴宗旦 泉来有脉去无痕,水底神龙暗吐吞。莫怪一池杯样小,个中风...
《林若愚七十》 《林若愚七十》 陈藻 宋代 陈藻 思我从网山,问道红泉市。托翁自渔溪,饷我百余里。数穷初值变...
《村晚》 《村晚》 张耒 宋代 张耒 深坞繁花丽,晴田细径分。孤舟春水路,芳草夕阳村。暗雀投檐静,昏鸦...
《合江亭》 《合江亭》 李恭 宋代 李恭 一丝风下碧云天,亭上窗开霁色鲜。严子钓台青树里,桐君丹灶白云边...
坎儿井组诗现代诗歌 坎儿井组诗现代诗歌  (一)  穿越千里  婉如玉带  你从那天际雪山起步  携历史的一路尘埃  涓...
《落第》 《落第》 孟郊 唐代 孟郊 晓月难为光,愁人难为肠。谁言春物荣,独见叶上霜。雕鹗失势病,鹪鹩...
《题卢州郡斋》 《题卢州郡斋》 郑綮 唐代 郑綮 九衢尘里一书生,多达逢时拥旆旌。醉里眼开金使字,紫旂风动耀...
《太白楼》 《太白楼》 文天祥 宋代 文天祥 高城蘸云根,聊可慰心迹。长风万里来,如对骑鲸客。监州好事者...
《陈九溪中草堂》 《陈九溪中草堂》 法振 唐代 法振 溪草落溅溅,鱼飞入稻田。早寒临洞月,轻素卷帘烟。dU帻题...
《菩萨蛮》 《菩萨蛮》 温庭筠 唐代 温庭筠 凤凰相对盘金缕,牡丹一夜经微雨。明镜照新妆,鬓经双脸长。画...
《香炉寺》 《香炉寺》 王洋 宋代 王洋 道边绕庙占疏凉,郊远山连草树荒。果有祖师传印在,为予试爇一炉香...
《石壕吏》 《石壕吏》  教学设想  理解诗中语句,借助联想和想象把握诗歌的意境,体会其中蕴含的思想感情,背诵五...