Oracle和MYSQL和SQLServer的分页

Oracle和MYSQL和SQLServer的分页加存储过程:

Oracle的分页是利用rownum关键字来进行分页的,实际上是将rownum查出来的数据作为一个新的数据源来进行再次查询也就是子查询,详情看代码:

-- oracle  分页

select * from

(select rownum rn , tt.* from T_LOGIN1  tt

where rownum<=3 ) temp

where temp.rn>0;

 

那么这样的代码复用性并不是太高,所以我们为了提高代码的复用率所所以采用存储过程,详情看代码:

--  创建分页存储过程

create or replace PROCEDURE pro_rownum(
v_currNum in number,      -- 当前页数
v_pageSize in number,        -- 每页条数
v_tableName in varchar2,  -- 表名
v_countAll out number,      -- 总条数
v_pageAll  out number,         -- 总页数
v_result out sys_refcursor  -- 分页的结果集
)
as
-- 计算开始和结束页码
 v_startNum  number:=(v_currNum-1)*v_pageSize;
 v_endNum number:=v_currNum*v_pageSize;
 v_sql varchar2(1000);
begin
-- 计算总条数
v_sql := 'select count(*) from  '  || v_tableName;

execute  immediate v_sql into v_countAll;

-- 计算多少页
if mod(v_countAll,v_pageSize)=0 then
   v_pageAll := v_countAll/v_pageSize;
else
   v_pageAll := trunc(v_countAll/v_pageSize)+1;
end if;
-- 打印总页数
dbms_output.put_line(v_pageAll);

-- 执行结果
v_sql :=
'select * from

(select rownum rn , tabelName.* from  ' || v_tableName  || ' tabelName

where rownum<= ' || v_endNum || ' ) temp

where temp.rn> ' || v_startNum;

open  v_result  for v_sql;

end;

 

MYSQL的分页是采用limit关键字来进行分页的,较Oracle分页简单一些,详情看代码:

10代表的是每页的条数,0代表的是开始的数据编号也就是(当前页数-1)*每页条数

select * from t_studentbasic limit 0,10;

 

MYSQL的存储过程:

 

 

SQLServer的分页:

-- SQLServer的分页  使用top 和not in关键字 不支持符合主键

3代表的是每页的条数,1是从哪一条开始,我这里是从第二条开始。

select top 3 * from t_login1

where stu_num not in (

select top 1 stu_num from t_login1);

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值