rownumber是查询的数据集之后加入一个伪列(连续的)使用它可以去制作以oracle数据库为基础的分页,语句类似于公式直接套用如下:

select * from (select rownum r,keycode from (select * from Acceptlist order by procid ))
where r between (pageindex-1)*pagesize +1 and pageindex*pagesize

其中pageindex为页码,pagesize为每页最多条数

oracle的between..and..前后都是闭区间,也就是说包含两个端的数.

多说一句的是:between and的相反的是not between..and,

not between..and..只是取指定范围的相反范围,也就是不在这个范围的记录,其用户可以用组个逻辑条件来取代。

between and 表示  >=  or <=,那么not between..and..就表示<  or  >。

写成存储过程也可以这样

create or replace procedure proc_user_page
(
v_pagesize in number,--一页有多少条数据
v_pagenow in number,--当前页码
v_myrows out number,--总数据数
v_mypage_count out number,--总页数
p_cursor out testpackage.test_cursor--返回的结果集
)
is
v_sql varchar2(); v_begin number:=(v_pagenow-)*v_pagesize +;--开始页数
v_end number:=v_pagenow*v_pagesize;--截止页数 begin v_sql:='select * from (select rownum r,user_id from (select * from T_USER_INFO order by user_id ))
where r between '|| v_begin||' and '|| v_end;
--v_sql是执行SQL语句之后的一个结果集
--接下来需要使用游标读取结果集 open p_cursor
for v_sql ;
v_sql:='select count(*) from T_USER_INFO';
--执行v_sql,把值返回给v_rows
execute immediate v_sql into v_myrows;
if mod(v_myrows ,v_pagesize)=
then
--总页数=总记录数/一页有多少条数据,如果有余数,就+
v_mypage_count:=v_myrows/v_pagesize;
else v_mypage_count:=v_myrows/v_pagesize+;
end if;
--为什么不能关闭?因为它是隐式游标。可以自动关闭
--close p_cursor;
end;

其中游标需要创建一个包:

create or replace package testpackage
as
type test_cursor is ref cursor;
end testpackage ;
is ref cursor:相当于数据类型,不过是引用游标的数据类型。
这种变量通常用于存储过程和函数返回结果集时使用,因为PL/SQL不允许存储过程或函数直接返回结果集,但可以返回类型变量,于是引用游标的类型变量作为输出参数或返回值就应运而生了。 前台以及按钮的部分参考代码经过整理如下:
 <asp:Label ID="lblPage" runat="server" ></asp:Label>
