我的網誌清單

20120312

ABAP-02 DATA/TYPE/WA/ITAB

ABAP-02 DATA/TYPE/WA/ITAB

1. 概論

ABAP語法的結尾為 .

備註為"或*

2. 變數的宣告(data)

DATA : <變數名>(<長度>) TYPE <數據類型> VALUE <預設給定值> .

DATA后的':'為宣告多個變數時用的,若只是宣告一個變數可以不用

範例:宣告一變數名為CHAR1長度20/型態為字元/預設值為'我愛地球'

DATA : CHAR1(20) TYPE C VALUE '我愛地球' .

範例:宣告一變數名為CHAR1長度20/型態為字元/預設值為'蔚然天空',並宣告另一變數CHAR2,其相關宣告皆同CHAR1

DATA : CHAR1(20) TYPE C VALUE '我愛地球' , CHAR2 LIKE CHAR1 .

3. 常數的宣告(CONSTANT)

常數是指程式一但於執行期間,此數值皆不能被改變,並於后續可被引用

範例:宣告一變數名為CON長度20/型態為I/預設值為'3'

DATA : CON(20) TYPE I VALUE 3 .

4. 自行定義變數型態(TYPES)

ABAP預設定義的變數型態有8種,若不符使用時可自行定義,甚至可以自行定義一串變數型態的組合,稱為STRUCTURE(結構)

範例:自定二個變數型態,一為NAME,一為TEAMS,宣告二個變數名為PLAYER及NICKNAME/型態為先前自定義的變數型態NAME/預設值為'蔚然天空' ,宣告二個常數名為TEAM1及TEAM2/型態為先前自定義的變數型態TEAMS/預設值為'蔚然天空'

TYPES : NAME(10) TYPE C, TEAMS(20) TYPE C .

DATA : PLAYER TYPE NAME VALUE '蔚然天空', NICKNAME LIKE PLAYER .

CONSTANT : TEAM1 TYPE TEAMS VALUE '甲組' , TEAM2 TYPE TEAMS VALUE '乙組' .

範例:定義一結構型態EMP,各欄位型態同USER21的相對應欄位

TABLES : USER21 .

TYPES : BEGIN OF EMP,

NAME LIKE USER21-BNAME,

TELNUM LIKE USER21-PERSNUMBER,

ADDR LIKE USER21-ADDRNUMBER,

END OF EMP.

5. WORKING AREA的宣告

WORKING AREA是屬於STRUCTURE的一種,其只有存單一筆RECORD,其宣告同一般變數宣告方式

DATA : BEGIN OF <WA名稱>,

TYPE <數據類型> VALUE <預設值> ,

TYPE <數據類型> VALUE <預設值> ,

END OF <WA名稱> .

範例:宣告一WA名為USERINF,其包含三個欄位工號型態C/姓名型態為C/電話型態N

DATA : BEGIN OF USERINF,

SID(10) TYPE C, "工號

NAME(10) TYPE C, "姓名

TEL(10) TYPE N, "電話

END OF USERINF .

範例:WA也可以用LIKE的方式

DATA : USER2 LIKE USERINF .

範例:宣告一WA名為EMP,其繼承了USERINF的三個欄位,並再加入了生日型態D/地址型態為C

DATA : BEGIN OF EMP,

INCLUDE STRUCTURE USERINF,

BIRDATE TYPE D,

ADDR(300) TYPE C,

END OF EMP.

6. INTERNAL TABLE的宣告

INTERNAL TABLE亦是屬於STRUCTURE的一種,其存有多筆RECORD(WA是存有單一筆record的structure)

可分類為STANDARD/SORTED/HASHED三種類型

UNIQUE/NON-UNIQUE=>指定key值,只能用於SORTED及HUSHED的TABLE上

WITH HEADER LINE=>此INTERNAL TABLE包含了一個WA

INITIAL SIZE n=>指定一開始的internal table的大小

宣告的語法非常彈性,所以很容易形成WA及ITAB的混淆(原則上wa只有一筆資料)

以下的範例是具有連貫性

範例:自行定義一個結構型態,其可能為WA或ITAB

TABLES : USER21 . *如下定義了一個結構型態叫EMP,這個結構有可能是WA或是ITAB

TYPES : BEGIN OF EMP, "此型態為WA

NAME LIKE USER21-BNAME,

TELNUM LIKE USER21-PERSNUMBER,

