Paging in the Oracle database with help of SQL Queries
With Different programming help, we need to pass the parameter to fetch the no of rows and starting point in oracle 12c sql queries.
In Oracle 12c, For Paging Query developed is little easy.
We can use the OFFSET and FETCH keyword to defined the Paging with help of SQL Queries
SELECT * FROM tables
ORDER BY column_id
OFFSET 1 ROWS FETCH NEXT 10 ROWS ONLY;
Example
--For First 10 rows
SELECT employee_id,first_name,last_name FROM hr.employees
ORDER BY employee_id
OFFSET 1 ROWS FETCH NEXT 10 ROWS ONLY;
EMPLOYEE_ID FIRST_NAME LAST_NAME
----------- -------------------- -------------------------
101 Neena Kochhar
102 Lex De Haan
103 Alexander Hunold
104 Bruce Ernst
105 David Austin
106 Valli Pataballa
107 Diana Lorentz
108 Nancy Greenberg
109 Daniel Faviet
110 John Chen
--For next 10 ROWS, you need to change offset to 10
SELECT employee_id,first_name,last_name FROM hr.employees
ORDER BY employee_id
OFFSET 11 ROWS FETCH NEXT 10 ROWS ONLY;
EMPLOYEE_ID FIRST_NAME LAST_NAME
----------- -------------------- -------------------------
111 Ismael Sciarra
112 Jose Manuel Urman
113 Luis Popp
114 Den Raphaely
115 Alexander Khoo
116 Shelli Baida
117 Sigal Tobias
118 Guy Himuro
119 Karen Colmenares
120 Matthew Weiss
Paging with help of Row_Number
With help of different languages, you have to pass the parameter n and m
Before 12c, we can use row_number for using paging functionality by taking one unique column in order by clause.
select * from (
select col_id,col_name,row_number() over (order by col_id) n
from table_name)
where rn between :n and :m order by rn;
Example:
SELECT * FROM
(select employee_id,first_name,last_name,row_number() over (order by employee_id) rn
from hr.employees) where rn between 1 and 10 order by rn;
EMPLOYEE_ID FIRST_NAME LAST_NAME RN
----------- -------------------- ------------------------- ----------
100 Steven King 1
101 Neena Kochhar 2
102 Lex De Haan 3
103 Alexander Hunold 4
104 Bruce Ernst 5
105 David Austin 6
106 Valli Pataballa 7
107 Diana Lorentz 8
108 Nancy Greenberg 9
109 Daniel Faviet 10
-- For next 10 rows, you can change between values
SELECT * FROM
(select employee_id,first_name,last_name,row_number() over (order by employee_id) rn
from hr.employees) where rn between 11 and 20 order by rn;
EMPLOYEE_ID FIRST_NAME LAST_NAME RN
----------- -------------------- ------------------------- ----------
110 John Chen 11
111 Ismael Sciarra 12
112 Jose Manuel Urman 13
113 Luis Popp 14
114 Den Raphaely 15
115 Alexander Khoo 16
116 Shelli Baida 17
117 Sigal Tobias 18
118 Guy Himuro 19
119 Karen Colmenares 20