SAP ตารางภายใน ABAP: สร้าง อ่าน เติม คัดลอก และลบ

ตารางภายในคืออะไร?

ตารางภายใน ใช้เพื่อรับข้อมูลจากโครงสร้างคงที่สำหรับการใช้งานแบบไดนามิกใน ABAP แต่ละบรรทัดในตารางภายในมีโครงสร้างฟิลด์เหมือนกัน การใช้งานหลักสำหรับตารางภายในคือการจัดเก็บและจัดรูปแบบข้อมูลจากตารางฐานข้อมูลภายในโปรแกรม

พื้นที่ทำงานคืออะไร?

พื้นที่ทำงานเป็นข้อมูลแถวเดียว ควรมีรูปแบบเดียวกันกับตารางภายในใดๆ ใช้ในการประมวลผลข้อมูลในตารางภายในทีละบรรทัด

ความแตกต่างระหว่างตารางภายในและพื้นที่ทำงาน?

รูปภาพแทนคำพูดได้นับพันคำ

ความแตกต่างระหว่างตารางภายในและพื้นที่ทำงาน

ประเภทของตารางภายใน

ตารางภายในมีสองประเภท

  1. ตารางภายในที่มีบรรทัด HEADER
  2. ตารางภายในที่ไม่มีบรรทัด HEADER

ตารางภายในพร้อมบรรทัดส่วนหัว

  • ที่นี่ระบบจะสร้างพื้นที่ทำงานโดยอัตโนมัติ
  • พื้นที่ทำงานมีประเภทข้อมูลเดียวกันกับตารางภายใน
  • พื้นที่งานนี้เรียกว่าบรรทัด HEADER
  • ที่นี่เป็นที่ที่การเปลี่ยนแปลงทั้งหมดหรือการดำเนินการใดๆ กับเนื้อหาของตารางเสร็จสิ้นแล้ว ด้วยเหตุนี้จึงสามารถแทรกบันทึกลงในตารางได้โดยตรงหรือเข้าถึงได้จากตารางภายในได้โดยตรง

ตารางภายในที่ไม่มีบรรทัดส่วนหัว :

  • ที่นี่ไม่มีพื้นที่ทำงานที่เกี่ยวข้องกับตาราง
  • พื้นที่ทำงานจะต้องระบุอย่างชัดเจนเมื่อเราต้องการเข้าถึงตารางดังกล่าว
  • ดังนั้นจึงไม่สามารถเข้าถึงตารางเหล่านี้ได้โดยตรง

การสร้างตารางภายใน

มีหลายวิธีในการสร้างตารางภายใน มาดูพวกเขาทีละคน -

1.โดยใช้คำสั่งประเภท

ตอนนี้ให้เราสร้างตารางภายใน itab โดยใช้ คำสั่งประเภท.

ไวยากรณ์คือ -

Types : begin of line,

column1 type I,

column2 type I,

end of line.

ตัวอย่าง:

TYPES : begin of line,

empno		type I,

empname(20)   	type c	,

end of line.

คำสั่ง TYPES สร้างเส้นโครงสร้างตามที่กำหนดไว้

ในการสร้าง Internal Table itab จริงๆ ให้ใช้คำสั่งต่อไปนี้

Data itab type line occurs 10.

itab ตารางภายในถูกสร้างขึ้นด้วยโครงสร้างของเส้น นอกเหนือจากการประกาศโครงสร้างของตารางภายในแล้ว ส่วนคำสั่ง OCCURS ยังกำหนดจำนวนรายการตารางที่ถูกเก็บรักษาไว้ในที่เก็บข้อมูลหลัก (ในกรณีนี้คือ 10) เร็กคอร์ดพิเศษจะถูกเขียนลงในพื้นที่การเพจ และอาจส่งผลต่อประสิทธิภาพการทำงาน

2.โดยอ้างอิงถึงตารางอื่น

คุณสามารถสร้างตารางภายในได้โดยอ้างอิงถึงตารางที่มีอยู่ ตารางที่มีอยู่อาจเป็นตารางมาตรฐาน SAP ตาราง ตาราง Z หรือตารางภายในอื่น

ไวยากรณ์-

Data <f> <type> [with header line].

ตัวอย่าง-

DATA itab TYPE line OCCURS 10 with header line.

