设为首页 加入收藏

TOP

Oracle利用存储过程性实现分页(一)
2014-11-23 17:56:19 】 浏览:799
Tags:Oracle 利用 存储 过程性 实现

分页的简单配置 在上一次已经说过了

这边说说怎么在存储过程中实现分页

首先建立存储过程

参考

http://www.cnblogs.com/gisdream/archive/2011/11/16/2251687.html

基本的代码如下所示

1、在oracle的sqlplus或其他工具中运行一下pl/sql块建立存储过程

------------------------------------------------------------
--分页存储过程
------------------------------------------------------------
--创建包
create or replace package testpackage as
type test_cursor is ref cursor;
end testpackage;
/ 

--创建过程
create or replace procedure fenye
(
       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, --总分页
       p_cursor out testpackage.test_cursor     --返回的记录集
) is
--定义部分
--定义sql语句字符串
v_sql varchar2(1000);
--定义两个整数
v_begin number:=(pageNow-1)*pagesize+1; --开始记录
v_end number:=pageNow*pageSize;         --结束记录
--排序sql
v_orderSql varchar2(100):='';  
v_wherecase varchar2(100):='';   
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;
  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;
  --把游标和sql关联
  open p_cursor for v_sql;
  --计算myrows和myPageCount
  --组织一个sql
  v_sql:='select count(*) from '|| tableName || v_wherecase || ' ' ||v_orderSql;
  --执行sql,并把返回的值赋给myrows;
  execute immediate v_sql into myrows;
  --计算myPageCount
  if mod(myrows,Pagesize)=0 then
    myPageCount:=myrows/Pagesize;
  else
    myPageCount:=myrows/pagesize+1;
  end if;
  --关闭游标
  --close p_cursor;
end;
/

 2、.net中的oracle过程调用类

/// 
    /// c#调用oracle的过程进行分页
    /// author:sirc_ljp
    /// date:2011.11.16
    /// 
    public class Paging
    {
        private string _connectionString;
        private string _tableName;
        private string _fields = "*";
        private string _whercase="";
        private int _pageSize=10;
        private int _pageNow=1;
        private string _orderField="";
        private int _orderFlag = 0;
        private int _myRows;
        private int _myPageCount;
        private DataTable _result;

        /// 
        /// 数据库连接字符串
        /// 
        public string ConnectionString
        {
            get { return _connectionString; }
            set { _connectionString = value; }
        }

        /// 
        /// 表名
        /// 
        public string TableName
        {
            get { return _tableName; }
            set { _tableName = value; }
        }
        /// 
        /// 查询结果显示字段
        /// 
        public string Fields
        {
            get { return _fields; }
            set { _fields = value; }
        }
        /// 
        /// 查询条件
        /// 
        public string Whercase
        {
            get { return _whercase; }
            set { _whercase = value; }
        }
        /// 
        /// 页显示记录数
        /// 
        public int PageSize
        {
            get { return _pageSize; }
            set { _pageSize = value; }
        }
        /// 
        /// 当前页
        /// 
        public int PageNow
        {
            get { return _pageNow; }
            set { _pageNow = value; }
        }
        /// 
        /// 排序字段,为空""表示不排序
        /// 
        public string OrderField
        {
            get { return _orderField; }
            set { _orderField = value; }
        }
        /// 
        /// 排序标识 0:正序 1:倒序
        /// 
        public int OrderFlag
        {
            get { return _orderFlag; }
            set { _orderFlag = value; }
        }
        /// 
        /// 总记录数
        /// 
        public int MyRows
        {
            get { return _myRows; }
        }
        /// 
        /// 总分页
        /// 
        public int MyPageCount
        {
            get { return _myPageCount; }
        }
        /// 
        /// 返回的记录集
        /// 
        public DataTable Result
        {
            get { return _result; }
        }

        public Pag
首页 上一页 1 2 3 4 5 下一页 尾页 1/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇关于oracle的备份导入 下一篇JDBC读取Oracle的US7ASCII编码中..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目