「SAP ABAP」OPEN SQL(五)【INSERT语句 | UPDATE语句】
创始人
2025-06-01 07:13:19

在这里插入图片描述

💂作者简介: 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}{评论,你的意见是我进步的财富!}评论,你的意见是我进步的财富!

相关内容

热门资讯

科技推荐.手中畅游.怎么装挂.... 科技推荐.手中畅游.怎么装挂.[必胜开挂神器]亲,手中畅游这个游戏其实有挂的,确实是有挂的,需要了解...
科技通报「道游牛牛」挂辅助工具... 科技通报「道游牛牛」挂辅助工具!太坑了,原来有挂您好:道游牛牛这款游戏可以开挂,确实是有挂的,需要了...
实测讲解“博雅地方棋牌到底能开... 您好:博雅地方棋牌这款游戏可以开挂,确实是有挂的,需要了解加客服微信【6670747】很多玩家在这款...
玩家实测“欢乐联盟其实有透视挂... 您好:欢乐联盟这款游戏可以开挂,确实是有挂的,需要软件加微信【4770480】,很多玩家在欢乐联盟这...
[科技解密]“微友江西麻将是不... [科技解密]“微友江西麻将是不是有挂!”!揭秘曝光猫腻您好:微友江西麻将这款游戏可以开挂,确实是有挂...