เปิด SQL และ Native SQL ใน SAP ABAP
เป้าหมายของบทช่วยสอนนี้ไม่ใช่เพื่อสอนคุณ SQL หรือแนวคิดเกี่ยวกับฐานข้อมูลแต่จะแนะนำให้คุณรู้จักกับความหลากหลายของ SQL ใน ABAP
ในภาษาโปรแกรม ABAP/4 มีการใช้งาน SQL สองประเภท
- SQL ดั้งเดิม
- เปิด SQL
Open SQL ช่วยให้คุณเข้าถึงตารางฐานข้อมูลที่ประกาศในพจนานุกรม ABAP โดยไม่คำนึงถึงแพลตฟอร์มฐานข้อมูลที่ระบบ R/3 ใช้อยู่
Native SQL อนุญาตให้คุณใช้คำสั่ง SQL เฉพาะฐานข้อมูลในโปรแกรม ABAP/4 ซึ่งหมายความว่าคุณสามารถใช้ตารางฐานข้อมูลที่ไม่ได้บริหารจัดการโดยพจนานุกรม ABAP ได้ และดังนั้นจึงรวมข้อมูลที่ไม่ได้เป็นส่วนหนึ่งของระบบ R/3 ได้
Open SQL ประกอบด้วยชุดคำสั่ง ABAP ที่ดำเนินการกับฐานข้อมูลส่วนกลางในระบบ R/3 ผลลัพธ์ของการดำเนินการและข้อความแสดงข้อผิดพลาดใดๆ จะไม่ขึ้นอยู่กับระบบฐานข้อมูลที่ใช้งาน ดังนั้น Open SQL จึงให้รูปแบบและความหมายที่เหมือนกันสำหรับระบบฐานข้อมูลทั้งหมดที่รองรับโดย SAPโปรแกรม ABAP ที่ใช้เฉพาะคำสั่ง Open SQL เท่านั้นจะทำงานกับระบบ R/3 ได้ไม่ว่าจะใช้ระบบฐานข้อมูลใดก็ตาม คำสั่ง Open SQL ทำงานได้กับตารางฐานข้อมูลที่สร้างขึ้นในพจนานุกรม ABAP เท่านั้น
คำสั่ง Open SQL พื้นฐาน
- SELECT
- INSERT
- อัพเดท
- แก้ไข
- ลบ
- เปิดเคอร์เซอร์ ดึงข้อมูล ปิดเคอร์เซอร์
ตัวอย่าง
TABLES SBOOK. DATA C TYPE CURSOR, WA LIKE SBOOK. OPEN CURSOR C FOR SELECT * FROM SBOOK WHERE CARRID = 'LH ' AND CONNID = '0400' AND FLDATE = '19950228' ORDER BY PRIMARY KEY. DO. FETCH NEXT CURSOR C INTO WA. IF SY-SUBRC <> 0. CLOSE CURSOR C. EXIT. ENDIF. WRITE: / WA-BOOKID, WA-CUSTOMID, WA-CUSTTYPE, WA-SMOKER, WA-LUGGWEIGHT, WA-WUNIT, WA-INVOICE. ENDDO.
กรอกรายชื่อผู้โดยสารสำหรับเที่ยวบินของ Lufthansa เที่ยวบิน 0400 วันที่ 28-02.1995:
เปิดรหัสส่งคืน SQL
คำสั่ง Open SQL ทั้งหมดจะกรอกฟิลด์ระบบทั้งสองต่อไปนี้ด้วยรหัสส่งกลับ
SY-SURC
หลังจากเปิดคำสั่ง SQL ทุกครั้ง ฟิลด์ระบบ SY-SUBRC จะมีค่า 0 หากการดำเนินการสำเร็จ และจะมีค่าอื่นที่ไม่ใช่ 0 ถ้าไม่สำเร็จ
SY-DBNT
หลังจากคำสั่ง Open SQL ฟิลด์ระบบ SY-DBCNT จะมีจำนวนบรรทัดฐานข้อมูลที่ประมวลผล
SQL ดั้งเดิม
ดังที่ได้กล่าวไปแล้ว Native SQL อนุญาตให้คุณใช้คำสั่ง SQL เฉพาะฐานข้อมูลในไฟล์ โปรแกรมเอแบค.
หากต้องการใช้คำสั่ง Native SQL คุณต้องนำหน้าด้วยคำสั่ง EXEC SQL และตามด้วยคำสั่ง ENDEXEC
วากยสัมพันธ์
EXEC SQL [PERFORMING <form>]. <Native SQL statement> ENDEXEC.
ไม่มีจุดหลังคำสั่ง Native SQL นอกจากนี้ การใช้เครื่องหมายจุลภาคกลับด้าน (“) หรือเครื่องหมายดอกจัน (*) ที่จุดเริ่มต้นของบรรทัดในคำสั่ง SQL ดั้งเดิมจะไม่ทำให้เกิดความคิดเห็นเหมือนกับที่ใช้ในไวยากรณ์ ABAP ปกติ คุณจำเป็นต้องทราบว่าชื่อตารางและฟิลด์เป็นแบบตรงตามตัวพิมพ์ใหญ่-เล็กที่คุณเลือกหรือไม่ ฐานข้อมูล.
ในคำสั่ง Native SQL ข้อมูลจะถูกส่งระหว่างตารางฐานข้อมูลและโปรแกรม ABAP โดยใช้ตัวแปรโฮสต์ สิ่งเหล่านี้ถูกประกาศในโปรแกรม ABAP และนำหน้าในคำสั่ง Native SQL ด้วยเครื่องหมายทวิภาค (:) คุณสามารถใช้โครงสร้างเบื้องต้นเป็นตัวแปรโฮสต์ได้ โครงสร้างในส่วนคำสั่ง INTO จะได้รับการปฏิบัติเสมือนว่าฟิลด์ทั้งหมดถูกแสดงรายการแยกกัน
เช่นเดียวกับใน Open SQL หลังจากคำสั่ง ENDEXEC SY-DBCNT มีจำนวนบรรทัดที่ประมวลผล ในเกือบทุกกรณี SY-SUBRC มีค่า 0 หลังคำสั่ง ENDEXEC
เปิด SQL – กฎประสิทธิภาพ
เพื่อปรับปรุงประสิทธิภาพของ SQL และโปรแกรม ABAP ควรดูแลกฎต่อไปนี้
เก็บชุดผลลัพธ์ให้เล็ก
- การใช้คำสั่ง Where
- หากต้องการเพียงระเบียนเดียวจากฐานข้อมูล ให้ใช้ SELECT SINGLE ทุกครั้งที่เป็นไปได้
ลดปริมาณการถ่ายโอนข้อมูลให้เหลือน้อยที่สุด
- จำกัดจำนวนบรรทัด
- หากตารางต้องการเพียงบางฟิลด์ ให้ใช้ SELECT INTO … คำสั่ง
- จำกัดจำนวนคอลัมน์
- ใช้ฟังก์ชันการรวม
ลดจำนวนการถ่ายโอนข้อมูลให้เหลือน้อยที่สุด
- หลีกเลี่ยงลูปการเลือกที่ซ้อนกัน
- อีกทางเลือกหนึ่งคือการใช้คำสั่ง SELECT .. FOR ALL ENTRIES คำสั่งนี้มักจะมีประสิทธิภาพมากกว่าการใช้คำสั่ง SELECT หรือ SELECT SINGLE จำนวนมากระหว่าง LOOP ของตารางภายใน
- ใช้มุมมองพจนานุกรม
- ใช้การรวมในส่วนคำสั่ง FROM
- ใช้แบบสอบถามย่อยในส่วนคำสั่งwhere
ลดค่าใช้จ่ายในการค้นหาให้เหลือน้อยที่สุด
- ใช้เขตข้อมูลดัชนีในส่วนคำสั่งที่
- เมื่อเข้าถึงฐานข้อมูล ตรวจสอบให้แน่ใจเสมอว่ามีการใช้ดัชนีที่ถูกต้อง
ลดภาระฐานข้อมูล
- Bufferไอเอ็นจี
- ฐานข้อมูลเชิงตรรกะ
- หลีกเลี่ยงการเข้าถึงฐานข้อมูลซ้ำ
การใช้ตารางภายในเพื่อ Buffer ประวัติ
- เพื่อหลีกเลี่ยงการดำเนินการ SELECT เดียวกันหลายครั้ง (ดังนั้นจึงมีตัวเลือกซ้ำกัน) คุณสามารถใช้ตารางภายในประเภท HASHED เพื่อปรับปรุงประสิทธิภาพได้