ADDR LIKE USER21-ADDRNUMBER,

END OF EMP.

TYPES : BEGIN OF EMP OCCURS 0, "此型態為ITAB

NAME LIKE USER21-BNAME,

TELNUM LIKE USER21-PERSNUMBER,

ADDR LIKE USER21-ADDRNUMBER,

END OF EMP.

範例:如下宣告一個STNADARD 的ITAB名叫EMPTAB,起始大小為10,並且具有HEADER LINE,其意義為先將ITAB的結構先定義為一個型態,之后用宣告變數的方式,將某個變數的型態等同於此自行定義的結構,以省掉用宣告去指定每一個ITAB中欄位的定義

DATA : EMPTAB TYPE STANDARD TABLE OF EMP INITIAL SIZE 10 WITH HEADER LINE .

範例:如下宣告一個STANDARD的ITAB名叫EMPTAB2,其架構相似於EMPTAB(此為ITAB),且不具有HEADER LINE

DATA : EMPTAB2 LIKE STANDARD TABLE OF EMPTAB .

範例:如下宣告一個ITAB名叫EMPTAB3,其架構相似於EMPTAB,因EMPTAB為STANDARD,故EMPTAB3會承接此屬性,並其指定起始大小為10且具有HEADER LINE(OCCURS 等於指定了INITIAL SIZE及WITH HEADER LINE)

DATA : EMPTAB3 LIKE EMPTAB OCCURS 10 .

範例:如下宣告一個SORTED的ITAB名叫EMPTAB4,其key值為NAME這個欄位,並指定起始大小為10及具有HEADER LINE

DATA : EMPTAB4 LIKE SORTED TABLE OF EMPTAB WITH UNIQUE KEY NAME INITIAL SIZE 10 WITH HEADER LINE.

範例:如下宣告一個HUSHED TABLE名叫EMPTAB5,其架構相似於EMPTAB,其沒有指定key值並具有HEADER LINE

DATA : EMPTAB5 LIKE HUSHED TABLE OF EMPTAB WITH NON-UNIQUE WITH HEADER LINE.

7. WA/ITAB給值的方式

WA可直接給值

ITAB若有HEADER LINE(可當做一個WA)可直接把值給WA,再APPEND到ITAB的最后一筆,若沒有HEADER LINE,則需借用其他的WA,把值給這個WA,再APPEND到ITAB的最后一筆,或是用OPENSQL直接INTO到ITAB中

範例:定義一個WA后,直接給定值

DATA : BEGIN OF USERINF,

SID(10) TYPE C,

NAME(20) TYPE C,

TEL(20) TYPE N,

END OF USERINF .

DATA : USER2 LIKE USERINF .

USERINF-SID = '10913060'.

USERINF-NAME = 'SKYSTUDIO'.

USERINF-TEL = ' 04-22223333 '.

USER2 = USERINF .

WRITE : USER2, USERINF-SID .

*輸出結果 10913060 SKYSTUDIO 04-22223333 10913060

範例:APPEND INTO ITAB宣告一個ITAB WITH HEADER LINE,故可以直接給值並放到ITAB的最后一筆

TABLES : USER21 .

DATA : BEGIN OF EMP OCCURS 0,

NAME LIKE USER21-BNAME,

TELNUM LIKE USER21-PERSONNUMBER, ADDR LIKE USER21-ADDRNUMBER,

END OF EMP.

EMP-NAME='SKYSTUDIO' .

EMP-TELNUM='04-22223333' .

EMP-ADDR='HSINCHI' .

APPEND EMP.

範例:ITAB沒有HEADER LINE所以需靠一個外部的WA把值並放到ITAB的最后一筆

TABLES : USER21 .

DATA : BEGIN OF EMPTAB, "此為WA NAME

LIKE USER21-BNAME,

TELNUM LIKE USER21-PERSONNUMBER,

ADDR LIKE USER21-ADDRNUMBER,

END OF EMPTAB.

DATA : EMP LIKE STANDARD TABLE OF EMPTAB. "此為ITAB並可改寫為 EMP TYPE STANDARD TABLE OF EMPTAB EMPTAB-NAME='SKYSTUDIO' . EMPTAB-TELNUM='04-22223333' . EMPTAB-ADDR='HSINCHI' .

APPEND EMPTAB INTO EMP . "將WA的值寫到ITAB

沒有留言:

張貼留言