撫州招聘網(wǎng)站建設(shè)國際重大新聞事件10條
💂作者簡介: THUNDER王,一名熱愛財稅和SAP ABAP編程以及熱愛分享的博主。目前于江西師范大學(xué)本科在讀,同時任漢碩云(廣東)科技有限公司ABAP開發(fā)顧問。在學(xué)習(xí)工作中,我通常使用偏后端的開發(fā)語言ABAP,SQL進(jìn)行任務(wù)的完成,對SAP企業(yè)管理系統(tǒng),SAP ABAP開發(fā)和數(shù)據(jù)庫具有較深入的研究。
💅文章概要: 各位小伙伴們大家好呀!今天繼續(xù)SAP ABAP系列文章的講解,本節(jié)帶來的內(nèi)容是OPEN SQL中DML語句的介紹,希望大家喜歡!
🤟每日一言: 永遠(yuǎn)年輕,永遠(yuǎn)熱淚盈眶!
目錄
- 前言
- DML語句分類
- INSERT語句介紹
- ?插入單條數(shù)據(jù)
- ??使用結(jié)構(gòu)體變量插入數(shù)據(jù)
- ??使用內(nèi)表插入數(shù)據(jù)
- ?插入多條數(shù)據(jù)
- ??不使用ACCEPTING DUPLICATE KEYS語句
- ??使用ACCEPTING DUPLICATE KEYS語句
- UPDATE語句介紹
- ?修改單條數(shù)據(jù)
- ??使用結(jié)構(gòu)體變量修改數(shù)據(jù)
- ??使用內(nèi)表修改數(shù)據(jù)
- ??使用SET修改指定數(shù)據(jù)
- ?修改多條數(shù)據(jù)
- ??使用內(nèi)表修改多條數(shù)據(jù)
- ??使用SET修改指定多條數(shù)據(jù)
- 寫在最后的話
前言
??各位小伙伴們大家好呀!今天繼續(xù)SAP ABAP系列文章的講解,本節(jié)帶來的內(nèi)容是OPEN SQL中DML語句的介紹,限于篇幅原因,本節(jié)內(nèi)容只涉及到INSERT語句和UPDATE語句,剩余兩個語句將在下一小節(jié)進(jìn)行講解,希望大家喜歡!
DML語句分類
??DML語句(data manipulation language)
又稱數(shù)據(jù)操控語言
,在傳統(tǒng)關(guān)系數(shù)據(jù)庫中數(shù)據(jù)操控語言只有三種,分別是INSERT
,UPDATE
,DELETE
語句,而在SAP ABAP OPEN SQL
中DML語句還額外多了一個MODIFY
語句,該語句融合了INSERT和UPDATE語句的特點,如果數(shù)據(jù)庫中不存在該條數(shù)據(jù)會進(jìn)行INSERT操作,如果存在該條數(shù)據(jù)會進(jìn)行UPDATE操作。
??ABAP四種DML語句的基本介紹如下表所示:
語句 | 功能 |
---|---|
INSERT | 插入語句 |
UPDATE | 更新語句 |
DELETE | 刪除語句 |
MODIFY | 插入&更新語句 |
INSERT語句介紹
??ABAP INSERT語句用于向數(shù)據(jù)庫表中插入新的行。
PS:在ABAP中,如果向一個已經(jīng)存在一條數(shù)據(jù)的數(shù)據(jù)庫表中再次使用INSERT語句插入相同的數(shù)據(jù),通常會導(dǎo)致運行時錯誤。這是因為數(shù)據(jù)庫表的主鍵要求每行數(shù)據(jù)具有唯一性,而重復(fù)的數(shù)據(jù)會違反該要求(主鍵唯一性約束)。
?插入單條數(shù)據(jù)
??以下是插入單條數(shù)據(jù)
的一般語法樣式:
INSERT INTO <table_name> VALUES <wa>.
INSERT <table_name> FROM <wa>.
INSERT <table_name> FROM TABLE <itab>.
參數(shù)介紹:
<table_name>
是要更新的數(shù)據(jù)庫表的名稱。<wa>
:存放待插入數(shù)據(jù)的結(jié)構(gòu)體變量(工作區(qū))。<itab>
:存放待插入數(shù)據(jù)的內(nèi)表。
??使用結(jié)構(gòu)體變量插入數(shù)據(jù)
??下面給出一段以SFLIGHT數(shù)據(jù)庫表
為基準(zhǔn)的示例代碼,對ABAP OPEN SQL中通過結(jié)構(gòu)體變量INSERT插入單條數(shù)據(jù)進(jìn)行詳細(xì)的講解,僅供參考:
DATA:gs_sflight TYPE sflight.
gs_sflight-carrid = 'AC'.
gs_sflight-connid = 0820.
INSERT INTO sflight VALUES gs_sflight.
??這段代碼中首先參照數(shù)據(jù)庫表sflight
定義了一個結(jié)構(gòu)體變量,并且對結(jié)構(gòu)體中的carrid
和connid
字段賦值,最后使用INSERT
語句將該結(jié)構(gòu)體變量的值插入到數(shù)據(jù)庫表中。
PS:插入單條數(shù)據(jù)一般通過結(jié)構(gòu)體變量賦值來插入,也可以使用只有一行數(shù)據(jù)的內(nèi)表來插入。
??使用內(nèi)表插入數(shù)據(jù)
??下面給出一段以SFLIGHT數(shù)據(jù)庫表
為基準(zhǔn)的示例代碼,對ABAP OPEN SQL中通過內(nèi)表INSERT插入單條數(shù)據(jù)進(jìn)行詳細(xì)的講解,僅供參考:
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.
??這段代碼中首先參照數(shù)據(jù)庫表sflight
定義了一個結(jié)構(gòu)體變量和內(nèi)表變量,并且對結(jié)構(gòu)體中的carrid
和connid
以及fldate
字段賦值,然后將結(jié)構(gòu)體變量的值插入到內(nèi)表中。最后使用INSERT
語句將該內(nèi)表中的數(shù)據(jù)插入到數(shù)據(jù)庫表中。
?插入多條數(shù)據(jù)
??以下是插入多條數(shù)據(jù)
的一般語法樣式:
INSERT <table_name> FROM TABLE <itab> [ACCEPTING DUPLICATE KEYS] .
參數(shù)介紹:
<table_name>
是要更新的數(shù)據(jù)庫表的名稱。<itab>
:存放待插入數(shù)據(jù)的內(nèi)表。
??下面給出一段以SFLIGHT數(shù)據(jù)庫表
為基準(zhǔn)的示例代碼,對ABAP OPEN SQL中通過內(nèi)表INSERT
插入多條數(shù)據(jù)進(jìn)行詳細(xì)的講解,僅供參考:
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.
??這段代碼中首先參照數(shù)據(jù)庫表sflight
定義了一個結(jié)構(gòu)體變量和內(nèi)表變量,并且對結(jié)構(gòu)體中的carrid
和connid
以及fldate
字段賦值,然后將結(jié)構(gòu)體變量的值插入到內(nèi)表中,并且向內(nèi)表中插入了兩條數(shù)據(jù)
。最后使用INSERT
語句將該內(nèi)表中的數(shù)據(jù)插入到數(shù)據(jù)庫表中。
PS:插入相同主鍵的數(shù)據(jù)時會發(fā)生
dump error
,為了避免發(fā)生這種錯誤要使用ACCEPTING DUPLICATE KEYS
語句
??下面是兩個詳細(xì)案例,分別展現(xiàn)了當(dāng)內(nèi)表中存在相同主鍵數(shù)據(jù)時,使用ACCEPTING DUPLICATE KEYS
語句和不使用的區(qū)別:
??不使用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:當(dāng)內(nèi)表中存在相同主鍵數(shù)據(jù)時,不使用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:當(dāng)內(nèi)表中存在相同主鍵數(shù)據(jù)時,使用ACCEPTING DUPLICATE KEYS語句不會造成ABAP編程錯誤,兩條相同的數(shù)據(jù)會被視作一條并且能夠被正常插入到數(shù)據(jù)庫表中。
UPDATE語句介紹
??UPDATE語句用于更新數(shù)據(jù)庫表中的數(shù)據(jù)。
?修改單條數(shù)據(jù)
??以下是修改單條數(shù)據(jù)
的一般語法樣式:
UPDATE <table_name> FROM <wa> .
UPDATE <table_name> FROM TABLE <itab>.
UPDATE <table_name> SET <set> WHERE <cond>.
參數(shù)介紹:
<table_name>
:目標(biāo)表的名稱。<wa>
:存放待更新數(shù)據(jù)的結(jié)構(gòu)體變量(工作區(qū))。<itab>
:存放待更新數(shù)據(jù)的內(nèi)表。<set>
:更新后字段的具體數(shù)值。<cond>
:WHERE字句的限定條件。
??使用結(jié)構(gòu)體變量修改數(shù)據(jù)
??下面給出一段以SFLIGHT數(shù)據(jù)庫表
為基準(zhǔn)的示例代碼,對ABAP OPEN SQL中通過結(jié)構(gòu)體變量UPDATE
更新單條數(shù)據(jù)進(jìn)行詳細(xì)的講解,僅供參考:
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.
??這段代碼中首先參照數(shù)據(jù)庫表sflight
定義了一個結(jié)構(gòu)體變量,并且對結(jié)構(gòu)體中的carrid
,connid
,fldate
以及price
字段賦值。最后使用INSERT
語句將該結(jié)構(gòu)體變量中的數(shù)據(jù)更新回數(shù)據(jù)庫表中。
??使用內(nèi)表修改數(shù)據(jù)
??下面給出一段以SFLIGHT數(shù)據(jù)庫表
為基準(zhǔn)的示例代碼,對ABAP OPEN SQL中通過內(nèi)表UPDATE
更新單條數(shù)據(jù)進(jìn)行詳細(xì)的講解,僅供參考:
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.
??這段代碼中首先參照數(shù)據(jù)庫表sflight
定義了一個結(jié)構(gòu)體變量和內(nèi)表變量,并且對結(jié)構(gòu)體中的carrid
,connid
,price
以及fldate
字段賦值,然后將結(jié)構(gòu)體變量的值插入到內(nèi)表中。最后使用UPDATE
語句將該內(nèi)表中的數(shù)據(jù)更新回數(shù)據(jù)庫表中。
??使用SET修改指定數(shù)據(jù)
??下面給出一段以SFLIGHT數(shù)據(jù)庫表
為基準(zhǔn)的示例代碼,對ABAP OPEN SQL中通過SET
更新單條指定數(shù)據(jù)進(jìn)行詳細(xì)的講解,僅供參考:
UPDATE SFLIGHT SET PRICE = 1600 CURRENCY = 'CNY'
WHERE CARRID = 'AC'AND CONNID = 0820 AND FLDATE = '20020217'.
?修改多條數(shù)據(jù)
??以下是修改多條數(shù)據(jù)
的一般語法樣式:
UPDATE <table_name> FROM TABLE <itab>.
UPDATE <table_name> SET <set1> <set2> WHERE <cond>.
參數(shù)介紹:
<table_name>
:目標(biāo)表的名稱。<itab>
:存放待更新數(shù)據(jù)的內(nèi)表。<set1>
、<set2>
等是更新后字段的具體數(shù)值。<cond>
:WHERE字句的限定條件。
??使用內(nèi)表修改多條數(shù)據(jù)
??下面給出一段以SFLIGHT數(shù)據(jù)庫表
為基準(zhǔn)的示例代碼,對ABAP OPEN SQL中通過內(nèi)表UPDATE
更新多條數(shù)據(jù)進(jìn)行詳細(xì)的講解,僅供參考:
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.
??這段代碼中首先參照數(shù)據(jù)庫表sflight
定義了一個結(jié)構(gòu)體變量和內(nèi)表變量,并且對結(jié)構(gòu)體中的carrid
,connid
,price
以及fldate
字段賦值,然后將結(jié)構(gòu)體變量的值插入到內(nèi)表中,并且內(nèi)表中存在兩條數(shù)據(jù)
。最后使用UPDATE
語句將該內(nèi)表中的兩條數(shù)據(jù)更新回數(shù)據(jù)庫表中。
??使用SET修改指定多條數(shù)據(jù)
UPDATE SFLIGHT SET PRICE = 1600 CURRENCY = 'CNY'
WHERE CARRID = 'AC'AND CONNID = 0820 AND FLDATE = '00000000'.
寫在最后的話
??本文花費大量時間介紹了OPEN SQL中的INSERT語句和UPDATE語句的詳細(xì)語法
,希望能幫助到各位小伙伴,碼文不易,還望各位大佬們多多支持哦,你們的支持是我最大的動力!
?原創(chuàng)不易,還希望各位大佬支持一下\textcolor{blue}{原創(chuàng)不易,還希望各位大佬支持一下}原創(chuàng)不易,還希望各位大佬支持一下
👍 點贊,你的認(rèn)可是我創(chuàng)作的動力!\textcolor{9c81c1}{點贊,你的認(rèn)可是我創(chuàng)作的動力!}點贊,你的認(rèn)可是我創(chuàng)作的動力!
?? 收藏,你的青睞是我努力的方向!\textcolor{ed7976}{收藏,你的青睞是我努力的方向!}收藏,你的青睞是我努力的方向!
?? 評論,你的意見是我進(jìn)步的財富!\textcolor{98c091}{評論,你的意見是我進(jìn)步的財富!}評論,你的意見是我進(jìn)步的財富!