1、创建Package

create or replace package forPaged is
type my_csr is ref cursor;
procedure getPaged(tableName in varchar2,objectid in number,fields in varchar2,wherecase in varchar2,orderFieldStr varchar2,pageSize in number,pageIndex in number,expression varchar2,totalCount out number,csr out forPaged.my_csr);
end forPaged;

2、创建存储过程;里面用到了父子级联查询;SQL中如果用到了单引号,需要再用一个单引号转义

create or replace procedure getPaged(tableName in varchar2,objectid in number,fields in varchar2,wherecase in varchar2,orderFieldStr in varchar2,pageSize in number,pageIndex in number,expression varchar2,totalCount out number,csr out forPaged.my_csr) is
v_sql varchar2(1000);
v_begin number:=(pageIndex-1)*pageSize+1; --开始记录
v_end number:=pageIndex*pageSize; --结束记录
begin
v_sql:='select count(*) from (select entitycode from '|| tableName ||' where '|| wherecase||' and Exists(select distinct companycode from company where '||tableName||'.entitycode=company.companycode start with object_id='||objectid||' connect by prior object_id=parent_id)) t';
execute immediate v_sql into totalCount;
if expression is not null then
v_sql:='select '|| fields ||','||expression||' HeJi from
(select t.* ,rownum rn from (select '|| fields ||' from '|| tableName|| ' where '|| wherecase ||' and Exists(select distinct companycode from company where '||tableName||'.entitycode=company.companycode start with object_id='||objectid||' connect by prior object_id=parent_id) order by '|| orderFieldStr ||' ) t)
where rn>='|| v_begin||' and rn<='|| v_end;
else v_sql:='select '|| fields ||' from
(select t.* ,rownum rn from (select '|| fields ||' from '|| tableName|| ' where '|| wherecase ||' and Exists(select distinct companycode from company where '||tableName||'.entitycode=company.companycode start with object_id='||objectid||' connect by prior object_id=parent_id) order by '|| orderFieldStr ||' ) t)
where rn>='|| v_begin||' and rn<='|| v_end;
end if;
open csr for v_sql;
--close csr;关闭后则不会传出数据集
end getPaged;

3、Asp.Net中使用

  /// <summary>
/// 使用存储过程实现的分页查询
/// </summary>
/// <param name="dataTableName">数据表</param>
/// <param name="objectid">实体表主键</param>
/// <param name="fields">表中字段拼接的字符串</param>
/// <param name="wherecase">查询条件</param>
/// <param name="pagesize">每页显示数据行数</param>
/// <param name="pageIndex">当前页</param>
/// <param name="orderFieldStr">排序字段拼接的字符串</param>
/// <param name="totalCount">符合条件总记录数</param>
/// <param name="expression">计算表达式</param>
/// <returns></returns>
public DataTable getReportDataByPage(M_SelectData model, out int totalCount)
{
IList<OracleParameter> dataParameters = new List<OracleParameter>();
dataParameters.Add(new OracleParameter("tableName", model.tableName));
dataParameters.Add(new OracleParameter("objectid", model.companyId));
dataParameters.Add(new OracleParameter("fields", model.fieldsStr));
dataParameters.Add(new OracleParameter("wherecase", model.whereStr));
dataParameters.Add(new OracleParameter("pageSize", model.pageSize));
dataParameters.Add(new OracleParameter("pageIndex", model.pageIndex));
dataParameters.Add(new OracleParameter("orderFieldStr", model.orderFieldStr));
dataParameters.Add(new OracleParameter("expression", model.expression));
dataParameters.Add(new OracleParameter("totalCount", OracleType.Int32));
dataParameters.Add(new OracleParameter("csr", OracleType.Cursor));
dataParameters[dataParameters.Count - ].Direction = ParameterDirection.Output;
dataParameters[dataParameters.Count - ].Direction = ParameterDirection.Output;
DataTable dataTable = OracleSqlHelper.ExcuteProcedure("getpaged", dataParameters.ToArray());
totalCount = int.Parse(dataParameters[dataParameters.Count - ].Value.ToString());
return dataTable;
}

业务逻辑层

   /// <summary>
/// 分页存储过程
/// </summary>
/// <param name="proName">存储过程名字</param>
/// <param name="parameters">tableName表名,fields查询字段字符串,wherecase查询条件,orderFieldStr排序字段字符串,pageSize每页显示数据行数,pageIndex页码,totalCount总记录数,传出,csr游标,传出</param>
/// <returns></returns>
public static DataTable ExcuteProcedure(string proName, OracleParameter[] parameters)
{
DataTable table = new DataTable();
using (OracleConnection conn = new OracleConnection(connStr))
{
using (OracleCommand comm = new OracleCommand(proName, conn))
{
if (parameters.Length > )
{
comm.Parameters.AddRange(parameters);
}
comm.CommandType = CommandType.StoredProcedure;
conn.Open();
OracleDataAdapter oda = new OracleDataAdapter(comm);
DataSet ds = new DataSet();
oda.Fill(ds);
//得到查询结果表
table = ds.Tables[];
}
}
return table;
}

