天天看點

sap 内表

内表的目的

在ABAP/4中,主要使用表格。表格是R/3系統中的關鍵資料結構。長期使用的資料存儲在關系資料庫表格中。關于如何讀取和處理資料庫表格的詳細資訊,參見讀取并處理資料庫表。

除了資料庫表格,還可以建立僅在程式運作時間記憶體在的内表。ABAP/4提供了針對内表的不同操作。例如,可以搜尋、附加、插入或删除行。

内表中的行數并不固定。根據需求,系統可實時增加内表的大小。例如,如果想将某個資料庫表格讀入内表,不必事先知道資料庫表格的大小。該特征項使得内表使用起來十分友善,同時還支援動态程式設計。

可以使用内表在資料庫表格的子集上執行表格計算。例如,可以将資料庫表格的某個部分讀入内表(參見将資料讀入内表)。然後可以從内表中計算總和或生成次序表。

内表的另一種用處是根據程式需要重新組織資料庫表格的内容。例如,可以從一個或多個大客戶表格特定的資料中将與建立電話清單有關的資料讀入内表中。然後可在程式運作期間直接通路該清單,而不用每次調用時都執行耗時的資料庫查詢。

除了在使用來自資料庫表格的資料時使用内表外,内表還是ABAP/4中用于在程式中實作許多複雜資料結構的重要特征項(參見結構化資料類型(頁3-6))。

内表的結構

在ABAP/4中,可以差別内表資料類型(定義内表的結構)和内表資料對象(實際的内表而且可以用資料進行填充)。内表資料類型是資料結構(可用于将資料對象說明為内表)的抽象定義。關于資料類型和資料對象之間差別的詳細資訊,參見聲明資料(頁3-1)。

資料類型

内表是ABAP/4中兩種結構化資料類型中的一種。其它結構化資料類型是字段串(參見結構化資料類型(頁3-6))。内表包括任意資料類型相同的行。行的資料類型可以是基本的或結構化的。該定義打開了多種内表結構,範圍從包含一個字段的行到包含字段串将内表作為元件的行。

可以用帶OCCURS參數的TYPES語句将資料類型定義為内表(參見建立内表資料類型(頁78))。定義資料類型時不占用記憶體。

資料對象

資料對象包含定義為内表的資料類型,是實際使用的内表。資料對象占用記憶體,可以對其行進行填充或讀取。

可以使用帶OCCURS參數的DATA語句,或使用TYPE或LIKE參數引用另一個内表将資料對象建立為内表(參見建立内表資料對象(頁57))。

辨別表格行

為了通路表格的某一行,必須指定可用于辨別該行的字段或組合字段。在關系資料模型(用于在R/3系統中存儲長期使用的資料)中,用于該目的的最小組合稱為關鍵字。定義關鍵字的字段稱為關鍵字段。

在關系資料模型中,每個表格至少有一個關鍵字(參見文檔ABAP/4詞典)。特殊唯一關鍵字段的該概念不用于内表。

但是ABAP/4提供了下列特征項以便使用者通路内表行:

内表索引

索引是表格行的序列号,不是表格字段,但由系統自動建立和管理。

可以用DELETE、INSERT、MODIFY、LOOP和READ語句來使用索引。在這些語句中,可以将索引指定為文字或變量。

處理完内表的特定行後,系統字段SY-TA

BI

X一般包含該行的索引。

内表關鍵字

有兩種類型的内表關鍵字。

自定義關鍵字

使用READ語句從内表中讀取行時,可以指定自定義關鍵字(參見用自定義關鍵字讀取單行(頁36))。

預設關鍵字

根據定義,内表的關鍵字段是非數字(類型F、I和P)和非内表的字段。這些關鍵字段形成内表的标準關鍵字。

要獲得帶嵌套結構(包含字段串作為元件的表格行)的内表标準關鍵字,系統将子結構分為基本字段層次。

根據填充内表的方式不同,内表可以包含帶相同标準關鍵字的多行。

用COLLECT、READ、SORT和SUM語句使用内表的關鍵字段。如果标準關鍵字段是内表行的第一個元件,這有助于提高這些語句的效率。建立内表時請記住這一點。