SAP ABAP - การอ่านตารางภายใน
เราสามารถอ่านบรรทัดของตารางโดยใช้ไวยากรณ์ต่อไปนี้ของคำสั่ง READ TABLE -
READ TABLE <internal_table> FROM <work_area_itab>.
ในไวยากรณ์นี้นิพจน์ <work_area_itab> แสดงถึงพื้นที่ทำงานที่เข้ากันได้กับชนิดบรรทัดของตาราง <internal_table> เราสามารถระบุคีย์การค้นหา แต่ไม่ใช่คีย์ตารางภายในคำสั่ง READ โดยใช้คำสั่ง WITH KEY ดังที่แสดงในไวยากรณ์ต่อไปนี้ -
READ TABLE <internal_table> WITH KEY = <internal_tab_field>.
ที่นี่บรรทัดทั้งหมดของตารางภายในใช้เป็นไฟล์ search key. เนื้อหาของทั้งบรรทัดของตารางจะถูกเปรียบเทียบกับเนื้อหาของฟิลด์ <internal_tab_field> ถ้าค่าของเขตข้อมูล <internal_tab_field> เข้ากันไม่ได้กับประเภทเส้นของตารางค่าเหล่านี้จะถูกแปลงตามประเภทเส้นของตาราง แป้นค้นหาช่วยให้คุณค้นหารายการในตารางภายในที่ไม่มีประเภทเส้นที่มีโครงสร้างกล่าวคือโดยที่บรรทัดนั้นเป็นเขตข้อมูลเดียวหรือประเภทตารางภายใน
ไวยากรณ์ต่อไปนี้ของคำสั่ง READ ใช้เพื่อระบุพื้นที่ทำงานหรือสัญลักษณ์เขตข้อมูลโดยใช้ประโยคคำสั่ง COMPARING -
READ TABLE <internal_table> <key> INTO <work_area_itab>
[COMPARING <F1> <F2>...<Fn>].
เมื่อใช้คำสั่ง COMPARING ฟิลด์ตารางที่ระบุ <F1>, <F2> .... <Fn> ของประเภทเส้นที่มีโครงสร้างจะถูกเปรียบเทียบกับฟิลด์ที่สอดคล้องกันของพื้นที่ทำงานก่อนที่จะถูกขนส่ง หากระบุอนุประโยค ALL FIELDS ระบบ SAP จะเปรียบเทียบส่วนประกอบทั้งหมด เมื่อระบบ SAP พบรายการบนพื้นฐานของคีย์ค่าของตัวแปร SY-SUBRC จะถูกตั้งค่าเป็น 0 นอกจากนี้ค่าของตัวแปร SY-SUBRC จะถูกตั้งค่าเป็น 2 หรือ 4 หากเนื้อหาของการเปรียบเทียบ ฟิลด์ไม่เหมือนกันหรือหากระบบ SAP ไม่พบรายการ อย่างไรก็ตามระบบ SAP คัดลอกรายการไปยังพื้นที่ทำงานเป้าหมายเมื่อใดก็ตามที่พบรายการโดยไม่คำนึงถึงผลลัพธ์ของการเปรียบเทียบ
ตัวอย่าง
REPORT ZREAD_DEMO.
*/Creating an internal table
DATA: BEGIN OF Record1,
ColP TYPE I,
ColQ TYPE I,
END OF Record1.
DATA mytable LIKE HASHED TABLE OF Record1 WITH UNIQUE KEY ColP.
DO 6 Times.
Record1-ColP = SY-INDEX.
Record1-ColQ = SY-INDEX + 5.
INSERT Record1 INTO TABLE mytable.
ENDDO.
Record1-ColP = 4.
Record1-ColQ = 12.
READ TABLE mytable FROM Record1 INTO Record1 COMPARING ColQ.
WRITE: 'SY-SUBRC =', SY-SUBRC.
SKIP.
WRITE: / Record1-ColP, Record1-ColQ.
รหัสด้านบนสร้างผลลัพธ์ต่อไปนี้ -
SY-SUBRC = 2
4 9
ในตัวอย่างข้างต้น mytable คือตารางภายในของประเภทตารางที่แฮชโดยมี Record1 เป็นพื้นที่ทำงานและ ColP เป็นคีย์เฉพาะ ในขั้นต้น mytable มีหกบรรทัดโดยที่ฟิลด์ ColP มีค่าของตัวแปร SY-INDEX และฟิลด์ ColQ ประกอบด้วยค่า (SY-INDEX + 5)
พื้นที่ทำงาน Record1 จะถูกเติมด้วย 4 และ 12 เป็นค่าสำหรับฟิลด์ ColP และ ColQ ตามลำดับ คำสั่ง READ อ่านบรรทัดของตารางหลังจากเปรียบเทียบค่าของฟิลด์คีย์ ColP กับค่าในพื้นที่ทำงาน Record1 โดยใช้คำสั่ง COMPARING จากนั้นคัดลอกเนื้อหาของบรรทัดการอ่านในพื้นที่ทำงาน ค่าของตัวแปร SY-SUBRC จะแสดงเป็น 2 เนื่องจากเมื่อค่าในฟิลด์ ColP เป็น 4 ค่าใน ColQ ไม่ใช่ 12 แต่เป็น 9