รู้จักภาษา ABAP เปิดเบื้องหลังของ SAP R/3 ตอน 4 มาดูการทำงานของคำสั่ง Select ...


663 ผู้ชม


คราวนี้เรามาดูการทำงานของคำสั่ง Select ... Endselect ว่ามันจะทำงานในแบบ Set of Record เหมือนกันกับ Standard SQL หรือไม่ โดยที่หลังจากที่ระบบสร้าง Structure ของตาราง customers จากคำสั่ง Tables customers เสร็จเรียบร้อยแล้ว จากนั้นเมื่อ Taskhandler พบว่าคำสั่งต่อไปของโปรแกรม เป็นคำสั่งประเภท Open SQL ในตัวอย่างนี้ก็คือคำสั่ง Select ... Endselect ระบบก็จะส่งคำสั่งนี้ให้กับ DB Interface ทำงานตามหน้าที่ของมันก็คือแปลง Open SQL ให้เป็น Native SQL (เพราะ Database Server ไม่รู้จักคำสั่ง Select ... Endselect นั่นเอง) จากนั้น DB Interface ก็จะส่งคำสั่ง Native SQL นี้ไปให้กับดาต้าเบสเซิร์ฟเวอร์ เพื่อค้นหาข้อมูลตามเงื่อนไขของคำสั่ง Select ซึ่งในขั้นตอนนี้ ดาต้าเบสเซิร์ฟเวอร์จะทำงานตามคำสั่ง Select ในลักษณะของ Set of Record
จากนั้นเมื่อดาต้าเบสเซิร์ฟเวอร์พบข้อมูลที่ต้องการแล้ว ก็จะส่งผลลัพธ์ที่ได้จากการทำ Query กลับไปให้กับ DB Interface ในพื้นที่ที่เรียกว่า Result Set ซึ่งเป็นพื้นที่หน่วยความจำของ DB Interface ดังรูปที่ 2
รู้จักภาษา ABAP เปิดเบื้องหลังของ SAP R/3 ตอน 4 มาดูการทำงานของคำสั่ง Select ...
 

.....รูปที่ 2. เมื่อดาต้าเบสเซิร์ฟเวอร์พบข้อมูลที่ต้องการแล้ว ก็จะส่ง Result หรือผลลัพธ์ของข้อมูลทั้งหมดที่ได้จากการทำ Query กลับไปให้กับ DB Interface ในพื้นที่ของ Result Set.....
โดยที่จะมี Pointer หรือ Cursor ชี้อยู่ที่เรคอร์ดแรกใน Result Set เสมอ หลังจากที่ได้รับ Result กลับมาจากดาต้าเบสเซิร์ฟเวอร์ จากนั้นระบบจึงเริ่มทำงานคำสั่ง Select ... Endselect ตามขั้นตอนดังต่อไปนี้
  • เริ่มต้นทำงานคำสั่ง Select * from customers โดยหน้าที่ของคำสั่งนี้ ระบบจะอ่านข้อมูลจาก Result Set ในเรคอร์ดที่ Pointer ชี้อยู่ จากนั้นระบบจะคัดลอกหรือ Copy ข้อมูลทั้งแถวจาก Result Set มาไว้ที่ Structure ที่ระบุหลังออปชัน Into แต่ถ้าไม่ระบุ Into ระบบก็จะนำข้อมูลที่อ่านได้จาก Result Set ไปเก็บไว้ที่ Table Structure ที่ Memory Space ดังรูปที่ 3
    รู้จักภาษา ABAP เปิดเบื้องหลังของ SAP R/3 ตอน 4 มาดูการทำงานของคำสั่ง Select ...
     

    .....รูปที่ 3. ผลจากการทำงานตามคำสั่ง Select * from customers.....
  • จากนั้นระบบก็จะทำคำสั่งที่อยู่ภายในบล็อกของ Select ... Endselect ทั้งหมด ในที่นี้ก็คือคำสั่ง Write: / customers-id,customers-name ซึ่งก็คือระบบจะอ่านข้อมูลฟิลด์ id และ name ของ Structure ชื่อ customers ที่ Memory Space นั่นเอง ซึ่งเราจะได้ข้อมูลเรคอร์ดแรกที่หน้าจอจากคำสั่ง Write นี้
  • จากนั้นเมื่อพบคำสั่งต่อไปคือ Endselect ระบบก็จะเช็กว่าที่ Result Set มีเรคอร์ดที่ต้องอ่านถัดไปหรือไม่ ถ้ามีก็จะเลื่อน Pointer ไปยังเรคอร์ดถัดไป จากนั้นก็จะโอนการทำงานกลับไปที่คำสั่ง Select ต่อไป
  • การทำงานของโปรแกรมก็จะกลับมาที่คำสั่ง Select มันก็จะทำงานตามหน้าที่ของมันคือ อ่านข้อมูลที่ Result Set ตามที่ Pointer ชี้อยู่ จากนั้นก็คัดลอกข้อมูลของเรคอร์ดปัจจุบันใน Result Set ไปไว้ที่ Table Structure ใน Memory Space ต่อไป
  • จากนั้นระบบก็จะทำงานคำสั่งที่อยู่ภายในบล็อกของ Select ... Endselect ต่อไป ก็คือคำสั่ง Write ... เราก็จะได้ข้อมูลเรคอร์ดที่สองที่หน้าจอ
  • จากนั้นคำสั่ง Endselect จะเช็กว่ามีเรคอร์ดที่ต้องอ่านต่อไปที่ Result Set หรือไม่ ถ้ามีก็จะเลื่อน Pointer ไปยังเรคอร์ดถัดไป จากนั้นก็จะโอนการทำงานกลับไปที่คำสั่ง Select ต่อไป ซึ่งการทำงานจะเป็นเช่นนี้ตลอดไปจนกว่าจะหมดเรคอร์ดที่จะอ่านที่ Result Set
  • เมื่อหมดเรคอร์ดที่จะต้องอ่านที่ Result Set แล้ว การทำงานของโปรแกรมก็จะหลุดออกจากบล็อกของ Select ... Endselect ไปทำงานในคำสั่งที่อยู่ถัดไปจากคำสั่ง Endselect
    จะเห็นได้ว่าข้อมูลที่อยู่ใน Table Structure ที่ Memory Space นั้น จะเป็นข้อมูลเรคอร์ดปัจจุบัน (Active Record) ของการทำงานในคำสั่ง Select ... Endselect นั่นเอง ดังนั้นหลังคำสั่ง Endselect ถ้าเราใช้คำสั่ง Write: / customers-id,customers-name. เราก็จะได้ข้อมูลเรคอร์ดสุดท้ายที่ค้างอยู่ที่ Memory Space นั่นเอง เนื้อหาของคำสั่ง Select ยังมีต่อนะครับ ติดตามตอนต่อไปในฉบับหน้า แล้วพบกันใหม่ครับ

  • PC Magazine

    ฉบับที่ 46 พฤศจิกายน 2545
    อ่านบทความอื่นๆ >>

    อัพเดทล่าสุด