Oracle ile ilgili yazılara devam. Bu aralar şirkette yazdığımız uygulamayı oracle veritabanında da çalışacak şekilde düzenliyorum ve doğal olarak bir çok problemle karşılaşıyorum. Karşılaştığım sorunlara çözüm buldukça sizinle paylaşmaya çalışıyorum.

Bu yazıda oracle'da tıpkı mysql'deki gibi veritabanından kayıtları limitli çekmeyi göstermeye çalışacağım. 

Tablomuzun adı TABLO1 olsun ve bu tablomuzdan 4990. ve 5000. satırlar arasındaki kayıtları çekelim. 

Öncelikle Mysql sorgumuzu yazalım daha sonra oracle sorgumuzu yazalım. Böylece kullanımlarını daha rahat karşılaştırabiliriz.

SELECT * FROM TABLO1 LIMIT 4991,10

Mysql'deki sorgumuzun oracle'daki karşılığı:

SELECT * 
FROM (
    SELECT T1.*, ROWNUM rn 
    FROM TABLO1 T1  
    ORDER BY ALAN1 
) A
WHERE A.rn>4990 AND A.rn <= 5000

Sorguda gördüğünüz gibi iç içe sorgular kullandık. ROWNUM değeri 1'den itibaren kayıt sayısına kadar oluşturulur. ROWNUM değeri kayıtlar çekildikten sonra oluşturulduğu için kayıtları içerideki sorguda çektik.

Biraz araştırdıktan sonra aşağıdaki yöntem ile daha hızlı sonuç alabileceğimizi buldum.

SELECT * 
FROM (
	SELECT A.*, ROWNUM rn 
	FROM(
		SELECT * FROM TABLO1 ORDER BY ALAN1
	) A
	WHERE ROWNUM <= 5000
)WHERE rn > 4990
Ayrıca bu linkleri incelemenizi öneririm.