SQL分页

来源:互联网 发布:js字符串方法 编辑:程序博客网 时间:2024/05/04 06:02

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

原创粉丝点击