2012-11-04 20 views
5

MySql'de sayfalandırma kavramı, LIMIT maddesini kullanarak aşağıdaki gibi bir tek SQL deyimi ile kolayca uygulanabilir.Oracle ve Pagination

SELECT country_id, country_name 
FROM country c 
ORDER BY country_id DESC 
LIMIT 4, 5; 

Bu SQL sorgusu alır sonuç kümesindeki 10 için 5 başlayarak satırları almak istiyorum.


Oracle olarak, aynı şey satır numaralarını aşağıdaki gibi biraz sıkıcı görev yapan bir alt sorgu ile kullanılarak elde edilebilir.

SELECT country_id, country_name 
FROM 
    (SELECT rownum as row_num, country_id, country_name 
    FROM 
    (SELECT country_id, country_name 
    FROM country 
    ORDER BY country_id desc) 
    WHERE rownum <= 10 
) 
WHERE row_num >=5; 
Oracle 10g olarak

, bu yapılabilir (veya daha yüksek olsa daha yüksek sürümleri hakkında emin değilim) bu tür bir benzeri bir uygulama ile ilgili olarak, olarak

SELECT country_id, country_name 
    FROM (SELECT country_id, country_name, row_number() over (order by country_id desc) rank 
     FROM country) 
WHERE rank BETWEEN 6 AND 10; 

biraz kolay Web uygulaması, hemen hemen her yerde uygulamak için bir pagination kavramı gereklidir ve her zaman bir (select) sorgu yürütülür zaman böyle SQL ifadeleri yazmak bazen sıkıcı bir iştir.

Farz edelim, Java kullanarak bir web uygulamasına sahibim. Hazırda çerçevesini kullanmak istersek,

List<Country>countryList=session.createQuery("from Country order by countryId desc") 
.setFirstResult(4).setMaxResults(5).list(); 

ama sadece gibi Oracle ile JDBC bağlantısı kullandığınızda,

String connectionURL = "jdbc:oracle:thin:@localhost:1521:xe"; 
Connection connection = null; 
Statement statement = null; 
ResultSet rs = null; 

Class.forName("oracle.jdbc.OracleDriver").newInstance(); 
connection = DriverManager.getConnection(connectionURL, "root", "root"); 
statement = connection.createStatement(); 
rs = statement.executeQuery("SELECT * from country"); 

Sorum gibi hazırda tarafından desteklenen bazı yöntemleri kullanarak bunu yapmak için doğrudan bir yol yoktur Bu durumda, bu kodu kullanarak belirli bir satır aralığı almak için kesin bir yol var mı? Önceki durumda olduğu gibi setFirstResult() ve setMaxResults() gibi yöntemleri kullanarak? veya bunu başarmanın tek yolu, belirtilen alt sorguları kullanmaktır.

cevap

3

'Hayır' da bir cevap olduğu için:

Ne yazık ki, alt sorgu yaklaşım kullanmak zorunda kalacaktır. Şahsen rütbeli olanı kullanırım (ikincisi).

+0

Netleştirdiğiniz için teşekkür ederim. – Tiny