內錶操作與OPEN SQL

2021-08-17 15:02:13 字數 4395 閱讀 3926

內錶插入 – insert

內錶聚集附加 - collect

內錶修改 – modify

內錶讀取 - read

內錶排序 - sort

內錶刪除 – delete

內錶連線 - inner join

插入 – insert:將行插入到內錶中指定的位置,需要使用insert 語句。

按照索引值插入(只能用於索引表)

insert line into itab index idx .

按照關鍵字插入(可以用於所有表):雜湊表不 能指定行的索引,系統會按照關鍵字將新行插入其特殊位置。

insert line into table table .

多行插入

insert lines of itab1 [from n1] [to n2] into [table] itab2 [index idx].

聚集附加 – collect

collect line into itab.

修改 – modify:根據索引更改內錶的語法如下

*transporting指定修改字段,**較大時能提示效率

modify itab [from wa] [index idx] [transporting f1 f2 …].

使用表關鍵字來更改內錶行可以應用於所有型別的內錶,語法如下:

modify table itab from wa [transporting f1 f2 …].

讀取 – read

對於索引表可以利用索引讀取單行

read table itab [into wa | assigning ] index idx.

可以通過關鍵字讀取任何型別的內錶

read table itab with [table] key k1 = f1 …

kn = fn

[into wa | assigning ] index idx.

使用table關鍵字,要求指定的key欄位必須都是關鍵字段,並且把所有的關鍵字段都列出來,是雜湊表讀取時比較合適的語句

不使用table關鍵字,指定的key欄位不必都是關鍵字,也無需把所有關鍵字段都列出來,是索引表讀取時比較合適的語句

對於所索引表的讀取可以使用binary search 語句加快讀取速度. binary search 叫做二分法搜尋,可以成幾倍得加過搜尋速度。

條件: 1. 內錶必須是索引表

2. 內錶必須已經按照要搜尋的關鍵字排序

不進行傳值 - transporting no fields

排序公升序:ascending

降序:descending

多個字段排序:sort itab by field1 field2 ascending field3 descending

讀取內錶中的某一行,並修改該行

注意:判斷是否讀取成功,使用sy-subrc系統變數

在修改內錶內容時,需要單獨指定index值(內錶迴圈中不需要指定,預設為當前行)

刪除 – delete

根據索引刪除內錶的語法如下:

delete itab [from wa] [index idx].

使用表關鍵字來刪除內錶行可以應用於所有型別的內錶,語法如下:

delete table itab from wa .

刪除鄰近的重複行

sort itab by field1 field2 .

delete adjacent duplicates from itab [comparing field1 field2] .

從資料庫表中向內錶/結構中取數:select

取多條資料

select field1 field2 field3

from database table

into [corresponding fields of] table itab .

從資料庫表中向內錶/結構中取數:select

取單條資料

select single field1 field2 field3

from database table

into [corresponding fields of] wa .

注意:select是針對資料庫進行的迴圈。如果不指定single或table關鍵字,單次取出單條或多條資料,

則需要使用endselect表明迴圈,從資料庫表中迴圈取數滿足條件的資料。但該語句不滿足效率原則,已被廢除。

多表連線 – inner join

select a~field1 a~field2 b~field3

from database1 as a inner join database2 as b

on a~field1 = b~field1

into corresponding fields of table itab

where logexp.

資料庫表選取 – select

資料庫表插入 – insert

資料庫表修改 – update / modify

資料庫表刪除 – delete

提交至資料庫 – commit work / rollback work

select

select … into … 覆蓋資料

資料庫表迴圈語句

select field1 field2 field3

from database table

into [corresponding fields of] wa .

endselect .

選取多條資料

select field1 field2 field3

from database table

into [corresponding fields of] table itab .

選取單條

select single field1 field2 field3

from database table

into [corresponding fields of] wa .

語法規則類似,不會覆蓋內錶中的資料,而是在原本的內錶中追加資料

insert

在資料庫表裡插入一條記錄的語句用 insert語句,如果資料庫表裡已經存在了一條相同的記錄,

如果從結構插入,返回值subrc為4,如果從內錶插入,便會出現系統錯誤。

insert db from table itab .

insert db from wa .

update

update 語句只會更該資料庫表裡相關

記錄已經存在的資料,如果記錄不存在,

則出顯系統錯誤.

update db from table itab .

update db from wa .

update db set field = val

where … .

modify

modify 語句會檢查資料庫表裡相關的記

錄是否存在,如果存在就會更改記錄,如

果不存在則會在資料庫裡追加一條新的記錄.

modify db from table itab .

modify db from wa .

delete

刪除主鍵相同的資料,如果資料庫表中不存在,刪除失敗

delete db from table itab .

delete db from wa .

delete from db where field = val .

commit work

結束乙個luw並開始乙個新的luw

觸發資料庫提交(依次釋放資料庫鎖定)

清空反轉日誌。

反轉日誌包含應用更改前的**快照。執行反轉時,該快照用來將**復位到原值

rollback work

撤銷所有修改,返回到luw開始狀態

在更新任務佇列中將所有以前請求的更新任務功能標記為錯誤

觸發資料庫反轉操作(依次釋放所有資料庫鎖定)

何時使用

通過insert、update和modify語句對資料庫進行更新事務後。

如果要保證資料庫中當前所作的更改立即被確認,那麼就必須使用commit work 語句結束luw。在commit work 語句以後,

對資料庫所作的所有更改都不能再取消。要撤銷當前luw 對資料庫的更改,請使用rollback work,它將取消前一次資料庫提交後的所有更改。

內錶操作例子

1.read internal table with table key report ztest itab processing.data gt makt type sorted table of makt with unique key matnr spras,gw makt type makt...

ABAP中內表操作

對內表的操作分為資料行操作和整個內錶操作兩大類,行操作可以通過關鍵字或索引兩種途徑進行,但是雜湊表不能通過索引操作。有時同樣的操作關鍵字語句,針對不同種類的內錶有不同的形式。1,定義 參考字段定義 data begin of i list occurs 0 matnr like mara matnr...

內錶增刪改查操作

一 單行增加 data begin of line,land 3 type c,name 10 type c,age type i,weight type p decimals 2,end of line.data itab like sorted table of line with non un...