数据操作层

Oracle数据分页,并传出数据集的更多相关文章

  1. 数据分页处理系列之一:Oracle表数据分页检索SQL

      关于Oracle数据分页检索SQL语法,网络上比比皆是,花样繁多,本篇也是笔者本人在网络上搜寻的比较有代表性的语法,绝非本人原创,贴在这里,纯粹是为了让"数据分页专题系列"看起 ...

  2. Oracle、MySql、SQLServer数据分页查询

    看过此博文后Oracle.MySql.SQLServer 数据分页查询,在根据公司的RegionRes表格做出了 SQLserver的分页查询语句: 别名.字段 FROM( SELECT row_nu ...

  3. Oracle、MySql、SQLServer 数据分页查询

    最近简单的对oracle,mysql,sqlserver2005的数据分页查询作了研究,把各自的查询的语句贴出来供大家学习..... (一). mysql的分页查询 mysql的分页查询是最简单的,借 ...

  4. 转Oracle、MySql、SQLServer 数据分页查询

    最近简单的对oracle,mysql,sqlserver2005的数据分页查询作了研究,把各自的查询的语句贴出来供大家学习..... (一). mysql的分页查询 mysql的分页查询是最简单的,借 ...

  5. oracle 相关查询和非相关查询,oracle 去除重复数据,以及oracle的分页查询!

    一.oracle中的相关查询?和非相关查询? 二.oracle去除重复数据 1. 2. 3.oracle 实现分页? 利用rownum的唯一性,和子查询,将rownum从伪列变成实际列!

  6. Oracle中的数据分页

    --数据分页脚本 --创建包含数据分页代码元素声明的包头结构create or replace package data_controlis type type_cursor_data is ref ...

  7. ORACLE 分页 java 用jdbc方式以 sys账号连接oracle数据的问题

    2,3,4,6,8   betwenen 为闭区间,前后都包括 select * from(select a.*,rownum rn from (select * from student) a ) ...

  8. 转:SQL SERVER数据库中实现快速的数据提取和数据分页

    探讨如何在有着1000万条数据的MS SQL SERVER数据库中实现快速的数据提取和数据分页.以下代码说明了我们实例中数据库的“红头文件”一表的部分数据结构: CREATE TABLE [dbo]. ...

  9. 对于Oracle中分页排序查询语句执行效率的比较分析

    转自:http://bbs.csdn.net/topics/370033478 对于Oracle中分页排序查询语句执行效率的比较分析 作者:lzgame 在工作中我们经常遇到需要在Oracle中进行分 ...

随机推荐

  1. Oracle异常处理,动态游标

    小例子,方便以后查阅. 包头需要声明:   type C_CURSOR is ref cursor; procedure visitcount(in_date number, out_code out ...

  2. 一些正则验证-JS

    Validation = { textCount: function(field, counter, maxLimit) { var message = $(field).val(); if ($(f ...

  3. Jquery easyui tree的使用

    这个ui用的一切都是json数据.树也是如此! 后台需要返回与格式匹配的json数据才能正确加载树. 页面定义一个ui: <ul id="messageInfoAddTree" ...

  4. Android -- 创建数据库到SD卡

    SQLite 系统自带的SQLite是通过SQLiteOpenHelper实现的,而SQLiteOpenHelper是将数据库存储到/data/data/包名/databasas,这样做的话在没有ro ...

  5. Linux下目录的合并以及文件的覆盖

    有两个目录test和new,test目录下有目录和文件,new目录下有更改过的一些test下的目录和文件,以及一些新增的文件,现在对两个目录进行合并以及覆盖test下的旧文件. cp -frap ne ...

  6. 类似IOS的滑动返回上一级,SwipeBackLayout-android的滑动返回类库

    最近,公司在开发App的需求中增加了一个新的需求,要在android的页面中增加向右滑动的时候返回上一级页面.我刚知道这个需求的时候,感觉有点坑,可能设计那边最近接触到知乎的客户端或者是IOS的滑动可 ...

  7. Use Windows Azure AD to create SSO projects

    Keywords Windows Azure AD, SSO Summary Use Windows Azure AD to create SSO projects Detailed Scenario ...

  8. css3面试的时候需要记忆的东西

    1.响应式布局: <link rel="stylesheet" href="1.css" media="screen and (min-widt ...

  9. [bzoj 1027][JSOI2007]合金(解析几何+最小环)

    题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1027 分析: 首先因为一个合金的和为1,所以考虑2个材料合金能否合成一个需求合金的时候 ...

  10. Javascript基础系列之(二)变量

    javascript 中变量通过var关键字(variable)来声明的. var school = "beijingyizhong" 也可以通过var 关键字给变量多个值. va ...