整理的oracle数据库分页存储过程及示例
来源:互联网 发布:淘宝七天无理由退款 编辑:程序博客网 时间:2024/05/01 11:41
1、oracle数据库分页存储过程
CREATE OR REPLACE PACKAGE DotNet is
TYPE type_cur IS REF CURSOR; --定义游标变量用于返回记录集
PROCEDURE DotNetPagination
(
Pindex in number, --分页索引
Psql in varchar2, --产生dataset的sql语句
Psize in number, --页面大小
Pcount out number, --返回分页总数
v_cur out type_cur --返回当前页数据记录
);
procedure DotNetPageRecordsCount
(
Psqlcount in varchar2, --产生dataset的sql语句
Prcount out number --返回记录总数
);
end DotNet;
CREATE OR REPLACE PACKAGE BODY DotNet" is
--***************************************************************************************
PROCEDURE DotNetPagination
(
Pindex in number,
Psql in varchar2,
Psize in number,
Pcount out number,
v_cur out type_cur
)
AS
v_sql VARCHAR2(1000);
v_count number;
v_Plow number;
v_Phei number;
Begin
------------------------------------------------------------取分页总数
v_sql := 'select count(*) from (' || Psql || ')';
execute immediate v_sql into v_count;
Pcount := ceil(v_count/Psize);
------------------------------------------------------------显示任意页内容
v_Phei := Pindex * Psize + Psize;
v_Plow := v_Phei - Psize + 1;
--Psql := 'select rownum rn,t.* from cd_ssxl t' ; --要求必须包含rownum字段
v_sql := 'select * from (' || Psql || ') where rn between ' || v_Plow || ' and ' || v_Phei ;
open v_cur for v_sql;
End DotNetPagination;
--**************************************************************************************
procedure DotNetPageRecordsCount
(
Psqlcount in varchar2,
Prcount out number
)
as
v_sql varchar2(1000);
v_prcount number;
begin
v_sql := 'select count(*) from (' || Psqlcount || ')';
execute immediate v_sql into v_prcount;
Prcount := v_prcount; --返回记录总数
end DotNetPageRecordsCount;
--**************************************************************************************
end DotNet;
TYPE type_cur IS REF CURSOR; --定义游标变量用于返回记录集
PROCEDURE DotNetPagination
(
Pindex in number, --分页索引
Psql in varchar2, --产生dataset的sql语句
Psize in number, --页面大小
Pcount out number, --返回分页总数
v_cur out type_cur --返回当前页数据记录
);
procedure DotNetPageRecordsCount
(
Psqlcount in varchar2, --产生dataset的sql语句
Prcount out number --返回记录总数
);
end DotNet;
CREATE OR REPLACE PACKAGE BODY DotNet" is
--***************************************************************************************
PROCEDURE DotNetPagination
(
Pindex in number,
Psql in varchar2,
Psize in number,
Pcount out number,
v_cur out type_cur
)
AS
v_sql VARCHAR2(1000);
v_count number;
v_Plow number;
v_Phei number;
Begin
------------------------------------------------------------取分页总数
v_sql := 'select count(*) from (' || Psql || ')';
execute immediate v_sql into v_count;
Pcount := ceil(v_count/Psize);
------------------------------------------------------------显示任意页内容
v_Phei := Pindex * Psize + Psize;
v_Plow := v_Phei - Psize + 1;
--Psql := 'select rownum rn,t.* from cd_ssxl t' ; --要求必须包含rownum字段
v_sql := 'select * from (' || Psql || ') where rn between ' || v_Plow || ' and ' || v_Phei ;
open v_cur for v_sql;
End DotNetPagination;
--**************************************************************************************
procedure DotNetPageRecordsCount
(
Psqlcount in varchar2,
Prcount out number
)
as
v_sql varchar2(1000);
v_prcount number;
begin
v_sql := 'select count(*) from (' || Psqlcount || ')';
execute immediate v_sql into v_prcount;
Prcount := v_prcount; --返回记录总数
end DotNetPageRecordsCount;
--**************************************************************************************
end DotNet;
2、使用示例
/// <summary>
/// 填充dataSet数据集-Oracle库
/// </summary>
/// <param name="pindex">当前页</param>
/// <param name="psql">执行查询的SQL语句</param>
/// <param name="psize">每页显示的记录数</param>
/// <returns></returns>
private bool gridbind(int pindex, string psql, int psize)
{
OracleConnection conn = new OracleConnection();
OracleCommand cmd = new OracleCommand();
OracleDataAdapter dr = new OracleDataAdapter();
conn.ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
cmd.Connection = conn;
cmd.CommandType = CommandType.StoredProcedure;
conn.Open();
cmd.CommandText = "DotNet.DotNetPageRecordsCount";
cmd.Parameters.Add("psqlcount", OracleType.VarChar).Value = psql;
cmd.Parameters.Add("prcount", OracleType.Number).Direction = ParameterDirection.Output;
cmd.ExecuteNonQuery();
string PCount = cmd.Parameters["prcount"].Value.ToString();
cmd.Parameters.Clear();
cmd.CommandText = "DotNet.DotNetPagination";
if (pindex != 0)
{
cmd.Parameters.Add("pindex", OracleType.Number).Value = pindex - 1;
}
else
{
cmd.Parameters.Add("pindex", OracleType.Number).Value = pindex;
}
cmd.Parameters.Add("psql", OracleType.VarChar).Value = psql;
cmd.Parameters.Add("psize", OracleType.Number).Value = psize;
cmd.Parameters.Add("v_cur", OracleType.Cursor).Direction = ParameterDirection.Output;
cmd.Parameters.Add("pcount", OracleType.Number).Direction = ParameterDirection.Output;
dr.SelectCommand = cmd;
try
{
ds = new DataSet();
dr.Fill(ds);
//显示页码条的状态
showStatus(Convert.ToInt32(cmd.Parameters["pindex"].Value) + 1,
Convert.ToInt32(cmd.Parameters["pcount"].Value),
Convert.ToInt32(PCount));
for (int i = 0; i < ds.Tables.Count; i++)
{ //把数据行为零的表删除
if (ds.Tables[i].Rows.Count == 0)
ds.Tables.Remove(ds.Tables[i].TableName);
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
return false;
}
conn.Close();
return true;
}
/// 填充dataSet数据集-Oracle库
/// </summary>
/// <param name="pindex">当前页</param>
/// <param name="psql">执行查询的SQL语句</param>
/// <param name="psize">每页显示的记录数</param>
/// <returns></returns>
private bool gridbind(int pindex, string psql, int psize)
{
OracleConnection conn = new OracleConnection();
OracleCommand cmd = new OracleCommand();
OracleDataAdapter dr = new OracleDataAdapter();
conn.ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
cmd.Connection = conn;
cmd.CommandType = CommandType.StoredProcedure;
conn.Open();
cmd.CommandText = "DotNet.DotNetPageRecordsCount";
cmd.Parameters.Add("psqlcount", OracleType.VarChar).Value = psql;
cmd.Parameters.Add("prcount", OracleType.Number).Direction = ParameterDirection.Output;
cmd.ExecuteNonQuery();
string PCount = cmd.Parameters["prcount"].Value.ToString();
cmd.Parameters.Clear();
cmd.CommandText = "DotNet.DotNetPagination";
if (pindex != 0)
{
cmd.Parameters.Add("pindex", OracleType.Number).Value = pindex - 1;
}
else
{
cmd.Parameters.Add("pindex", OracleType.Number).Value = pindex;
}
cmd.Parameters.Add("psql", OracleType.VarChar).Value = psql;
cmd.Parameters.Add("psize", OracleType.Number).Value = psize;
cmd.Parameters.Add("v_cur", OracleType.Cursor).Direction = ParameterDirection.Output;
cmd.Parameters.Add("pcount", OracleType.Number).Direction = ParameterDirection.Output;
dr.SelectCommand = cmd;
try
{
ds = new DataSet();
dr.Fill(ds);
//显示页码条的状态
showStatus(Convert.ToInt32(cmd.Parameters["pindex"].Value) + 1,
Convert.ToInt32(cmd.Parameters["pcount"].Value),
Convert.ToInt32(PCount));
for (int i = 0; i < ds.Tables.Count; i++)
{ //把数据行为零的表删除
if (ds.Tables[i].Rows.Count == 0)
ds.Tables.Remove(ds.Tables[i].TableName);
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
return false;
}
conn.Close();
return true;
}
- 整理的oracle数据库分页存储过程及示例
- Oracle存储过程分页示例
- oracle 存储过程分页示例
- oracle数据库分页的存储过程
- 使用数据库手工分页存储过程示例
- Java调用Oracle数据库的分页存储过程
- PL/SQL中编写Oracle数据库分页的存储过程
- java调用oracle数据库的分页存储过程
- PL/SQL中编写Oracle数据库分页的存储过程
- oracle分页的存储过程
- ORACLE分页的存储过程
- oracle 分页的存储过程
- oracle分页的存储过程
- oracle数据库的存储过程PROCEDURE与函数FUNCTION示例
- Oracle分页存储过程及java的具体调用方法
- 分页存储过程示例
- oracle的存储过程示例
- 分页带查询的存储过程示例
- 有关Cell[]溢出的问题
- 喜欢编程,却讨厌面对电脑,哎~,也许是不喜欢这样的生活
- Linux下登录windown系统远程桌面(3389)(转)
- 我的毕业设计
- Java 编程技术中汉字问题的分析及解决
- 整理的oracle数据库分页存储过程及示例
- 在asp中调用存储过程的几种方法
- 毕业将至,何去何从?
- 用脚本查看某库中每个表大小
- vb.net打三角星程序
- 一个关于ellipse的网站
- 软件测试词汇----自测一下您了解多少?
- [龙讯增刊2号]龙芯能干啥?
- 感悟《道德经》第四十五章-辩证法始祖