ที่นี่ itab ตารางภายในจะถูกสร้างขึ้นจากบรรทัดประเภทที่มีบรรทัดส่วนหัว โปรดทราบว่า "พร้อมบรรทัดส่วนหัว" เป็นทางเลือก

3.โดยอ้างอิงถึงโครงสร้างที่มีอยู่

ไวยากรณ์-

Data	<f> LIKE <struct> occurs n [with header line].

ตัวอย่าง-

DATA itab LIKE sline OCCURS 10.

ที่นี่ตาราง itab ถูกสร้างขึ้นโดยมีโครงสร้างเหมือนกับของสไลน์

4.โดยการสร้างโครงสร้างใหม่

ให้เราสร้างตารางภายในด้วยโครงสร้างของเราเอง ที่นี่ตารางจะถูกสร้างขึ้นด้วยบรรทัดส่วนหัว โดยค่าเริ่มต้น.

ไวยากรณ์ –

Data : Begin of <f> occurs <n>,

<component declaration>,

.................................,

End of <f>.

ตัวอย่าง -

Data : Begin of itab occurs 10,

column1       type I,

column2(4)  type C,

column3      like  mara-ernam,

End of itab.

ตารางภายใน itab ถูกสร้างขึ้น

การเติมตารางภายใน

ตอนนี้เราได้สร้างตารางภายในสำเร็จแล้ว มาดูกันว่าเราจะเติมข้อมูลเหล่านั้นด้วยเรกคอร์ดได้อย่างไร มีหลายวิธีในการเติมข้อมูลตาราง

1. ผนวกข้อมูลทีละบรรทัด

วิธีแรกที่ใช้ได้คือการใช้คำสั่ง APPEND

การใช้คำสั่ง APPEND ทำให้เราสามารถเพิ่มหนึ่งบรรทัดจากพื้นที่ทำงานอื่นไปยังตารางภายใน หรือเราสามารถเพิ่มบรรทัดเริ่มต้นหนึ่งบรรทัดลงในตารางภายในได้

ไวยากรณ์ –

APPEND [<wa> TO / INITIAL LINE TO] <itable>.

ที่นี่พื้นที่ทำงาน หรือบรรทัดเริ่มต้นถูกต่อท้ายตารางภายใน -

ตัวแปรระบบ SY-TABIX มีดัชนีของบรรทัดที่ต่อท้าย

ตัวอย่าง:

Data: Begin of itab occurs 10,

col1 type C,

col2 type I,

end of itab.

Append initial line to itab.

ผลลัพธ์ : ' ' '0'

บรรทัดเริ่มต้นจะเพิ่มบรรทัดที่เริ่มต้นด้วยค่าที่ถูกต้องสำหรับประเภทลงในตาราง ในที่นี้ col1 เป็นอักขระ และ col2 เป็นจำนวนเต็ม จากนั้นผนวกบรรทัดเริ่มต้น เพิ่มบรรทัดที่เริ่มต้นตามประเภทข้อมูลของคอลัมน์ เช่น ช่องว่างสำหรับ col1 และ 0 สำหรับ col2

2.การใช้คำสั่ง COLLECT

COLLECT เป็นคำสั่งอีกรูปแบบหนึ่งที่ใช้สำหรับการเติมข้อมูลในตารางภายใน โดยทั่วไป COLLECT จะใช้ในขณะที่แทรกบรรทัดลงในตารางภายในด้วยคีย์มาตรฐานเฉพาะ

ไวยากรณ์-

COLLECT [<wa> INTO] <itable>.

ในกรณีที่ตารางมีบรรทัดส่วนหัว ตัวเลือก INTO จะถูกละเว้น สมมติว่ามีรายการที่มีคีย์เหมือนกับรายการที่คุณพยายามจะผนวกอยู่แล้ว ไม่มีการเพิ่มบรรทัดใหม่ลงในตาราง แต่มีการเพิ่มช่องตัวเลขของทั้งสองรายการและมีเพียงรายการเดียวที่สอดคล้องกับคีย์เท่านั้นที่มีอยู่ . ค่าของ SY-TABIX จะถูกเปลี่ยนเป็นแถวของรายการต้นฉบับ COLLECT อื่นทำหน้าที่คล้ายกับ APPEND และ SY-TABIX มีดัชนีของบรรทัดที่ประมวลผล

3.การใช้คำสั่ง INSERT

