A clean way to organize your SQL code can be with the WITH statement.
The shortened version also implements the total number of results and the total number of pages .
for example
WITH SELECTION AS ( SELECT FIELDA, FIELDB, FIELDC FROM TABLE), NUMBERED AS ( SELECT ROW_NUMBER() OVER (ORDER BY FIELDA) RN, SELECTION.* FROM SELECTION) SELECT (SELECT COUNT(*) FROM NUMBERED) TOTAL_ROWS, NUMBERED.* FROM NUMBERED WHERE RN BETWEEN ((:page_size*:page_number)-:page_size+1) AND (:page_size*:page_number)
This code gives you a paged result set with two more fields:
TOTAL_ROWS with full lines of your full SELECTIONRN record line number
It takes 2 parameters :page_size and :page_number to :page_number your SELECTION
Smaller version
Selection implements already ROW_NUMBER()
WITH SELECTION AS ( SELECT ROW_NUMBER() OVER (ORDER BY FIELDA) RN, FIELDA, FIELDB, FIELDC FROM TABLE) SELECT :page_number PAGE_NUMBER, CEIL((SELECT COUNT(*) FROM SELECTION ) / :page_size) TOTAL_PAGES, :page_size PAGE_SIZE, (SELECT COUNT(*) FROM SELECTION ) TOTAL_ROWS, SELECTION.* FROM SELECTION WHERE RN BETWEEN ((:page_size*:page_number)-:page_size+1) AND (:page_size*:page_number)
Stefano Giraldi Jun 30 '19 at 5:18 2019-06-30 05:18
source share