SQL分页

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值