SAP ตารางภายใน ABAP: สร้าง อ่าน เติม คัดลอก และลบ
ตารางภายในคืออะไร?
ตารางภายใน ใช้เพื่อรับข้อมูลจากโครงสร้างคงที่สำหรับการใช้งานแบบไดนามิกใน ABAP แต่ละบรรทัดในตารางภายในมีโครงสร้างฟิลด์เหมือนกัน การใช้งานหลักสำหรับตารางภายในคือการจัดเก็บและจัดรูปแบบข้อมูลจากตารางฐานข้อมูลภายในโปรแกรม
พื้นที่ทำงานคืออะไร?
พื้นที่ทำงานเป็นข้อมูลแถวเดียว ควรมีรูปแบบเดียวกันกับตารางภายในใดๆ ใช้ในการประมวลผลข้อมูลในตารางภายในทีละบรรทัด
ความแตกต่างระหว่างตารางภายในและพื้นที่ทำงาน?
รูปภาพแทนคำพูดได้นับพันคำ
ประเภทของตารางภายใน
ตารางภายในมีสองประเภท
- ตารางภายในที่มีบรรทัด HEADER
- ตารางภายในที่ไม่มีบรรทัด 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