各位小伙伴们大家好呀!今天继续SAP ABAP系列文章的讲解,本节带来的内容是OPEN SQL中DML语句的介绍,限于篇幅原因,本节内容只涉及到INSERT语句和UPDATE语句,剩余两个语句将在下一小节进行讲解,希望大家喜欢!
DML语句(data manipulation language)
又称数据操控语言
,在传统关系数据库中数据操控语言只有三种,分别是INSERT
,UPDATE
,DELETE
语句,而在SAP ABAP OPEN SQL
中DML语句还额外多了一个MODIFY
语句,该语句融合了INSERT和UPDATE语句的特点,如果数据库中不存在该条数据会进行INSERT操作,如果存在该条数据会进行UPDATE操作。
ABAP四种DML语句的基本介绍如下表所示:
语句 | 功能 |
---|---|
INSERT | 插入语句 |
UPDATE | 更新语句 |
DELETE | 删除语句 |
MODIFY | 插入&更新语句 |
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
语句和不使用的区别:
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编程错误。
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 <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
语句将该内表中的数据更新回数据库表中。
下面给出一段以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
语句将该内表中的两条数据更新回数据库表中。
UPDATE SFLIGHT SET PRICE = 1600 CURRENCY = 'CNY'
WHERE CARRID = 'AC'AND CONNID = 0820 AND FLDATE = '00000000'.
本文花费大量时间介绍了OPEN SQL中的INSERT语句和UPDATE语句的详细语法
,希望能帮助到各位小伙伴,码文不易,还望各位大佬们多多支持哦,你们的支持是我最大的动力!