รู้จักภาษา ABAP เปิดเบื้องหลังของ SAP R/3 ตอน 5 ทิปเทคนิค


840 ผู้ชม


ทิปเทคนิค

  • โดยปกติแล้ว ถ้าใน Where Clause ของคำสั่ง Select Single... นั้น เราไม่มีการอ้างถึงฟิลด์ที่เป็น Primary Key แล้ว เมื่อเช็กซินแท็กซ์ของโปรแกรม ระบบจะแสดงข้อความเตือนว่า ไม่มีการใช้ Primary Key ใน Where Clause แต่เป็นแค่เพียงเตือนเฉยๆ นะครับ เรายังสั่งเอ็กซิคิวต์โปรแกรมของเราได้ตามปกติทุกอย่าง การที่ระบบเตือนในกรณีที่ไม่มีการระบุ Primary Key ใน Where Clause ของคำสั่ง Select Single ก็เพราะการเข้าถึงข้อมูลที่ฐานข้อมูลอาจจะไม่มีประสิทธิภาพ คืออาจใช้ Index ไม่เหมาะสมหรือใช้วิธี Full Table Scan ก็เป็นได้ เช่นถ้าเราใช้คำสั่งต่อไปนี้
    Select single * from customers where name = 'John'.
    ถ้าไม่อยากให้มีข้อความเตือน (Warning Message) เมื่อเช็กซินแท็กซ์ของโปรแกรม ให้เราแก้ไขคำสั่ง Select Single * ... โดยใช้ออปชัน up to 1 rows ในคำสั่ง Select ... Endselect แทนดังนี้
    Select * from customers up to 1 rows where name = 'John'.
    ...
    Endselect.

    ผลลัพธ์ที่ได้จะเหมือนกับใช้คำสั่ง Select single * ... ทุกประการ เพียงแต่ว่าจะไม่มีข้อความ Warning Message ขึ้นมากวนใจเวลาเช็กซินแท็กซ์ของโปรแกรมนั่นเอง ซึ่งการทำงานจริงๆ ของคำสั่ง Select * from ... up to 1 rows ... Endselect ก็คือ ระบบจะค้นหาข้อมูลตามเงื่อนไขใน Where Clause ที่ฐานข้อมูล โดยถ้าพบข้อมูลตามเงื่อนไขแล้วก็จะหยุดการอ่านข้อมูลเรคอร์ดต่อไปทันที เพราะเรากำหนดให้อ่านข้อมูล ตามเงื่อนไขแค่ 1 เรคอร์ดเท่านั้นนั่นเอง แต่ถ้าในคำสั่ง Select * ... เราไม่ระบุออปชัน up to 1 rows ระบบก็จะอ่านข้อมูลจากฐานข้อมูลไปจนหมดทุกเรคอร์ดในตารางตามเงื่อนไข ถึงแม้ว่าจะพบเรคอร์ดที่ต้องการแล้วก็ตาม เพราะคำสั่ง Select ... Endselect เป็นคำสั่งที่ใช้ในการวนลูป เพื่ออ่านข้อมูลหลายเรคอร์ดในตารางที่ฐานข้อมูลนั่นเอง
  • เราสามารถใช้ Wildcard ในเงื่อนไขของคำสั่ง Select ได้ โดยที่เราจะต้องใช้ออปชัน Like แทน = ใน Where Clause ของคำสั่ง Select เช่น สมมุติว่าต้องการแสดงข้อมูลลูกค้าจากตาราง customers เฉพาะลูกค้าที่ชื่อขึ้นต้นด้วย P เราสามารถเขียนคำสั่งได้ดังนี้
    Select * from customers where name like 'P%'.
    โดยที่ค่า % แทนอะไรก็ได้ แต่ถ้าต้องการแสดงข้อมูลลูกค้าที่ชื่อตัวอักษรตัวที่สองเป็นตัว r เราสามารถเขียนคำสั่งได้ดังนี้
    Select * from customers where name like '_r%'.
    โดยที่ค่า _ จะแทนตัวอะไรก็ได้ 1 ตัวอักษร และถ้าต้องการแสดงข้อมูลลูกค้าที่ชื่อมีคำว่า SAP อยู่ด้วย เราก็ จะเขียนคำสั่งได้ดังนี้
    Select * from customers where name like '%SAP%'.
    ก็คือค่า % แทนตัวอะไรก็ได้กี่ตัวก็ได้ ส่วนค่า _ แทนตัวอักษรอะไรก็ได้ 1 ตัวแต่อย่าลืมใช้ออปชัน like ด้วย นะครับ
  • อัพเดทล่าสุด