1. 程式人生 > >ABAP ——表型別分析 透明表 表簇/簇表 池表

ABAP ——表型別分析 透明表 表簇/簇表 池表

   最近看了一下ABAP的表型別相關知識,做一個自己的分析總結。

ABAP的表型別似乎我感覺只應該有2種,而不是大家說的3種。

從資料儲存的原理上來看的。下面我做一個分析。

一般情況下,我們都說ABAP中有表有3種類型 :透明表 (transparent table)、簇表(cluster table)、 池表 (pool table)。

先來說下什麼叫做透明表(transparent table):透明表是一種和資料庫具有相同結構的表儲存結構,假設我在SAP系統中,使用SE11建立了一個CUSTOMER TABLE 那麼我建立的結構是怎麼樣的,在資料庫的儲存結構就是怎麼樣的,但是在SAP中,當我們對透明表調整結構的時候,不需要我們對資料庫表也進行調整,這是SAP的方便的特點之一,這裡需要說明我們會經常遇到的一種情況:當我們刪除一行時候,儲存啟用會沒有問題,但是為什麼我們修改一行的時候,例如把DATA ELEMENT改了,怎麼就不讓激活了呢。遇到這種凡是對DATA ELEMENT 改變的操作,我們需要儲存,然後去SE14中啟用,要不然就在SE11中整行刪掉重建.

什麼是簇表和表簇?CLUSTER TABLE 和TABLE CLUSTER.

這倆名詞,剛開始學的時候,真實很折磨人,根本不知道啥意思。但是隨著對知識的進一步積累,慢慢的有些眉目了,也感到了它存在合理性。

什麼是簇表?我們可以很直觀的理解為,在DATABASE (資料層),除了我們定義的主鍵,然後把其他的內容都當成表格的一個欄位存起來。也就是說這個表的結構可以理解為:主鍵+ 一個儲存功能的欄位的 組合。

然而在其中還會有PAGENO的這個欄位,這就是說,一行空間不夠(32KB)用,在主鍵相通的情況下,繼續細分,用來將屬於一個主鍵的內容聯絡起來的欄位1、2、3.。。。。

要理解簇表,首先自己建立一個瞧瞧吧。

SE11,首先建立一張透明表,透明表的名字一定要少於10位。

然後點選 UTILITES->OTHER DICTIONARY OBJECTS

自定一個名字少於10位的表簇。(table CLUSTER)

表簇和簇表的區別和聯絡?

表簇,是該表在DATABASE的儲存結構,

簇表,是該表在SAP DICTIONARY展現在我們眼前的結構。

於是我們就會知道為什麼我們不能用NATIVE SQL去訪問 這個簇表了。因為我們在SAP中的看到的欄位,在DATABASE 是不存在的,是通過轉化的才顯示在我們SAP DICTINARY中的結構。

恩,然後就是在SAP中我們想看到什麼樣的結構 就要在簇表中建立一個什麼樣的結構。

簇表都是由透明錶轉化成的,要建立簇表,首先就要建立一個透明表,這個透明表的顯示結構,就是我們想想在簇表中顯示的結構,然後在SE11 進去看觀看此透明表狀態並且處於修改狀態,點選EXTRAS -> CHANGE

table category. 選最後一個 (RADIO BUTTON) 複製簇表的選項,是個小對勾,這個點完了,系統會自動跳到SE11的介面,好像什麼也沒有發生。這時候我們去DELIVERY AND  MAINTENANCE標籤下面看,就會出現了一個POOL/CLUSTER的文字框,填入我們建立的表簇。啟用儲存。就搞定了。

注意,這裡我們要在表簇中 手工將VARKEY 刪掉,換成我們表的要顯示的主鍵, 表簇主鍵為我要顯示主鍵的子集。

而表池建立後啟用就可以了。然後進入透明表CHANGE TABLE CATEGORY 中點第三個麼再進去DELIVERY AND  MAINTENANCE中 填入 表池,啟用。

池表和簇表的建立過程相同。

但是池表和簇表還是有區別的。

INSERT 透明表 INTO 簇表。 只要透明的簇表的主鍵都在透明表裡面就行。就是透明表主鍵多了也無所謂。

INSERT 透明表 INTO 池表. 透明表和池表的主鍵必須相同的。

池表和簇表的儲存原理相同的。

所以我感覺,對於從原理上來分析,我們只需要將SAP 的表分成2類就OK了。