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. mac上一键配置和安装adb驱动或者环境

    最近才使用的mac,老实说mac上要配置adb的环境不那么复杂,但是还是会让一些心不细或者动手能力不强的同学望而却步.那么到底有没有一个一键完成mac上adb和fastboot环境搭配的软件或者脚本呢 ...

  2. C语言 Linux内核链表(企业级链表)

    //Linux内核链表(企业级链表) #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> ...

  3. java内部类 2016年12月13号

    1.在外部类的任意位置创建内部类对象的方法: 1)从外部类的非静态方法之外的任意位置创建某个内部类的对象,必须指明这个对象所在的外部类和内部类:OuterClassName.InnerClassNam ...

  4. liunx检查与安装软件包

    检查软件包# rpm -qa | grep 例如:# rpm -qa | grep make检查make包 安装软件包 yum install 例如:yum install  unixODBC安装un ...

  5. 用python简单处理图片(1):打开\显示\保存图像

    一提到数字图像处理,可能大多数人就会想到matlab,但matlab也有自身的缺点: 1.不开源,价格贵 2.软件容量大.一般3G以上,高版本甚至达5G以上. 3.只能做研究,不易转化成软件. 因此, ...

  6. 创建Maven工程

    一.Maven工程创建 File->New->Other,进入: 点击Next,进入: 勾选上Create a simple project(不使用骨架) 点击Next,进入: 输入项目名 ...

  7. iOS开发--应用设置及用户默认设置——转载

    [链接]iOS开发--应用设置及用户默认设置[1.bundlehttp://www.jianshu.com/p/6f2913f6b218 在iphone里面,应用都会在“设置”里面有个专属的应用设置, ...

  8. iOS——百度统计

    百度移动统计(http://mtj.baidu.com)是一款专业的移动应用统计分析工具,支持ios和android平台.开发者可以方便地通过嵌入统计SDK,对移动应用进行全方位监测,实时监控产品表现 ...

  9. 开园子啦(浅谈移动端以及h5的发展)

    一.前言 一直以来都梦想着写几篇博客,忙于工作一直也没有抽出时间来写一下.看看大熊君.小v君等都在努力写博客,我这个不太善于言表的少年,也是在忍不住了.否则会被人家拉下更远.先简单介绍一下自己,目前我 ...

  10. 【Lucene实验1】构建索引

    一.实验名称:构建索引 二.实验日期:2013/9/21 三.实验目的: 1)        能理解Lucene中的Document-Field结构的数据建模过程: 2)        能编针对特定数 ...