Day 1 [This is Questions of ABAP Certification.]
REPORT ztestpon NO STANDARD PAGE HEADING.
DATA: BEGIN OF itab OCCURS 0,
field1(8),
field2(8),
END OF itab.
MOVE: ‘X’ TO itab-field1,
‘Y’ TO itab-field2.
APPEND itab.
APPEND itab.
MOVE: ‘Y’ TO itab-field1.
APPEND itab.
CLEAR itab.
MOVE: ‘X’ TO itab-field2.
APPEND itab.
What are the contents of itab after executing the above code?
a) X Y
X Y
Y
X
b) X Y
Y
X
c) X Y
Y X
X
d) X Y
X Y
Y Y
X
e) X Y
Y X
Y X
Y X
f) XXY YYX
g) X
Answer
ข้อ D ครับ
d) X Y
X Y
Y Y
X
เราลองมาดูว่าทำไหมถึงได้คำตอบข้อ D นะครับ
DATA: BEGIN OF itab OCCURS 0,
field1(8),
field2(8),
END OF itab.
คำสั่งข้างบน เป็นการสร้าง Internal Table ที่ชื่อ itab โดยประกอบไปด้วย field1(8) กับ field2(8) (จะสังเกตุได้ว่า fileld1 และ field2 ไม่ได้ถูกกำหนด Type แต่ กลับมีวงเล็บเปิด เลข 8 วงเล็บปิด ต่อท้าย ซึ่งในส่วนนี้และ เป็นตัวแสดงถึงว่า field1 และ field2 เป็น Type แบบ C โดยมี Length เท่ากับ 8 )
MOVE: ‘X’ TO itab-field1,
‘Y’ TO itab-field2.
คำสั่งต่อมา เป็นการให้ค่าตัวแปร (Value Assignment) โดยที่ให้ค่า X เข้าไปใน itab-field1และ ให้ค่า Y เข้าไปใน itab-field2
ซึ่งตรงนี้ถ้าถามว่า Internal Table itab มีค่าอยู่ข้างในไหม ตอบได้เลยว่าไม่ครับ สาเหตุเกิดจาก การที่เราให้ค่าตัวแปร โดยคำสั่ง MOVE นั้นเป็นการให้ค่าตัวแปรที่อยู่ในส่วนของ Header Line ของ Internal Table ซึ่งยังไม่ถูกเพิ่มลง Internal Table จริงครับ ดังนั้นในตรงนี้ข้อมูลของ Internal Table itab ยังเป็นค่าว่างครับ
APPEND itab.
คำสั่งต่อมา คำสั่ง APPEND itab จะเป็นการนำข้อมูลจาก Header Line ไปทำการเพิ่มข้อมูลที่เรคคอร์ดถัดจาก เรคคอร์ดสุดท้ายของ Internal Table
ดังนั้นในตรงนี้ข้อมูลของ Internal Table itab จะมีค่าตามนี้ครับ
field1 field2
X Y
APPEND itab.
คำสั่งต่อมา คำสั่ง APPEND itab ครั้งที่ 2 จะเป็นการนำข้อมูลจาก Header Line(ซึ่ง Header Line ยังมีค่าคงเดิมครับ) ไปทำการเพิ่มข้อมูลที่เรคคอร์ดถัดจาก เรคคอร์ดสุดท้ายของ Internal Table
ดังนั้นในตรงนี้ข้อมูลของ Internal Table itab จะมีค่าตามนี้ครับ
field1 field2
X Y
X Y
MOVE: ‘Y’ TO itab-field1.
คำสั่งต่อมา เป็นการให้ค่าตัวแปร (Value Assignment) โดยคราวนี้ให้ Y เฉพาะ field1 ซึ่งตอนนี้ Header Line จะมีค่าเป็น field1= Y field2 = Y สังเกตุได้ว่า field2 ไม่ได้มีค่าเปลี่ยนแปลงค่า
แต่ใน Internal Table itab ยังมีค่าเท่าเดิม
APPEND itab.
คำสั่งต่อมา คำสั่ง APPEND itab ครั้งที่ 3 จะเป็นการนำข้อมูลจาก Header Line(ซึ่ง Header Line จะมีค่าเป็น field1= Y field2 = Y) ไปทำการเพิ่มข้อมูลที่เรคคอร์ดถัดจาก เรคคอร์ดสุดท้ายของ Internal Table
ดังนั้นในตรงนี้ข้อมูลของ Internal Table itab จะมีค่าตามนี้ครับ
field1 field2
X Y
X Y
Y Y
CLEAR itab.
คำสั่งต่อมา คำสั่ง CLEAR itab เป็นคำสั่งที่ใช้ในการลบค่า ใน Header Line
ดังนั้นในตรงนี้ข้อมูลของ Internal Table itab จะมีค่าเท่าเดิม
field1 field2
X Y
X Y
Y Y
MOVE: ‘X’ TO itab-field2.
คำสั่งต่อมา เป็นการให้ค่าตัวแปร (Value Assignment) โดยคราวนี้ให้ X เฉพาะ field2 ดังนั้น Header Line จะมีค่าเป็น field1= ค่าว่าง field2 = X
ส่วนข้อมูลของ Internal Table itab จะมีค่าเท่าเดิม
field1 field2
X Y
X Y
Y Y
APPEND itab.
คำสั่งสุดท้าย คำสั่ง APPEND itab ครั้งที่ 4
เป็นการนำข้อมูลจาก Header Line(ซึ่ง Header Line จะมีค่าเป็น field1= ค่าว่าง field2 = X) ไปทำการเพิ่มข้อมูลที่เรคคอร์ดถัดจาก เรคคอร์ดสุดท้ายของ Internal Table
ดังนั้นในตรงนี้ข้อมูลของ Internal Table itab จะมีค่าตามนี้ครับ
field1 field2
X Y
X Y
Y Y
X
ดังนั้นคำตอบคือข้อ D นะครับ