ABAP基礎:數據類型
數據類型-Data Type:定義程序中可以使用的數據類型,使用前要先定義
數據變量-Data Variable:參照數據類型定義的、可以存儲值的變量,就是變量嘛
數據類型
- 數據類型在ABAP程序中用於定義變量類型
- 數據類型和數據對象是單獨聲明的,數據對象則參照數據類型定義
- 在程序中利用TYPES語句聲明數據類型,只能在該程序中使用,也成為本地數據類型
- 本地數據類型可以參照ABAP數據類型進行聲明
數據變量
- 數據變量是在程序中參照數據類型定義的值。
- 常用方法是用Data語句定義變量
註意:變量實際指數據對象,數據對象在程序執行期間占用內存空間
三種數據類型
1.ABAP基本數據類型
- 系統內部定義的數據類型 https://www.cnblogs.com/zhaorp/p/6925301.html
-
類型
允許最大長度(字符數)
默認長度(省略時采用)
說明
初始值
C
1~262143個字符
1 字符
如果未在 DATA 語句中指定參數<length>和<type>,則創建長度為 1 的字符
每個位置都是空格
N
1~262143個字符
1 字符
0到9之間字符組成的數字字符串
如果未在 DATA 語句中指定參數<length>,則創建長度為 1
"0"每個位置都是阿拉伯數字0
D
8 個字符
日期格式必須為 YYYYMMDD 取值範圍:YYYY (year): 0001 to 9999, MM(month): 01 to 12, DD (day): 01 to 31
"00000000"
T
6 個字符
格式為 24-hour的 HHMMSS
HH:00 to 23
MM: 00 to 59
SS: 00 to 59
"000000"
I
4 bytes
-2.147.483.648 to +2.147.483.647(.點號為千分位分隔符,不是小數點,而,逗號則表示是小數點)
如果運算出現非整型的結果(如小數)則進行四舍五入,而不是截斷
0
F
8 bytes
小數位最大可以到17位,即可精確到小數點後17位
取值範圍:-1,7976931348623157EE+308 to -2,2250738585072014EE-308 for the negative area, the value zero, and +2,2250738585072014EE-308 to +1,7976931348623157EE+308 for the positive area.
如果要求高精度,則不應該使用類型 F 數據。而應代之以類型 P 數據
F賦值時,會轉換為標準形式:<±尾數部分>E±<指數部分>,且尾數部分的小數位最多為17位
0
如果值是小數,則要將值使用引號引起來
P
1 to 16 bytes
8 bytes
有效長度為1到16個字節。
兩個數字位壓縮後才占一個字節,由於0-9的數字只需要4Bit位,所以一個字節實質上允許存儲二位數字,這就是P數據類型為壓縮數據類型的由來,因為定義的的數據長度比存儲於內存中要長。並借用最後半個字節,即字面上的一位來存儲小數點、正號、負號、或者是這三種中間的組合————存儲的可能是通過將小數點與正負號經過某種位運算後的結果,因為半個字節不可能存儲小數或正負號的所對應的ASCII碼(都比15大)
P類型最多允許14位小數位,即可以精確到小數點後14,再除開小數點與正負號占半個字節,即字面上1位4Bit,此時最大整數位最長可達16*2 = 32 – 1 = 31 -14 = 17位
Depending on the field length len(len表示定義時P的整個長度) and the number of decimal places dec(dec表示小數位), the following applies for the value area: (-10^(2len -1) +1) / (10^(+dec)) to (+10^(2len -1) -1) /(10^(+dec)) in steps of 10^(-dec). Values in between this range are rounded off.
在計算過程中如果小數部分過長,則進行四舍五入
0
若小數部分超過長度,則自動按四舍五入將多余的小數除掉;如果整數部分超過長度,則系統運行出錯
如果值是小數,則要將值使用引號引起來
X
1~524,287 bytes
1 byte
十六進制字符 0-9, A-F具體的範圍為:00~FF
類型X是十六進制類型,可表示內存字節實際內容,使用兩個十六制字符表示一個字節中所存儲的內容。但直接打印輸出時,輸出的還是賦值時字面意義上的值,而不是Unicode解碼後的字符
如果未在 DATA 語句中指定參數<length>,則創建長度為 1
註:如果值是字母,則一定要大寫,否則賦值不進
DATA: x2(2) TYPE x.
x2 = ‘3AA‘.
WRITE : / x2."輸出賦值時字面上的值:3AA0十六進制的00
string
不限定
在系統內部,長度可變的內置類型(String、XString)是通過引用實際動態的數據對象的固定內存地址來進行操作,因而這兩種內置類型和引用類型一樣,屬於縱深類型。
長度為0的空字符串‘‘
xstring
不限定
由十六進制字符 0-9, A-F組成字符串。直接打印輸出時,輸出的還是賦值時字面意義上的值,而不是Unicode解碼後的字符串
註:如果值是字母,則一定要大寫,否則賦值不進
DATA : xs TYPE xstring .
xs = ‘303132‘."表示字符串 012
WRITE :/ xs."但輸出的還是303132長度為0的空字符串‘‘
b
1 Byte
0 to 255屬於ABAP內部類型,在ABAP程序中不能直接使用
0
s
2 bytes
-32.768 to +32.767屬於ABAP內部類型,在ABAP程序中不能直接使用
0
2.局部數據類型-存在於程序內部
3.全局數據類型-存在於數據字典中
- 全局數據類型是指所有程序都可以使用的數據類型
- 可以用TYPE語句參照ABAP數據字典裏的數據類型定義變量
聲明數據類型
1.參考基本數據類型定義變量
DATA:gv_num TYPE i, gv_deci TYPE f.
TYPE後面是ABAP基本數據類型
2.參照局部數據類型定義變量
將程序中常用的數據及結構聲明為一個數據類型,定義變量時可以參考此數據類型定義,但此數據類型只能在改程序內容使用
TYPES: BEGIN OF t_struct, col1 TYPE c, col2 TYPE i, col3 TYPE d, END OF t_struct. DATA: gs_struct TYPE t_struct, gv var LIKE gs struct-col1.
3.參照全局數據類型定義變量
利用ABAP數據字典(表/結構體/數據元素等)定義變量的方法,此數據類型在所有程序都可以使用
DATA: gv_carrid TYPE s_carr_id, gv_connid TYPE sflight-carrid, gv_matnr TYPE mara-matnr.
DATA語句
用於定義數據變量,變量名可以包含_, 長度最長30位
1. TYPE type
定義變量的數據類型
DATA: gv_num TYPE i.
冒號是一個命令從逗號開始, 遇到句號結束
下面的命令效果等同
DATA gv_num1 TYPE I. DATA gv_num2 TYPE I. DATA: gv_num1 TYPE I, gv_num2 TYPE I.
2. LIKE num
定義與前一個變量相同類型的變量, num可以是任何一種數據類型(字段/參數.結構體/系統變量)
DATA: GV_NUM3 LIKE GV_NUM1.
3.VALUE INT
所有數據類型都存在初始值
DATA語句可以用VALUE選項設置初始值INT
DATA: GV_NUM TYPE I VALUE 123, GV_FLAG VALUE ‘X‘, GV_VAL VALUE IS INITIAL GV_IDX LIKE SY-TABIX VALUE 45.
VALUE IS INITIAL 變量的初始值為所參照的數據類型的初始值,可以省略,效果一樣
4. LENGTH N
LENGTH N用於指定字段長度, 僅適用數據類型: C/N/P/X
DATA: GV_NUM TYPE N LENGTH 2.
5. DECIMALS N
用於指定1-14位小數,僅適用於數據類型P
DATA: GV_NUM TYPE P DECIMALS 3.
第一個helloworld
REPORT Z_YZW_HELLOWORLD. "報表名稱 TYPES T_VAR TYPE C LENGTH 20. "聲明一個局部數據類型為C,長度為20 DATA GV_VAR TYPE T_VAR. "聲明一個變量,類型使用上面定義的數據類型 GV_VAR = ‘HELLOW ABAP‘. "給變量賦值 WRITE GV_VAR. "打印變量
- .號表示一行代碼結束
- 字符串用單引號
- =號前後要留空格, 和SHELL一樣
- *號表示一行註釋, "號表示右邊註釋
命名規則
全局變量以G開頭
局部變量以L開頭
一個好的命名包括:作用範圍/數據類型/含義
數據基本運算中, 浮點數需要調用function FLTP_CHAR_CONVERSION轉換成char類型
DATA GV_F1 TYPE F VALUE ‘2.22‘. DATA GV_F2 TYPE F VALUE ‘3.33‘. DATA GV_FRESULT TYPE F. DATA GV_CRESULT TYPE C LENGTH 16. GV_FRESULT = GV_F1 * GV_F2. WRITE / GV_FRESULT. CALL FUNCTION ‘FLTP_CHAR_CONVERSION‘ exporting DECIM = 2 INPUT = GV_FRESULT importing FLSTR = GV_CRESULT. WRITE / GV_CRESULT .
ABAP基礎:數據類型