เปิด SQL และ Native SQL ใน SAP ABAP

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

ในภาษาโปรแกรม ABAP/4 มีการใช้งาน SQL สองประเภท

  1. SQL ดั้งเดิม
  2. เปิด 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 เพื่อปรับปรุงประสิทธิภาพได้