create or replace procedure proc_paging
(table_name in varchar2
,select_clause in varchar2
,where_clause in varchar2
,order_clause in varchar2
,start_row in number
,end_row in number
,result in out sys_refcursor
) as
stmt varchar2(2000);
begin
stmt := 'select ' || select_clause || chr(10) ||
'from ' || table_name || chr(10);
if where_clause is not null then
stmt := stmt || 'where ' || where_clause || chr(10);
end if;
if order_clause is not null then
stmt := stmt || 'order by ' || order_clause;
end if;
stmt := 'select ' || select_clause || ',rownum rn' || chr(10) ||
'from (' || stmt || ')';
stmt := 'select rn,' || select_clause || chr(10) ||
'from (' || stmt || ') where rn between ' || start_row || ' and ' || end_row;
dbms_output.put_line(stmt);
open result for stmt;
end;
-- 測試
variable v refcursor;
execute proc_paging('employees', 'employee_id,first_name,salary', null, 'salary desc', 6, 10, :v);
print v;
-- 結果
RN EMPLOYEE_ID FIRST_NAME SALARY
---------- ----------- ------------------------------ ----------
6 147 Alberto 12000
7 100 Steven 12000
8 108 Nancy 12000
9 205 Shelley 12000
10 168 Lisa 11500
SQL分页
最新推荐文章于 2024-07-22 09:40:00 发布