Oracle分页存储过程
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过程调用类
/// <summary>
/// c#调用oracle的过程进行分页
/// author:sirc_ljp
/// date:2011.11.16
/// </summary>
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;
/// <summary>
/// 数据库连接字符串
/// </summary>
public string ConnectionString
{
get { return _connectionString; }
set { _connectionString = value; }
}
/// <summary>
/// 表名
/// </summary>
public string TableName
{
get { return _tableName; }
set { _tableName = value; }
}
/// <summary>
/// 查询结果显示字段
/// </summary>
public string Fields
{
get { return _fields; }
set { _fields = value; }
}
/// <summary>
/// 查询条件
/// </summary>
public string Whercase
{
get { return _whercase; }
set { _whercase = value; }
}
/// <summary>
/// 页显示记录数
/// </summary>
public int PageSize
{
get { return _pageSize; }
set { _pageSize = value; }
}
/// <summary>
/// 当前页
/// </summary>
public int PageNow
{
get { return _pageNow; }
set { _pageNow = value; }
}
/// <summary>
/// 排序字段,为空""表示不排序
/// </summary>
public string OrderField
{
get { return _orderField; }
set { _orderField = value; }
}
/// <summary>
/// 排序标识 0:正序 1:倒序
/// </summary>
public int OrderFlag
{
get { return _orderFlag; }
set { _orderFlag = value; }
}
/// <summary>
/// 总记录数
/// </summary>
public int MyRows
{
get { return _myRows; }
}
/// <summary>
/// 总分页
/// </summary>
public int MyPageCount
{
get { return _myPageCount; }
}
/// <summary>
/// 返回的记录集
/// </summary>
public DataTable Result
{
get { return _result; }
}
public Paging()
{
fenye();
}
public Paging(string connectionString,string tableName, string fields, string wherecase, int pageSize, int pageNow, string orderField, int orderFlag, out int myRows, out int myPageCount, out DataTable result)
{
_connectionString = connectionString;
_tableName = tableName;
_fields = fields;
_whercase = wherecase;
_pageSize = pageSize;
_pageNow = pageNow;
_orderField = orderField;
_orderFlag = orderFlag;
fenye();
myRows = _myRows;
myPageCount = _myPageCount;
result = _result;
}
private void fenye()
{
OracleConnection conn = new OracleConnection(_connectionString);
conn.Open();
try
{
OracleCommand cmd = new OracleCommand();
cmd.Connection = conn;
cmd.CommandType = CommandType.StoredProcedure;
//调用存储过程查询数据
cmd.CommandText = "fenye";
OracleParameter[] parameters = new OracleParameter[10];
//注意这里的参数名和类型号与存储过程里面的一样
parameters[0] = new OracleParameter("tableName", OracleType.VarChar);
parameters[1] = new OracleParameter("fields", OracleType.VarChar);
parameters[2] = new OracleParameter("wherecase", OracleType.VarChar);
parameters[3] = new OracleParameter("pageSize", OracleType.Int32);
parameters[4] = new OracleParameter("pageNow", OracleType.Int32);
parameters[5] = new OracleParameter("orderField", OracleType.VarChar);
parameters[6] = new OracleParameter("orderFlag", OracleType.Int32);
parameters[7] = new OracleParameter("myrows", OracleType.Int32);
parameters[8] = new OracleParameter("myPageCount", OracleType.Int32);
parameters[9] = new OracleParameter("p_cursor", OracleType.Cursor);
parameters[0].Value = _tableName;
parameters[1].Value = _fields;
parameters[2].Value = _whercase;
parameters[3].Value = _pageSize;
parameters[4].Value = _pageNow;
parameters[5].Value = _orderField;
parameters[6].Value = _orderFlag;
parameters[7].Direction = ParameterDirection.Output;
parameters[8].Direction = ParameterDirection.Output;
parameters[9].Direction = ParameterDirection.Output;
foreach (OracleParameter parameter in parameters)
{
cmd.Parameters.Add(parameter);
}
//执行命令
OracleDataAdapter oda = new OracleDataAdapter(cmd);
DataSet ds = new DataSet();
oda.Fill(ds);
//得到查询结果表
_result = ds.Tables[0];
//取出总行数
_myRows = Convert.ToInt32(parameters[7].Value);
//取出总页数
_myPageCount = Convert.ToInt32(parameters[8].Value.ToString());
}
catch (Exception ex)
{
throw;
}
finally
{
conn.Close();
}
}
}
Oracle分页存储过程的更多相关文章
- Oracle分页存储过程及PLSQL中的调用脚本
撰写过程:网上搜集测试了好多的Oracle分页存储过程代码,经整理后终于通过测试,特分享给大家 测试步骤:1.运行创建包命令;2.运行创建存储过程命令;3.运行调用分页存储过程语句 测试环境:wind ...
- java调用Oracle分页存储过程
Java程序 package com.test; import java.sql.CallableStatement; import java.sql.Connection; import java. ...
- java 调用oracle 分页存储过程 返回游标数据集
1.分页类 package org.zh.basic; /** * 页面类 * * @author keven * */ public class PageInfo { // 定义 private S ...
- Oracle 分页方法研究
1.Oracle 中的三大分页方法 1.1.通过分析函数分页 1.2.通过 ROWNUM 分页 1.3.通过 ROWID 分页 2.Oracle 分页解决方案浅析 2.1.纯后端代码完成分页 2.2. ...
- Oracle利用存储过程性 实现分页
分页的简单配置 在上一次已经说过了 这边说说怎么在存储过程中实现分页 首先建立存储过程 參考 http://www.cnblogs.com/gisdream/archive/2011/11/16/22 ...
- Oracle通用分页存储过程的创建与使用
Oracle通用分页存储过程的创建与使用 1.创建Oracle包的定义.使用 REF CURSOR 数据类型来处理 Oracle 结果集.REF CURSOR 是一个指向 PL/SQL 查询所返回的结 ...
- [转]Oracle分页之二:自定义web分页控件的封装
本文转自:http://www.cnblogs.com/scy251147/archive/2011/04/16/2018326.html 上节中,讲述的就是Oracle存储过程分页的使用方式,但是如 ...
- .NET+Oracle 分页
http://www.cnblogs.com/Jusoc/archive/2011/08/28/2156530.html#commentform .在oracle的sqlplus或其他工具中运行一下p ...
- 分页存储过程实现-SqlServer
一个通用的分页存储过程实现-SqlServer(附上sql源码,一键执行即刻搭建运行环境) 使用前提 查询表必须有ID字段,且该字段不能重复,建议为自增主键 背景 如果使用ADO.NET进行开发,在查 ...
随机推荐
- LeetCode-179. Largest Number
179. Largest Number Given a list of non negative integers, arrange them such that they form the larg ...
- leetcode 217
217. Contains Duplicate Given an array of integers, find if the array contains any duplicates. Your ...
- MATLAB处理信号得到频谱、相谱、功率谱
(此帖引至网络资源,仅供参考学习)第一:频谱 一.调用方法 X=FFT(x):X=FFT(x,N):x=IFFT(X);x=IFFT(X,N) 用MATLAB进行谱分析时注意: (1)函数FFT返回值 ...
- python常用库
本文由 伯乐在线 - 艾凌风 翻译,Namco 校稿.未经许可,禁止转载!英文出处:vinta.欢迎加入翻译组. Awesome Python ,这又是一个 Awesome XXX 系列的资源整理,由 ...
- Openwebrtc
https://github.com/EricssonResearch ============================= webrtc系列不错的博客 http://blog.csdn.net ...
- nginx修改配置后不生效的问题
nginx增加了新的server name配置,发现nginx -s reload之后总是不生效. http和https均可以打开页面,但是页面是别的server页面,使用的证书也是别的server的 ...
- 操作系统 页面置换算法LRU和FIFO
LRU(Least Recently Used)最少使用页面置换算法,顾名思义,就是替换掉最少使用的页面. FIFO(first in first out,先进先出)页面置换算法,这是的最早出现的置换 ...
- SQL Server 数据库的安全管理(登录、角色、权限)
---数据库的安全管理 --登录:SQL Server数据库服务器登录的身份验证模式:1)Windows身份验证.2)Windows和SQL Server混合验证 --角色:分类:1)服务器角色.服务 ...
- [转帖]FPGA开发工具汇总
原帖:http://blog.chinaaet.com/yocan/p/5100017074 ----------------------------------------------------- ...
- MySQL优化的奇技淫巧之STRAIGHT_JOIN
原文地址:http://huoding.com/2013/06/04/261 问题 通过「SHOW FULL PROCESSLIST」语句很容易就能查到问题SQL,如下: SELECT post.* ...