เปิด SQL และ Native SQL ใน SAP ABAP
⚡ สรุปอย่างชาญฉลาด
เปิด SQL และ Native SQL ใน SAP ABAP อธิบายถึงสองวิธีที่โปรแกรม ABAP เข้าถึงฐานข้อมูล Open SQL ทำงานกับตารางพจนานุกรมในลักษณะที่ไม่ขึ้นกับฐานข้อมูล ในขณะที่ Native SQL ส่งผ่านคำสั่งเฉพาะของฐานข้อมูลไปยังแพลตฟอร์มโดยตรง

OpenSQL และ NativeSQL คืออะไร?
เป้าหมายของบทช่วยสอนนี้ไม่ใช่เพื่อสอนคุณ 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 เท่านั้น
OpenSQL เป็นตัวเลือกเริ่มต้นในเกือบทุกโปรแกรม ดังนั้นชุดคำสั่งของ OpenSQL จึงถูกกล่าวถึงเป็นอันดับแรก
คำสั่ง 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 Return Codes
คำสั่ง Open SQL ทั้งหมดจะกรอกฟิลด์ระบบทั้งสองต่อไปนี้ด้วยรหัสส่งกลับ
| ฟิลด์ระบบ | ความหมาย |
|---|---|
| SY-SURC | หลังจากเปิดคำสั่ง SQL ทุกครั้ง ฟิลด์ระบบ SY-SUBRC จะมีค่า 0 หากการดำเนินการสำเร็จ และจะมีค่าอื่นที่ไม่ใช่ 0 ถ้าไม่สำเร็จ |
| SY-DBNT | หลังจากคำสั่ง Open SQL ฟิลด์ระบบ SY-DBCNT จะมีจำนวนบรรทัดฐานข้อมูลที่ประมวลผล |
💡 เคล็ดลับ: ควรตรวจสอบ SY-SUBRC ทันทีหลังจากคำสั่งนั้นเสร็จสิ้น คำสั่ง ABAP ในภายหลังจะเขียนทับค่าในฟิลด์นี้ ทำให้ผลลัพธ์เดิมหายไป
เมื่อตารางอยู่นอกเหนือขอบเขตของ ABAP Dictionary, Open SQL จะไม่สามารถเข้าถึงได้ และ Native SQL จะเข้ามาทำหน้าที่แทน
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 ดั้งเดิมจะข้ามขั้นตอนดังกล่าว SAP บัฟเฟอร์ตารางและการจัดการไคลเอ็นต์อัตโนมัติของ OpenSQL ฟิลด์ไคลเอ็นต์จะต้องระบุโดยโปรแกรม และคำสั่งจะทำงานได้เฉพาะบนแพลตฟอร์มฐานข้อมูลที่เขียนขึ้นมาเท่านั้น
OpenSQL กับ NativeSQL: ความแตกต่างที่สำคัญ
อินเทอร์เฟซทั้งสองเชื่อมต่อกับฐานข้อมูลเดียวกัน แต่มีความแตกต่างกันในด้านความสามารถในการพกพา การบัฟเฟอร์ และวัตถุที่สามารถเข้าถึงได้ ตารางด้านล่างสรุปความแตกต่างในทางปฏิบัติ
| หลักเกณฑ์ | เปิด SQL | SQL ดั้งเดิม |
|---|---|---|
| ตารางที่กล่าวถึง | เฉพาะตารางที่ประกาศไว้ใน ABAP Dictionary เท่านั้น | ตารางใดๆ ในฐานข้อมูล รวมถึงตารางที่อยู่นอกพจนานุกรม |
| Portability | ใช้งานได้กับฐานข้อมูลทุกประเภทที่รองรับโดย SAP | ผูกติดอยู่กับไวยากรณ์ของแพลตฟอร์มฐานข้อมูลหนึ่งๆ |
| วากยสัมพันธ์ | คำสั่ง ABAP ที่มีช่วงเวลาปิดบัญชี | คำสั่งดั้งเดิมที่อยู่ภายใน EXEC SQL … ENDEXEC โดยไม่มีจุดปิดท้าย |
| การถ่ายโอนข้อมูล | พื้นที่ทำงานและโต๊ะภายในผ่านทาง INTO | ตัวแปรโฮสต์ที่นำหน้าด้วยเครื่องหมายโคลอน |
| การจัดการลูกค้าและการบัฟเฟอร์ | การจัดการไคลเอ็นต์อัตโนมัติและการบัฟเฟอร์ตาราง | ไม่มีการจัดการไคลเอ็นต์อัตโนมัติ และ SAP บัฟเฟอร์ถูกข้ามไป |
| การใช้งานทั่วไป | การเข้าถึงข้อมูลแอปพลิเคชัน R/3 ในชีวิตประจำวัน | การบูรณาการข้อมูลที่ไม่ได้เป็นส่วนหนึ่งของระบบ R/3 |
ดังนั้น OpenSQL จึงเป็นค่าเริ่มต้น และกฎด้านล่างนี้จะช่วยให้การทำงานรวดเร็ว
เปิด SQL – กฎประสิทธิภาพ
เพื่อปรับปรุงประสิทธิภาพของ SQL และโปรแกรม ABAP ควรดูแลกฎต่อไปนี้
เก็บชุดผลลัพธ์ให้เล็ก
- การใช้คำสั่ง Where
- หากต้องการเพียงระเบียนเดียวจากฐานข้อมูล ให้ใช้ SELECT SINGLE ทุกครั้งที่เป็นไปได้
ลดปริมาณการถ่ายโอนข้อมูลให้เหลือน้อยที่สุด
- จำกัดจำนวนบรรทัด
- หากตารางต้องการเพียงบางฟิลด์ ให้ใช้ SELECT INTO … คำสั่ง
- จำกัดจำนวนคอลัมน์
- ใช้ฟังก์ชันการรวม
ลดจำนวนการถ่ายโอนข้อมูลให้เหลือน้อยที่สุด
- หลีกเลี่ยงลูปการเลือกที่ซ้อนกัน
- อีกทางเลือกหนึ่งคือการใช้คำสั่ง SELECT .. FOR ALL ENTRIES คำสั่งนี้มักจะมีประสิทธิภาพมากกว่าการใช้คำสั่ง SELECT หรือ SELECT SINGLE จำนวนมากระหว่าง LOOP ของตารางภายใน
- ใช้มุมมองพจนานุกรม
- ใช้การรวมในส่วนคำสั่ง FROM
- ใช้แบบสอบถามย่อยในส่วนคำสั่งwhere
ลดค่าใช้จ่ายในการค้นหาให้เหลือน้อยที่สุด
- ใช้เขตข้อมูลดัชนีในส่วนคำสั่งที่
- เมื่อเข้าถึงฐานข้อมูล ตรวจสอบให้แน่ใจเสมอว่ามีการใช้ดัชนีที่ถูกต้อง
ลดภาระฐานข้อมูล
- Bufferไอเอ็นจี
- ฐานข้อมูลเชิงตรรกะ
- หลีกเลี่ยงการเข้าถึงฐานข้อมูลซ้ำ
การใช้ตารางภายในเพื่อ Buffer ประวัติ
- เพื่อหลีกเลี่ยงการเรียกใช้คำสั่ง SELECT เดียวกันหลายครั้ง (และทำให้เกิด SELECT ซ้ำซ้อน) จึงจำเป็นต้องใช้ ตารางภายใน สามารถใช้ประเภท HASHED เพื่อปรับปรุงประสิทธิภาพได้
