ABAP語法基礎篇(1)——資料型別和物件
一 、資料型別和物件
在ABAP中可以使用與標準資料宣告相似的語法處理資料型別,而與資料物件無關。在程式中必須宣告要使用的全部資料物件。宣告過程中,必須給資料物件分配屬性,其中最重要的屬性就是資料型別。
1.1 基本資料型別
資料型別 | 預設大小 | 有效大小 | 初始值 | 說明 |
---|---|---|---|---|
C | 1 | 1 - 65535 | SPACE | 文字、字元(字母數字字元) |
D | 8 | 8 | '00000000' | 日期(格式: YYYYMMDD ) |
F | 8 | 8 | 0 | 浮點數 |
I | 4 | 4 | 0 | 整型(整數) |
N | 1 | 1 - 65535 | '00...0' | 數字文字 |
P | 8 | 1 - 16 | 0 | 壓縮號 |
T | 6 | 6 | '000000' | 時間(格式: HHMMSS ) |
X | 1 | 1 - 65535 | X'00' | 十六進位制 |
對算術運算的非整型結果(如分數)進行四捨五入,而不是截斷。型別 P 資料允許在小數點後有數字。
有效大小可以是從 1 到 16位元組的任何值。將兩個十進位制數字壓縮到一個位元組,而最後一個位元組包含一個數字和符號。在小數點後最多允許14個數字。
1.2 系統定義的資料物件
SPACE | 空白字串 |
---|---|
SY-SUBRC | 系統執行傳回值, 0 表示成功 |
SY-UNAME | 使用者 |
SY-DATUM | 系統日期 |
SY-UZEIT | 系統時間 |
SY-TCODE | 當前執行程式的 Transaction code |
SY-INDEX | 當前 LOOP 迴圈過的次數 |
SY-TABIX | 當前處理的是 Internal Table (內部表) 的第幾行 |
SY-TMAXL | Internal Table (內部表) 的總行數 |
SY-SROWS | 螢幕總行數 |
SY-SCOLS | 螢幕總列數 |
SY-VLINE | 畫豎線 |
SY-ULINE | 畫橫線 |
SY-PAGNO | 當前頁號 |
SY-LINSZ | 當前報表寬度 |
SY-LINCT | 當前報表長度 |
SY-LISND | 列表索引頁 |
SY-LISTI | 上一個列表的索引 |
SY-LILLI | 絕對列表中選定的行號 |
SY-CUROW | 螢幕上的行 |
1.3 確定資料物件的屬性
如果要查明資料物件的資料型別,或者要在程式的執行期間使用其屬性,可使用 DESCRIBE
語句。語法如下:
DESCRIBE FIELD <f> [LENGTH <l>] [TYPE <t> [COMPONENTS <n>]]
[OUTPUT-LENGTH <o>] [DECIMALS <d>]
[EDIT MASK <m>].
將由語句的引數指定的資料物件
DESCRIBE FIELDS
語句具有下列引數:
引數 | 用途 |
---|---|
LENGTH | 確定欄位長度 |
TYPE | 確定資料型別 |
OUTPUT-LENGTH | 確定輸出長度 |
DECIMALS | 確定小數位 |
EDIT MASK | 確定轉換例程 |
1.3.1 確定欄位長度
要確定資料物件的長度 ,利用 DESCRIBE FIELD
語句使用 LENGTH
引數,如下所示:
DESCRIBE FIELD <f> LENGTH <l>.
系統讀取欄位 <f>
的長度,並將值寫入欄位 <l>
。
1.3.2 確定資料型別
要確定欄位的資料型別 , 利用 DESCRIBE FIELD
語句使用 TYPE
引數,如下所示:
DESCRIBE FIELD <f> TYPE <t> [COMPONENTS <n>].
系統讀取欄位 <f>
的資料型別,然後將值寫入欄位 <t>
。
除返回預定義資料型別 C
、 D
、 F
、 I
、 N
、 P
、 T
和 X
外,該語句還返回:
s | 對於帶前導符號的兩位元組整型 |
---|---|
b | 對於無前導符號的一位元組整型 |
h | 對於內表 |
c | 對於元件中沒有巢狀結構的結構 |
1.3.31 確定輸出長度
要確定欄位的輸出長度 , 利用 DESCRIBE FIELD
語句使用 OUTPUT-LENGTH
引數,如下所示:
DESCRIBE FIELD <f> OUTPUT-LENGTH <o>.
系統讀取欄位 <f>
的輸出長度,並將值寫入欄位 <o>
。
1.3.4 確定小數位
若要確定型別 P
欄位的小數位的個數,利用 DESCRIBE FIELD
語句使用 DECIMALS
引數,如下所示:
DESCRIBE FIELD <f> DECIMALS <d>.
系統讀取欄位 <f>
的小數個數,並將值寫入欄位 <d>
。
1.3.5 確定轉換例程
要確定 ABAP/4 詞典中某欄位的轉換例程是否存在,如果存在,名稱是什 麼, 利用 DESCRIBE FIELD
語句使用 EDIT MASK
引數,如下所示:
DESCRIBE FIELD <f> EDIT MASK <m>.
如果 ABAP/4 詞典中欄位 <f>
的轉換例程存在,則系統將其寫入欄位 <m>
,然後將系統欄位 SY-SUBRC
中的返回程式碼設為 0
。
可以像下面所顯示的那樣,在 WRITE
語句中將欄位 <m>
直接用作格式模板:
WRITE <f> USING EDIT MASK <m>.
如果欄位 <f>
沒有轉換例程,則系統將返回程式碼設為 4
。