คำสั่ง INSERT เพิ่มเส้น/พื้นที่ทำงานให้กับตารางภายใน คุณสามารถระบุตำแหน่งที่จะเพิ่มบรรทัดใหม่ได้โดยใช้คำสั่งย่อย INDEX กับคำสั่ง INSERT

วากยสัมพันธ์

INSERT [<wa> INTO / INITIAL LINE INTO] <itable> [index <idx>].

นี่พื้นที่ทำงาน. หรือ INITIAL LINE ถูกแทรกลงในตารางภายใน ที่ดัชนี -

การคัดลอกตารางภายใน

คุณสามารถคัดลอกเนื้อหาของตารางภายในหนึ่งไปยังอีกตารางหนึ่งได้โดยใช้คำสั่ง APPEND LINES หรือ INSERT LINES วิธีที่ง่ายกว่าคือใช้ไวยากรณ์ต่อไปนี้

MOVE  <itab1> To <itab2>.

OR

<itab1> = <itab2>.

สิ่งเหล่านี้คัดลอกเนื้อหาของ ITAB1 ไปยัง ITAB2 ในกรณีของตารางภายในที่มีบรรทัดส่วนหัว เราต้องใช้ [] เพื่อแยกความแตกต่างจากพื้นที่ทำงาน ดังนั้นในการคัดลอกเนื้อหาของตารางภายในด้วยบรรทัดส่วนหัวไวยากรณ์จะกลายเป็น

itab1[] = itab2[].

อ่านตารางภายใน

ตอนนี้เราคุ้นเคยกับการสร้างตารางภายในและการเติมข้อมูลลงในตารางแล้ว ตอนนี้เรามาดูกันว่าเราใช้ข้อมูลจริงหรือดึงข้อมูลจากตารางภายในอย่างไร

1. การใช้ลูป -Endloop

วิธีหนึ่งในการเข้าถึงหรืออ่านตารางภายในคือการใช้ LOOP-ENDLOOP

วากยสัมพันธ์

LOOP AT <itable> [INTO <wa>]

...................................

ENDLOOP.

ที่นี่เมื่อคุณพูดว่า LOOP AT ITABLE ตารางภายใน ITABLE จะถูกอ่านทีละบรรทัด คุณสามารถเข้าถึงค่าของคอลัมน์สำหรับบรรทัดนั้นในระหว่างส่วนใดๆ ของโครงสร้าง LOOP-ENDLOOP ค่าของ SY-SUBRC ถูกตั้งค่าเป็น 0แม้ว่าจะอ่านเพียงบันทึกเดียวก็ตาม

2. การใช้การอ่าน

อีกวิธีหนึ่งในการอ่านตารางภายในคือการใช้คำสั่ง READ

ไวยากรณ์-

READ TABLE <itable> [INTO <wa>] INDEX <idx>.

คำสั่งนี้อ่านบรรทัดปัจจุบันหรือบรรทัดตามที่ระบุโดยดัชนี - ค่าของ SY-TABIX คือดัชนีของบรรทัดที่อ่าน หากพบรายการที่มีดัชนีที่ระบุ SY-SUBRC จะถูกตั้งค่าเป็น 0 หากดัชนีที่ระบุน้อยกว่า 0 ข้อผิดพลาดรันไทม์จะเกิดขึ้น หากดัชนีที่ระบุเกินขนาดตาราง SY-SUBRC จะถูกตั้งค่าเป็น 4

การลบตารางภายใน

มีหลายวิธีในการลบบรรทัดออกจากตารางภายใน

1. การลบบรรทัดในลูป

นี่เป็นวิธีที่ง่ายที่สุดในการลบบรรทัด

วากยสัมพันธ์

DELETE <ITABLE>.

คำสั่งนี้ใช้ได้เฉพาะภายในวงเท่านั้น มันจะลบบรรทัดปัจจุบัน คุณสามารถลบบรรทัดในลูปแบบมีเงื่อนไขได้โดยการเพิ่ม WHERE ข้อ.

2. การลบบรรทัดโดยใช้ดัชนี

ใช้เพื่อลบบรรทัดออกจากตารางภายในที่ดัชนีรู้ใดๆ

วากยสัมพันธ์

DELETE <ITABLE> INDEX <IDX>.

เส้นที่มีดัชนี ถูกลบทิ้ง ดัชนีของบรรทัดถัดไปจะลดลงทีละ 1