Oracle分页查询的一个存储过程:
2017-03-27 14:34
525 查看
create or replace procedure AspNetOraclePager
(
tableName in varchar2, --表名
fields in varchar2, --查询解果显示字段
wherecase in varchar2, --查询条件
pageSize in number, --一页显示记录数
pageNow in number, --当前页
orderField varchar2, --排序字段,为空表示不排序
orderFlag number, --排序标识 0:正序 1:倒序
myrows out number, --总记录数
myPageCount out number, --总分页
--nvd out varchar2,
p_cursor out testpackage.test_cursor --返回的记录集
) is
--定义部分
--定义sql语句字符串
v_sql varchar2(8000);
--定义两个整数
v_begin number:=(pageNow-1)*pagesize+1; --开始记录
v_end number:=pageNow*pageSize; --结束记录
--排序sql
v_orderSql varchar2(100):='';
v_wherecase varchar2(1000):='';
begin
--执行部分
--如果orderField不为空,则进行排序,如果orderFlag=0为升序,1为降序
if orderField is not null then
if orderFlag=0 then
v_orderSql:=' order by '||orderField;
elsif orderFlag=1 then
v_orderSql:=' order by '||orderField||' desc';
else
null;
end if;
end if;
--条件判断语句
if wherecase is not null then
v_wherecase:=' where '||wherecase;
end if;
--判断是不是超出索引
--计算myrows和myPageCount
--组织一个sql
v_sql:='select count(*) from '|| tableName || v_wherecase;
--执行sql,并把返回的值赋给myrows;
execute immediate v_sql into myrows;
--计算myPageCount
if mod(myrows,Pagesize)=0 then
myPageCount:=myrows/Pagesize;
else
myPageCount:=trunc(myrows/pagesize)+1;
end if;
if pageNow>mypageCount then
v_begin:=(mypageCount-1)*pagesize+1; --开始记录
v_end:=mypageCount*pageSize; --结束记录
end if;
v_sql:='select * from
(select t1.* ,rownum rn from(select '|| fields ||' from '|| tableName|| v_wherecase ||' '||v_orderSql ||') t1 where rownum<='|| v_end ||')
where rn>='|| v_begin;
--nvd:=v_sql;
--把游标和sql关联
open p_cursor for v_sql;
--关闭游标
--close p_cursor;
end AspNetOraclePager;
(
tableName in varchar2, --表名
fields in varchar2, --查询解果显示字段
wherecase in varchar2, --查询条件
pageSize in number, --一页显示记录数
pageNow in number, --当前页
orderField varchar2, --排序字段,为空表示不排序
orderFlag number, --排序标识 0:正序 1:倒序
myrows out number, --总记录数
myPageCount out number, --总分页
--nvd out varchar2,
p_cursor out testpackage.test_cursor --返回的记录集
) is
--定义部分
--定义sql语句字符串
v_sql varchar2(8000);
--定义两个整数
v_begin number:=(pageNow-1)*pagesize+1; --开始记录
v_end number:=pageNow*pageSize; --结束记录
--排序sql
v_orderSql varchar2(100):='';
v_wherecase varchar2(1000):='';
begin
--执行部分
--如果orderField不为空,则进行排序,如果orderFlag=0为升序,1为降序
if orderField is not null then
if orderFlag=0 then
v_orderSql:=' order by '||orderField;
elsif orderFlag=1 then
v_orderSql:=' order by '||orderField||' desc';
else
null;
end if;
end if;
--条件判断语句
if wherecase is not null then
v_wherecase:=' where '||wherecase;
end if;
--判断是不是超出索引
--计算myrows和myPageCount
--组织一个sql
v_sql:='select count(*) from '|| tableName || v_wherecase;
--执行sql,并把返回的值赋给myrows;
execute immediate v_sql into myrows;
--计算myPageCount
if mod(myrows,Pagesize)=0 then
myPageCount:=myrows/Pagesize;
else
myPageCount:=trunc(myrows/pagesize)+1;
end if;
if pageNow>mypageCount then
v_begin:=(mypageCount-1)*pagesize+1; --开始记录
v_end:=mypageCount*pageSize; --结束记录
end if;
v_sql:='select * from
(select t1.* ,rownum rn from(select '|| fields ||' from '|| tableName|| v_wherecase ||' '||v_orderSql ||') t1 where rownum<='|| v_end ||')
where rn>='|| v_begin;
--nvd:=v_sql;
--把游标和sql关联
open p_cursor for v_sql;
--关闭游标
--close p_cursor;
end AspNetOraclePager;
相关文章推荐
- 分页查询的一个帮助类及相关存储过程
- 一个简单的oracle分页存储过程的实现和调用
- 简单搞一下 Oracle 存储过程动态SQL之获取查询分页!
- 一个分页查询的存储过程
- 折腾Oracle问题小菜记[分页存储过程/查询所有表、视图、存储过程/查询表、视图、存储过程字段结构与参数](三)
- 折腾Oracle问题小菜记[分页存储过程/查询所有表、视图、存储过程/查询表、视图、存储过程字段结构与参数](三)
- 一个简单的oracle分页存储过程的实现和调用
- 一个查询数据库所有表的存储过程(允许按表名模糊查询一级按显示数量进行分页)
- [跟着hsp步步学习系统]oracle培训学习集锦全360度扫描(10)一个分页存储过程
- 折腾Oracle问题小菜记[分页存储过程/查询所有表、视图、存储过程/查询表、视图、存储过程字段结构与参数](三)
- oracle 分页查询存储过程
- Oracle问题小记五:服务启动-索引-子查询-分页存储过程
- oracle实现存储过程分页查询(非包)
- c# oracle 存储过程分页查询
- 一个简单的oracle分页存储过程的实现和调用
- 自己动手写一个通用的分页存储过程(适用于多表查询)
- 一个简单的oracle分页存储过程的实现和调用
- 一个简单的oracle分页存储过程的实现和调用
- Oracle的存储过程能返回一个select查询结果集吗
- 存储过程分页查询(ORACLE)