มีวิธีที่จะทำให้OracleแบบสอบถามทำงานเหมือนมีMySQL limitประโยคหรือไม่?
ในMySQLฉันสามารถทำสิ่งนี้:
select *
from sometable
order by name
limit 20,10
เพื่อรับแถวที่ 21 ถึงแถวที่ 30 (ข้ามแถวแรก 20 ให้อีก 10 แถวถัดไป) แถวจะถูกเลือกหลังแถวorder byดังนั้นจึงเริ่มต้นด้วยชื่อที่ 20 ตามตัวอักษร
ในOracleสิ่งเดียวที่คนพูดถึงคือrownumคอลัมน์หลอก แต่มันถูกประเมินมาก่อน order byซึ่งหมายความว่า:
select *
from sometable
where rownum <= 10
order by name
จะส่งกลับชุดสุ่มสิบแถวเรียงตามชื่อซึ่งมักจะไม่ใช่สิ่งที่ฉันต้องการ นอกจากนี้ยังไม่อนุญาตให้ระบุการชดเชย
ORDER BYคุณไม่สามารถรับชุดผลลัพธ์ที่แตกต่างกันยกเว้นในกรณีที่มีการเปลี่ยนแปลงข้อมูลพื้นฐานเพราะ นั่นคือจุดรวมของการสั่งซื้อครั้งแรก หากข้อมูลพื้นฐานเปลี่ยนแปลงและชุดผลลัพธ์ของคุณเปลี่ยนไปเพราะเหตุใดจึงไม่แสดงผลลัพธ์ที่อัปเดตให้ผู้ใช้แทนข้อมูลที่ล้าสมัย นอกจากนี้การจัดการของรัฐก็เป็นสิ่งที่ต้องหลีกเลี่ยงให้มากที่สุด มันเป็นแหล่งที่มาของความซับซ้อนและข้อบกพร่อง; นั่นเป็นเหตุผลที่ฟังก์ชั่นได้รับความนิยมมาก และเมื่อไหร่ที่คุณจะรู้ว่าหมดอายุผลลัพธ์ทั้งหมดที่ตั้งไว้ในหน่วยความจำ? ในเว็บคุณไม่มีทางรู้ว่าเมื่อใดที่ผู้ใช้ออกไป