Sunday, June 13, 2010

Limit your DB2 result on DB2 9.7.2

นานแล้วที่ผมรอคอยให้ DB2 สามารถ query เป็นส่วนๆ (Limit Result) ได้อย่าง MySQL
ที่สามารถ
SELECT * FROM TABLE LIMIT 5 AND 10


เพื่อให้สามารถทำ Page ได้ง่ายๆโดยไม่ต้องเสียพลังไปกับการ order ไปมาซ้ำยังต้องทำ table scan
อีก กว่าจะได้ส่วนที่เราต้องการมา ทำให้คิดอยู่นานว่าควรจะแบ่งข้อมูลที่จะนำมาแสดงเป็น page หรือไม่

วันนี้ DB2 v.9.7.2 ก็ใส่ function นี้เข้ามาสักที ดีใจมากมาย
เป็น syntax ใหม่ของ SELECT statment ครับ โดยจะใช้ keyword คำว่า LIMIT และ OFFSET
เข้ามาใช้ทำ Limit ครับ ตัวอย่างเช่น

SELECT * FROM TABLE LIMIT 5
ก็มีค่าเท่ากับ

SELECT * FROM TABLE FETCH FIRST 5 ROWS ONLY
แต่เมื่อตั้งการให้เริ่มจาก ROW อื่นๆที่ไม่ใช่ 1 ก็จะใช้เป็น

SELECT * FROM TABLE LIMIT 5 OFFSET 10
อันนี้ก็จะได้ result ส่วนที่เป็น row 11 - 15 ครับ
เพื่อให้สามารถใช้ option นี้ได้เราจำเป็นต้อง update ค่า DB2 Register ที่ชื่อว่า
DB2_COMPATIBILITY_VECTOR ดังนี้ครับ

$ db2set DB2_COMPATIBILITY_VECTOR=MYS
$ db2stop
$ db2start

No comments: