และแล้วก็มาถึงตอนที่สำคัญที่สุดของการเขียนโปรแกรมด้วยภาษา ABAP ก็คือเรื่องของคำสั่งที่ใช้ในการเข้าถึงข้อมูลที่ดาต้าเบสเซิร์ฟเวอร์ (Database Server) ในระบบ SAP R/3 โดยที่ในภาษา ABAP นั้น เราสามารถใช้คำสั่ง SQL ในการเข้าถึงข้อมูลที่ดาต้าเบสเซิร์ฟเวอร์ได้ 2 รูปแบบด้วยกัน คือ Open SQL และ Native SQL ซึ่งเนื้อหาที่ผมจะกล่าวถึงต่อไปนี้ จะเน้นเฉพาะ Open SQL ซึ่งเป็นมาตรฐานภาษา SQL ของ SAP เท่านั้น เพราะ Native SQL จะเป็น SQL มาตรฐานของเอ็นจิ้นแต่ละตัว ไม่ว่าจะเป็น ORACLE, Informix, DB2 หรือ MS SQL Server เป็นต้น
และแล้วก็มาถึงตอนที่สำคัญที่สุดของการเขียนโปรแกรมด้วยภาษา ABAP ก็คือเรื่องของคำสั่งที่ใช้ในการเข้าถึงข้อมูลที่ดาต้าเบสเซิร์ฟเวอร์ (Database Server) ในระบบ SAP R/3 โดยที่ในภาษา ABAP นั้น เราสามารถใช้คำสั่ง SQL ในการเข้าถึงข้อมูลที่ดาต้าเบสเซิร์ฟเวอร์ได้ 2 รูปแบบด้วยกัน คือ Open SQL และ Native SQL ซึ่งเนื้อหาที่ผมจะกล่าวถึงต่อไปนี้ จะเน้นเฉพาะ Open SQL ซึ่งเป็นมาตรฐานภาษา SQL ของ SAP เท่านั้น เพราะ Native SQL จะเป็น SQL มาตรฐานของเอ็นจิ้นแต่ละตัว ไม่ว่าจะเป็น ORACLE, Informix, DB2 หรือ MS SQL Server เป็นต้น
Open SQL
ข้อดีของการใช้ Open SQL ในการเข้าถึงข้อมูลในฐานข้อมูลของระบบ SAP R/3 คือประการแรก มันเป็นภาษามาตรฐานของระบบ SAP ดังนั้นไม่ว่าคุณจะใช้ระบบ SAP บนดาต้าเบสเซิร์ฟเวอร์ของ ORACLE, Informix, DB2 หรือแม้แต่ MS SQL Server ก็ตาม ภาษา SQL ที่คุณใช้ จะมีรูปแบบหรือซินแท็กซ์ที่เหมือนกันหมด นอกจากนี้เมื่อใดก็ตามที่มีการใช้ Open SQL ในการเข้าถึงข้อมูลที่ฐานข้อมูล ระบบจะค้นหาข้อมูลที่ Table Buffer ในหน่วยความจำของ Application Server (R/3 Instance) ก่อนเสมอ และถ้าพบข้อมูลที่ต้องการ ระบบก็จะไม่ส่งคำสั่ง SQL Request นี้ ไปที่ดาต้าเบสเซิร์ฟเวอร์ Database Server แต่อย่างใด ซึ่งช่วยเพิ่มความเร็วในการทำงานด้วยถ้ายังจำขั้นตอนการทำงานของโปรแกรม ABAP ในระบบ SAP R/3 กันได้ การทำงานของโปรแกรม ABAP จะเป็นลักษณะของ Interpreter ก็คือเมื่อ Taskhandler พิจารณาคำสั่งในโปรแกรม ABAP ที่มันกำลังทำงานอยู่แล้ว พบว่าเป็นคำสั่งประเภท Open SQL มันจะส่งคำสั่ง Open SQL นี้ไปให้กับ DB Interface ทำงานตามหน้าที่ของมัน คือแปลงคำสั่ง Open SQL ให้เป็น Native SQL เพื่อส่งไปยังดาต้าเบสเซิร์ฟเวอร์ต่อไป (กรณีที่ข้อมูลที่ต้องการไม่มีอยู่ใน Table Buffer) เพราะว่าดาต้าเบสเซิร์ฟเวอร์ไม่รู้จักคำสั่ง Open SQL ดังนั้น DB Interface จึงทำหน้าที่เหมือนกับล่ามในการแปลภาษา Open SQL ของ SAP ให้เป็น Native SQL ตามดาต้าเบสเอ็นจิ้นในระบบ SAP R/3
.....รูปที่ 1. ด้วยลักษณะของโปรแกรม ABAP ที่ทำงานแบบ Interpreter หลังจาก Taskhandler พิจารณาคำสั่งแล้วพบว่าเป็น Open SQL มันจะส่งต่อไปให้กับ DB Interface แปลงคำสั่ง Open SQL ให้เป็น Native SQL.....
สำหรับคำสั่ง Open SQL นั้น จะมีอยู่ด้วยกัน 4 คำสั่งหลักคือ
เป็นคำสั่งที่ใช้ในการเพิ่มข้อมูลให้กับตารางที่ฐานข้อมูล
เป็นคำสั่งที่ใช้ในการลบข้อมูลของตารางที่ฐานข้อมูล
เป็นคำสั่งที่ใช้ในการแก้ไขข้อมูลของตารางที่ฐานข้อมูล
ซึ่งในส่วนต่อไปนี้ ผมจะกล่าวถึงเฉพาะคำสั่ง Select เท่านั้นนะครับ สำหรับซินแท็กซ์ของคำสั่ง Select จะเป็นดังนี้
Select Which columns?
Into Where to place the record?
From
Tables customers.
Select * from customers.
Write: / customers-id, customers-name.
Endselect.
โดยที่คำสั่ง select * from customers ซึ่งจะต้องปิดด้วย Endselect นั้น จะเป็นคำสั่งประเภทบล็อกที่มีการวนลูป พร้อมทั้งอ่านข้อมูลในแบบหลายเรคอร์ดหรือ Multiple Record จากตารางที่ระบุหลัง From ซึ่งในที่นี้คือ ตาราง customers นั่นเอง และเมื่อใดก็ตามที่เราต้องการอ่านข้อมูลทุกคอลัมน์ (Select * ...) และไม่มีการใช้ออปชัน Into ในคำสั่ง Select เราจะต้องสร้าง Table Structure ของตารางนั้นๆ ที่ Memory Space จากคำสั่ง Tables ก่อนเสมอ เช่น Tables customers เราก็จะได้ Structure ของตาราง customers ( เหมือนกับ Structure ที่สร้างจากคำสั่ง Data begin of... ทุกประการ) ดังรูป
Data wa_customers like customers.
Select * into wa_customers from customers.
Write: / wa_customers-id,wa_customers-name.
Endselect.