我有一個程序,其中用戶提供了一個可以在數據庫上執行的sql查詢(運行的數據庫的詳細信息也由用戶提供)。該查詢在數據庫上執行,稍後處理結果。重寫查詢以進行分頁
一項新功能要求以分頁方式執行查詢,即如果用戶的查詢將正常返回20條記錄,並且用戶提供了5的頁面大小,則查詢應該執行4次並檢索5條記錄每一次。
我能夠做到這一點對於沒有CTE的選擇查詢,但我不知道如何處理一個普遍的查詢,其中有CTE。
我修改的CTE查詢,如下圖所示:
public static String rewrite(String sql) {
return "select * from ("
+ "select (row_number() over()) as generated_row_number, t.* "
+ "from ("
+ sql
+ ") as t"
+ ") "
+ "where generated_row_number < ?"
+ " and generated_row_number >= ?";
}
哪裏開始索引和頁面大小是後來添加的參數。
我該如何處理包含CTE的查詢的類似功能?
可以將數據庫假定爲DB2,儘管通用解決方案將是首選。
連接到數據庫的用戶也沒有創建視圖的權限。
如何使用偏移量? 「爲了1偏移10((頁碼 - 1)* PAGESIZE)行獲取下一個5(頁面大小)行僅對」 – Appleman