<asp:LinkButton ID="lbnFirst" runat="Server" Text="首页" CommandName="Page"
CommandArgument="First" onclick="lbnFirst_Click" ></asp:LinkButton>
<asp:LinkButton ID="lbnPrev" runat="server" Text="上一页" CommandName="Page"
CommandArgument="Prev" onclick="lbnPrev_Click" ></asp:LinkButton>
<asp:LinkButton ID="lbnNext" runat="Server" Text="下一页" CommandName="Page"
CommandArgument="Next" onclick="lbnNext_Click" ></asp:LinkButton>
<asp:LinkButton ID="lbnLast" runat="Server" Text="尾页" CommandName="Page"
CommandArgument="Last" onclick="lbnLast_Click" ></asp:LinkButton>
到第<asp:TextBox runat="server" ID="inPageNum" Width=""></asp:TextBox>页
<asp:Button ID="Button1" CommandName="go" runat="server" Text="go"
onclick="Button1_Click" />
<br />
protected void lbnPrev_Click(object sender, EventArgs e)
{
pagecount = Convert.ToInt32(ViewState["page"]);
pagecount--;
ViewState["page"] = pagecount;
Bind("test", , pagecount, "", "");
lblPage.Text = "当前页:第" + pagecount + "页 共:" + info[] + "页";
if (pagecount == )
{
lbnFirst.Enabled = false;
lbnPrev.Enabled = false;
lbnNext.Enabled = true;
lbnLast.Enabled = true;
}
else
{
lbnFirst.Enabled = true;
lbnPrev.Enabled = true;
lbnNext.Enabled = true;
lbnLast.Enabled = true;
}
}
protected void lbnNext_Click(object sender, EventArgs e)
{
pagecount = Convert.ToInt32(ViewState["page"]);
pagecount++;
ViewState["page"] = pagecount;
if (pagecount == Convert.ToInt32(info[]))
{
lbnFirst.Enabled = true;
lbnPrev.Enabled = true;
lbnNext.Enabled = false;
lbnLast.Enabled = false;
}
else
{
lbnFirst.Enabled = true;
lbnPrev.Enabled = true;
lbnNext.Enabled = true;
lbnLast.Enabled = true;
}
Bind("test", , pagecount, "", "");
lblPage.Text = "当前页:第" + pagecount + "页 共:" + info[] + "页";
}
protected void lbnFirst_Click(object sender, EventArgs e)
{
pagecount = ;
ViewState["page"] = pagecount;
if (pagecount == )
{
lbnFirst.Enabled = false;
lbnPrev.Enabled = false;
lbnNext.Enabled = true;
lbnLast.Enabled = true;
}
else
{
lbnFirst.Enabled = true;
lbnPrev.Enabled = true;
lbnNext.Enabled = true;
lbnLast.Enabled = true;
}
Bind("test", , , "", "");
lblPage.Text = "当前页:第1页 共:" + info[] + "页";
}
protected void lbnLast_Click(object sender, EventArgs e)
{
pagecount = Convert.ToInt32(info[]);
ViewState["page"] = pagecount;
Bind("test", , pagecount, "", "");
lblPage.Text = "当前页:第" + pagecount + "页 共:" + info[] + "页";
if (pagecount == Convert.ToInt32(info[]))
{
lbnFirst.Enabled = true;
lbnPrev.Enabled = true;
lbnNext.Enabled = false;
lbnLast.Enabled = false;
}
}
protected void Button1_Click(object sender, EventArgs e)
{
if (!string.IsNullOrEmpty(inPageNum.Text.Trim()))
{
Regex regex = new Regex(@"^\d+$");//验证是否为数字
Match match = regex.Match(inPageNum.Text.Trim());
if (match.Success)
{
pagecount = Convert.ToInt32(info[]);
if (Convert.ToInt32(inPageNum.Text.Trim()) <= )
{
pagecount = ;
}
else if (Convert.ToInt32(inPageNum.Text.Trim()) < pagecount)
{
pagecount = Convert.ToInt32(inPageNum.Text.Trim());
}
Bind("test", , pagecount, "", "");
lblPage.Text = "当前页:第" + pagecount + "页 共:" + info[] + "页";
}
else
Response.Write("<script>alert('只能输入正整数')</script>");
}
}

核心部分:

 protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
this.GridView1.DataSource = QuickPage(, );
this.GridView1.DataBind();
}
} public DataTable QuickPage(int v_pagesize, int v_pagenow)
{
OracleConnection conn = new OracleConnection(ConfigurationManager.ConnectionStrings["ApplicationServices"].ConnectionString);
OracleCommand cmd = new OracleCommand();
cmd.Connection = conn;
cmd.CommandText = "proc_user_page";
cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.Add("v_pagesize", OracleType.Number, ); //一页有多少条数据
cmd.Parameters["v_pagesize"].Direction = ParameterDirection.Input;
cmd.Parameters["v_pagesize"].Value = v_pagesize; cmd.Parameters.Add("v_pagenow", OracleType.Number); //当前页码
cmd.Parameters["v_pagenow"].Direction = ParameterDirection.Input;
cmd.Parameters["v_pagenow"].Value = v_pagenow; cmd.Parameters.Add("v_myrows", OracleType.Number); //总数据数
cmd.Parameters["v_myrows"].Direction = ParameterDirection.Output; cmd.Parameters.Add("v_mypage_count", OracleType.Number); //总页数
cmd.Parameters["v_mypage_count"].Direction = ParameterDirection.Output;
cmd.Parameters["v_mypage_count"].Value = ; cmd.Parameters.Add("p_cursor", OracleType.Cursor); //返回的结果集
cmd.Parameters["p_cursor"].Direction = ParameterDirection.Output; DataSet Ds = new DataSet();
OracleDataAdapter adapter = new OracleDataAdapter(cmd);
adapter.Fill(Ds);
conn.Close(); //总记录数
// RecordCount = int.Parse(cmd.Parameters["v_myrows"].Value.ToString());
return Ds.Tables[];
}

