一. 使用plsql语句分页
1.sql
--假设已经存在表myTble
--分页模板
select * from (select mt.*, rownum rn from (select * from myTable) mt where rownum<=10) where rn >= 6
select * from (select mt.*, rownum rn from (select * from myTable order by id) mt where rownum<=10) where rn >= 6
最里面的select用来排序
中间的select里面用rownum进行第一次筛选
外面的select用rownum进行最后排序
里面select定义的别名可以用在外面的select里面
--定义包并在包中定义游标类型
create or replace package myPackage as type sp_cursor is ref cursor;
end ;
--编写分页存储过程
create or replace procedure pro_separatedPage
(
tableName in varchar2, --表名(输入)
pageSize in number, --每页几行(输入)
nowPage in number, --当前页(输入)
totalRows out number, --总行数(输出)
totalPages out number, --总页数(输出)
my_cursor out myPackage.sp_cursor --返回结果集(输出)
) is
v_sql varchar2(1000);
v_begin number := (nowPage-1)*pageSize+1;
v_end number := nowPage*pageSize;
begin
v_sql := 'select * from (select mt.*, rownum rn (select * from '|| tableName ||') mt where rownum<='|| v_end ||') where rn >= '|| v_begin;
--打开游标是游标和sql语句关联
open my_cursor for v_sql;
--计算总页数和总行数
v_sql := 'select count(*) from '||tableName;
execute immediate v_sql into totalRows;
if mod(totalRows,pageSize)=0 then totalPages := totalRows/pageSize;
else totalPages := totalRows/pageSize + 1;
end if;
close my_cursor;
end;
2.java:
import java.sql.*;
//测试分页
//注意添加oracle驱动,这个案例没有添加所以发生编译错误
public class Separate