编写分页过程
要求:编写一个存储过程,要求可以输入表名、每页显示记录数、当前页。返回总记录数、总页数和返回的结果集。
需要注意:
pl/sql中没有取余符号%,只有通过取余函数mod(a,b)来取a取余b
--将每个数据都进行编号
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>=6;
//如果关闭游标,则在java中就无法查到数据
pl/sql代码
--创建一个包
create or replace package mapackage as
type ma_cursor is ref cursor;
end mapackage;
--开始编写分页的过程
create or replace procedure sun_fenye
(tableName in varchar2,
pageSizeNum in number,
pageNow in number,
myrows out number,--总记录数
myPageCount out number,--总页数
m_cursor out mapackage.ma_cursor)--返回的结果集
is
--定义部分(如果有就定义,如果没有就直接进入begin部分)
--定义sql语句 字符串
v_sql varchar2(1000);
--定义两个整数
v_begin number:=(pageNow-1)*pageSizeNum+1;
v_end number:=pageNow*pageSizeNum;
begin
--执行部分
v_sql:='select * from (select t1.*,rownum rn from (select * from '||tableName||') t1
where rownum<='||v_end||') where rn>='||v_begin;
--把游标和sql关联
open m_cursor for v_sql;
--计算myrows和myPageCount
--组织了一个sql
v_sql:='select count(*) from '||tableName;
--执行sql语句,并把返回的值赋给myrows
execute immediate v_sql into myrows;
--计算myPageCount
if mod(myrows,pageSizeNum)=0
then myPageCount:=myrows/pageSizeNum;
else
myPageCount:=myrows/pageSizeNum+1;
end if;
--关闭游标
close m_cursor;
end;
--新的需要:要求按照薪水从低到高排序,然后取出6——10
只需要在排序那改变即可
v_sql:='select * from (select t1.*,rownum rn from (select * from '||tableName||' order by sal) t1
where rownum<='||v_end||') where rn>='||v_begin;
Oracle视频中的作业
猜你喜欢
转载自1124117571.iteye.com/blog/2288665
今日推荐
周排行