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);