oracle学习 八 分页(使用rownumber)(持续更)的更多相关文章

  1. Oracle学习(八):处理数据

    1.知识点:能够对比以下的录屏进行阅读 SQL> --SQL语句 SQL> --1. DML语句(Data Manipulation Language 数据操作语言): insert up ...

  2. mysql / sqlserver / oracle 常见数据库分页

    空闲时间里用着mysql学习开发测试平台和测试用具, 在公司里将可用的测试平台部署,将数据库换成sqlserver 巴望着能去用oracle的公司 mysql中的分页 limit是mysql的语法se ...

  3. Oracle学习笔记之四sp1,Oracle 11g的常用函数

    从Oracle学习笔记之四,SQL语言入门中摘出来的,独立成一章节 3.1 字符类函数 ASCII(c)和CHR(i)    分别用于返回一个字符的ASCII码和返回给定ASCII值所对应的字符. C ...

  4. Oracle学习线路

    出自huyangg的博客,地址是:oracle学习路线图 1.sql.pl/sql(网上有很多的视频,可以做一个简单的入手,然后看几本书,多做实验)    作为oracle的基本功,需要大家对sql和 ...

  5. Python Tutorial 学习(八)--Errors and Exceptions

    Python Tutorial 学习(八)--Errors and Exceptions恢复 Errors and Exceptions 错误与异常 此前,我们还没有开始着眼于错误信息.不过如果你是一 ...

  6. SVG 学习<八> SVG的路径——path(2)贝塞尔曲线命令、光滑贝塞尔曲线命令

    目录 SVG 学习<一>基础图形及线段 SVG 学习<二>进阶 SVG世界,视野,视窗 stroke属性 svg分组 SVG 学习<三>渐变 SVG 学习<四 ...

  7. Oracle学习笔记—数据字典和常用命令(转载)

    转载自: oracle常用数据字典和SQL语句总结 Oracle常用命令大全(很有用,做笔记) 一.Oracle数据字典 数据字典是Oracle存放有关数据库信息的地方,其用途是用来描述数据的.比如一 ...

  8. oracle学习 第二章 限制性查询和数据的排序 ——03

    这里.我们接着上一小节2.6留下的问题:假设要查询的字符串中含有"_"或"%".又该如何处理呢? 開始今天的学习. 2.7  怎样使用转义(escape)操作符 ...

  9. 6. oracle学习入门系列之六 模式

    oracle学习入门系列之六 模式 上篇咱们学习记录了ORACLE数据库中的数据库结构.内存结构和进程等.篇幅 蛤蟆感觉偏多了.这次要休整下,每次笔记不宜太多,不然与书籍有何差别. 我们要保证的是每次 ...

随机推荐

  1. Nginx安全配置

    nginx本身不能处理PHP,它只是个web服务器,当接收到请求后,如果是php请求,则发给php解释器处理,并把结果返回给客户端.nginx一般是把请求发fastcgi管理进程处理,fastcgi管 ...

  2. Git之 基本常用命令

    Git基本常用命令如下: mkdir:         XX (创建一个空目录 XX指目录名) pwd:          显示当前目录的路径. git init          把当前的目录变成可 ...

  3. Perfect smooth scrolling in UITableViews

    https://medium.com/ios-os-x-development/perfect-smooth-scrolling-in-uitableviews-fd609d5275a5 Diffic ...

  4. HDU2028 Lowest Common Multiple Plus

    解题思路:最近很忙,有点乱,感觉对不起自己的中国好队友.   好好调整,一切都不是问题,Just do it ! 代码: #include<cstdio> int gcd(int a, i ...

  5. ios import和@class的区别

    二者的区别在于: 1.import会包含这个类的所有信息,包括实体变量和方法,而@class只是告诉编译器,其后面声明的名称是类的名称,至于这些类是如何定义的,暂时不用考虑,后面会再告诉你. 2.在头 ...

  6. 关于iOS APP中网络层的设计

    在iOS开发中,请求网络数据,处理获得的数据是很常见的功能,但是很少有资料会讨论关于网络的处理应该放在MVC中得哪个层中. 我在网上Google了一番,记下了几个觉得比较不错的链接.现记录如下: ht ...

  7. iOS 开发者必不可少的 75 个工具,你都会了吗

    如果你去到一位熟练的木匠的工作室,你总是能发现他/她有一堆工具来完成不同的任务. 软件开发同样如此.你可以从软件开发者如何使用工具中看出他水准如何.有经验的开发者精于使用工具.对你目前所使用的工具不断 ...

  8. c#中const、static、readonly的区别

    1. const与readonly const ,其修饰的字段只能在自身声明时初始化. Readonly 是只读变量,属于运行时变量,可以在类初始化的时候改变它的值.该类型的字段,可以在声明或构造函数 ...

  9. Checked Exception与Runtime Exception 的区别

    Java里有个很重要的特色是Exception ,也就是说允许程序产生例外状况.而在学Java 的时候,我们也只知道Exception 的写法,却未必真能了解不同种类的Exception 的区别. 首 ...

  10. Quartz.net 2.0的使用说明

    Quartz.NET是一个开源的作业调度框架,是OpenSymphony 的 Quartz API的.NET移植,它用C#写成,可用于WinForm和ASP.NET应用中.它提供了巨大的灵活性而不牺牲 ...