深入解析ABAP基本資料型別(ABAP elementary types)
在SAP系統中,每個byte可以顯示一個character(字元)或兩個十進位制/十六進位制數字。
在ABAP中定義變數時,如果指定長度,其單位是byte,而不是字元數;在SAP Dictionary中定義data type時,如果指定長度,其單位為字元數,而不是byte。這是一個非常重要的區別,因為在SAP系統中,每個byte可以顯示一個character(字元)或兩個十進位制/十六進位制數字。
ABAP的基本資料型別大致可以分為三類:
a.所有屬性已由ABAP指定,開發人員無法更改的基本型別,包括D,F,I,T四種;
b.部分屬性(如長度,小數點位置)由開發人員指定的基本型別,包括C,N,P,X四種;
c.部分屬性不固定(如長度),在程式中可以變化的基本型別,包括STRING,XSTRING兩種。
按照另一種方法,可將ABAP的基本型別分為兩類:
a.串,包括字串和數字串,具體到型別,包括C,N,P,X,STRING,XSTRING,D,T。字串的每一位為alphanumeric characters,輸字串的每一位為numeric characters,這兩種串的每一位都佔一個byte;
b.數字,具體到型別,包括I,F。數字型別的每一位為digit,兩個digit佔一個byte。
在程式中使用基本型別時,最難準確理解的是I,F,C,N,P,X這幾種基本型別。
TYPE I 的數值範圍是-2**31 to 2**31-1,即-2147483648 to 2147483647;
TYPE F的數值範圍是1x10**-307 to 1x10**308;
而在使用DATA定義變數時可以設定length的型別P、C、N、X這幾個型別,長度都是由length語句指定的。
例如P型別(為Packed number),長度範圍為1~16,如果不指定長度,則預設為8。假設length指定的長度為16,則此變數的長度為32=16*2個數字(此32包括正負符號1位,即數字部分只能有31位。但不包括小數點,小數點是不計入此長度的),而此變數的output length為33=2*16+1。例如定義一個長度為4的P型別變數:
data: a type p DECIMALS 2 length 4.
a = '-12345.25'.(不包括小數點的數字部分為7=2*4-1位)
a = '12345.25'. (不包括小數點的數字部分為7=2*4-1位)
a = 12345. (不包括小數點的數字部分為7=2*4-1位,由於小數部分保留2位,故整數部分最多隻能為5位)
例如型別C(為alphanumeric characters),長度範圍為1~65535,如果不指定長度,則預設為1。例如length指定的長度為20,則此變數的長度為20byte(20byte可顯示20個characters包括alphanumeric characters和numeric characters),其output length為20。
例如型別N(為numeric characters),長度範圍為1~65535,如果不指定長度,則預設為1。例如length指定的長度為20,則此變數的長度為20byte(20byte可顯示20個characters包括alphanumeric characters和numeric characters),其output length為20。
例如型別X(為Hexadecimal field),長度範圍為1~65535,如果不指定長度,則預設為1。例如length指定的長度為20,則此變數的長度為20byte(20byte可顯示40個十六進位制數字),其output length為40=20*2。
總結: 賦給某個變數的值的長度(某些型別的保留長度位數要考慮進去)只要不超過其output length即可。