oracle分页案例

来源:互联网 发布:知乎 绶带 编辑:程序博客网 时间:2024/05/21 06:41

oracle 分页案例

加标号

 select t1.*, rownum rn from(select *from emp) t1;

加条件

select t1.*, rownum rn from(select *from emp) t1 where rownum<=10;

分页的模板语句

select *from(select t1.*, rownum rn from(select *from emp) t1 where rownum<=10) where rn>=3;

 

 

select t1.* rownum rn from(select *from emp) t1;

 

 

 

--先定义一个游标用于存放结果集

--1.定义一个游标类型的游标

create or replace package test_package as

type test_cursor is ref cursor;

end test_package;

 

--编写分页过程

create or replace procedure fenye(

tbname in varchar2,--输入表名字

pagesizes in number,--输入每页显示

nowpage in number,--当前页

zjls out number,--返回总记录数

zpage out number,--返回总页数

p_cursor out test_package.test_cursor--返回结果集

)is

--定义部分

--定义sql语句,一个字符串

v_sql varchar2(1000);

--定义两个变量,存放开始,和结束

v_begin number:=(nowpage-1)*pagesizes+1;

v_end number:=nowpage*pagesizes;

 

begin

  --执行

  

  v_sql:='select *from(select t1.*, rownum rn from(select *from '|| tbname ||'order by sal) t1

   where rownum<=''|| v_end ||) where rn>='||v_begin;

--把游标和sql关联

  open p_cursor for v_sql;

  --计算总记录数zjls,和总页数zpage

  --组织一个sql

  v_sql:='select count(*) from '||tbname;

 --执行sql语句,并返回总记录数

  execute immediate v_sql into zjls;

--计算总页数

  if mod(zjls,pagesizes)=0 then

    zpage:=zjls/pagesizes;

    else

      zpage:=zjls/pagesizes+1;

      end if;

      close p_cursor;

  end;

原创粉丝点击