欢迎来到个人简历网!永久域名:gerenjianli.cn (个人简历全拼+cn)
当前位置:首页 > 范文大全 > 实用文>Oracle SQl语句使用rownum分页

Oracle SQl语句使用rownum分页

2023-09-22 07:58:39 收藏本文 下载本文

“小布雷德”通过精心收集,向本站投稿了10篇Oracle SQl语句使用rownum分页,下面就是小编给大家整理后的Oracle SQl语句使用rownum分页,希望您能喜欢!

Oracle SQl语句使用rownum分页

篇1:Oracle SQl语句使用rownum分页

ROWNUM:

说明:rownum是一个伪字段,标示查询字段的序号;

使用:select rownum 序号 from table

注意:

一、rownum 使用 '>' 号的问题

select * from emp where rownum>3、

查询不到结果

原因:rownum是在使用select查询的时候,自动生成的一串顺序号,

在每返回一条数据结果的时候,rownum就自动加一

当select 一条数据 rownum 为 1 不>3 记录被筛去

而下一条 数据 rownum 又是 1.。。。。。。。

解决:加一层嵌套

二、rownum 与 order by 同时使用会出现问题

rownum 是不支持order by 排序的。因为rownum是在排序之前取值的。

“在oracle中如果rownum与order by同在,是先rownum,然后再order by ”

oracle手册上说的:“即使select语句中一条简单的order by都可能会搞乱ROWNUM(因为ROWNUM是排序前分配给各行的)

如图所示:(RN 列顺序错误)

解决方式:

1、直接嵌套:(增加了两次查询,被嵌套的查询结果相当于视图,view中已经有rownum字段 所以可以使用 >号)

select t2.* from(--解决>号问题

select t1.*,ROWNUM rn from (--解决order by 的影响

select

k.bmxh,

k.byxxdm,

z.zgdm,

z.dqdm,

zd.zgmc,

zd.fz

from zgjf z

left join ks k on z.bmxh = k.bmxh

left join zgdm zd on z.zgdm = zd.zgdm

order by bmxh asc, z.zgdm asc

)t1

)t2where rn >2 and rn <10

2、使用:row_number over(order by COLUMN_NAME) 改变顺序,先执行了括号中的order by

select z.* ,row_number() over ( order by z.bmxh ) rn from zgjf z where rownum <10 and rownum >5

篇2:解决oracle使用rownum排序分页排序字段不唯一导致分页错误

解决oracle使用rownum排序分页排序字段不唯一导致分页错误

最近在写个列表组件ulynlist时候,测了下发现了个问题,在此记录下,

今天,列表组件调的时候,我试了下调下每个条数,每页一条,刚完成分页脚的插件时候,很高兴的点着,突然点到10来条时候发现怎么一直都是那条数据,还以为是前端插件写的有问题。后面再去看了下控制台的sql,截出sql去执行,发现还真是,从9到13都是同一个记录。

1SELECT * FROM(SELECT A.*, ROWNUM RN FROM(2select t.* from T_CAR_INFO t WHERE t.del='0' AND t.id = '003'3 ORDER BY CREATE_TIME desc) A WHERE ROWNUM <= 10)WHERE RN >= 10

正常情况来说,这个sql是很难发现有什么问题,在一般情况下,我们小流量系统这个CREATE_TIME经常都是唯一的,所以嘛,确实很难发现,

我用 CREATE_TIMEDESC排序,但是这个字段的值由于是数据库记录自己随便填,都是复制粘贴,结果很多记录都是一样的值。这个是典型的order by字段值不唯一造成分页记录混乱

怎么解决呢? 其实很简单,只要在排序的时候加一个值唯一的字段的就可以了。最好是id。改成如下发现一切正常了:

1SELECT * FROM(SELECT A.*, ROWNUM RN FROM(2select t.* from T_CAR_INFO t WHERE t.del='0' AND t.id = '003'3 ORDER BY CREATE_TIME desc,id) A WHERE ROWNUM <= 10)WHERE RN >= 10

篇3:Oracle关键字rownum的使用

Rownum是oracle提供的一个伪列,我们用的比较多的地方是在做分页的时候,

如果对rownum使用不当,往往会出现一些比较抓狂的现象。

假如有表结构如下:

tid tname ttype

5  T1  Q1

4  T4  Q1

3  T3  Q7

2  T2  Q2

1  T1  Q6

6  T6  Q1

7  T7  Q3

8  T8  Q3

9  T9  Q4

10  T10  Q5

执行语句:SELECT rownum,t.* FROM t_test t ORDER BY t.tid;

预期的结果应该是:

rownum tid tname ttype

1  1  T1  Q6

2  2  T2  Q2

3  3  T3  Q7

4  4  T4  Q1

5  5  T1  Q1

6  6  T6  Q1

7  7  T7  Q3

8  8  T8  Q3

9  9  T9  Q4

10  10  T10  Q5

而真实结果确实:

rownum tid tname ttype

5  1  T1  Q6

4  2  T2  Q2

3  3  T3  Q7

2  4  T4  Q1

1  5  T1  Q1

6  6  T6  Q1

7  7  T7  Q3

8  8  T8  Q3

9  9  T9  Q4

10  10  T10  Q5

产生的结果并没有按我们预期的先排序再生成rownum值,生成的rownum值是按照我们添加数据时的顺序,

产生这种结果可以有两种方式解决:

1、order by 字段建立主键约束

2、将rownum提到外层使用,语句:

SELECT ROWNUM,tt.* FROM (

SELECT * FROM t_test t

)tt

采用这两种方式之一,输出的结果就同我们预想的一样。

但是,在使用的过程中发现了另外一个问题,在对分组字句使用rownum时显示乱序。

sql语句:

SELECT * FROM (

SELECT MAX(t.tid),MAX(t.tname),t.ttype FROM t_test t GROUP BY t.ttype

) tt WHERE ROWNUM<3

执行结果并没有如预期显示子查询结果的前两行数据。

解决方法有两个:

1、分组内部先排序

SELECT * FROM (

SELECT MAX(t.tid),MAX(t.tname),t.ttype FROM t_test t GROUP BY t.ttype ORDER BY MAX(t.tid)

) tt WHERE ROWNUM<3

2、分组外多包层查询

SELECT ttt.* FROM (

SELECT ROWNUM row_num,tt.* FROM (

SELECT MAX(t.tid),MAX(t.tname),t.ttype FROM t_test t GROUP BY t.ttype

) tt

) ttt WHERE ROWNUM<3

篇4:DataGrid分页使用小结

默认分页模式:

选中“允许分页”;页大小;页导航设置,可以是上下方式,也可以用页码方式

格式里可以设置“页导航”按钮的对起方式;

private void datashow//绑定数据

{

string sql=“server=127.0.0.1;database=ltp;user id=sa;password=”;

SqlConnection mycon=new SqlConnection(sql);

string selsql=“select * from data”;

SqlDataAdapter da=new SqlDataAdapter(selsql,mycon);

DataSet ds=new DataSet();

da.Fill(ds,“data”);

this.DataGrid1.DataSource=ds.Tables[“data”];

this.DataGrid1.DataBind();

}

响应事件 PageIndexChanged()

this.DataGrid1.CurrentPageIndex=e.NewPageIndex;

datashow();

自定义导航控件的默认分页模式

当前页:this.Label1.Text=(this.DataGrid1.CurrentPageIndex+1).ToString();

因为CurrentPageIndex从0开始的,所以要+1

总页数:this.Label2.Text=this.DataGrid1.PageCount.ToString();

//第一页

this.DataGrid1.CurrentPageIndex=0;

//上一页

if(this.DataGrid1.CurrentPageIndex>0)

{

this.DataGrid1.CurrentPageIndex-=1;

this.datashow();

}

//下一页

if(this.DataGrid1.CurrentPageIndex<(this.DataGrid1.PageCount-1))

{

this.DataGrid1.CurrentPageIndex+=1;

this.datashow();

}

//最后一页

this.DataGrid1.CurrentPageIndex=this.DataGrid1.PageCount-1

最后再 datashow();

自定义数据分页--非常重要!(提高性能效率)

每次this.datashow();是提取全部数据,反而降低了效率,

正确的方法:

1,选中“允许分页”;“允许自定义分页”;页大小。

2,添加导航按钮,设置CommandName属性,previous,next

3,代码:

//记录每一页的开始索引

int startindex;

private void Page_Load(object sender, System.EventArgs e)

{

//自定义按钮事件

this.btnprevious.Click+=new System.EventHandler(this.NavigateToPage);

this.btnnext.Click+=new System.EventHandler(this.NavigateToPage);

//or nCommand=“NavigateToPage”

if(!IsPostBack)

{

startindex=0;

//得到数据源的记录数,并指派给DataGrid1

string constr=“server=127.0.0.1;database=ltp;user id=sa;password=”;

SqlConnection mycon=new SqlConnection(constr);

mycon.Open();

string sql=“select 总数=count(*) from data”;

SqlCommand com=new SqlCommand(sql,mycon);

SqlDataReader dr=com.ExecuteReader(CommandBehavior.SingleRow);

if(dr.Read())

this.DataGrid1.VirtualItemCount=(int)dr[“总数”];

dr.Close();

mycon.Close();

//

this.bindGrid(startindex,“previous”);

}

}

//自定义按钮事件

private void NavigateToPage(object sender,System.EventArgs e)

{

string pageinfo=((Button)sender).CommandName;

switch(pageinfo)

{

case “previous”:

if(this.DataGrid1.CurrentPageIndex>0)

{

this.DataGrid1.CurrentPageIndex-=1;

}

break;

case “next”:

if(this.DataGrid1.CurrentPageIndex<(this.DataGrid1.PageCount-1))

{

this.DataGrid1.CurrentPageIndex+=1;

}

break;

}

//得到开始的索引

startindex=this.DataGrid1.CurrentPageIndex*this.DataGrid1.PageSize;

//重新绑定

this.bindGrid(startindex,pageinfo);

}

//从数据源提取所需的数据记录--方法2(有int序号的表)

private void bindGrid2(int startindex,string pageinfo)

{

string constr=“server=127.0.0.1;database=ltp;user id=sa;password=”;

SqlConnection mycon=new SqlConnection(constr);

mycon.Open();

string sql=“select top 5 * from data where 序号>=”+startindex+“ order by 序号”;

SqlDataAdapter da=new SqlDataAdapter(sql,mycon);

DataSet ds=new DataSet();

da.Fill(ds,“data”);

this.DataGrid1.DataSource=ds.Tables[“data”];

this.DataGrid1.DataBind();

mycon.Close();

}

//从数据源提取所需的数据记录--方法1(按某字符串列排序的)

private void bindGrid(int startindex,string pageinfo)

{

string constr=“server=127.0.0.1;database=ltp;user id=sa;password=”;

SqlConnection mycon=new SqlConnection(constr);

mycon.Open();

SqlCommand com=new SqlCommand();

switch(pageinfo)

{

case “previous”:

string sql=“select top 5 * from data where 持股名称>=@id order by 持股名称”;

com=new SqlCommand(sql,mycon);

// com=new SqlCommand(“select top 5 * from data where 持股名称>=@id order by 持股名称”,mycon);

if(startindex==0)

{

com.Parameters.Add(“@id”,SqlDbType.NVarChar,10).Value=“”;

}

else

{

//把开始

com.Parameters.Add(“@id”,SqlDbType.NVarChar,10).Value=ViewState[(this.DataGrid1.CurrentPageIndex+1).ToString()];

// com.Parameters.Add(“@id”,SqlDbType.NVarChar,10).Value=this.DataGrid1.Items[0].Cells开始

com.Parameters.Add(“@id”,SqlDbType.NVarChar,10).Value=this.DataGrid1.Items[4].Cells[1].Text;

break;

}

SqlDataReader dr=com.ExecuteReader();

this.DataGrid1.DataSource=dr;

this.DataGrid1.DataBind();

dr.Close();

mycon.Close();

//重新得到当前开始第一行的列值

ViewState[(this.DataGrid1.CurrentPageIndex+1).ToString()]=this.DataGrid1.Items[0].Cells[1].Text;

}

篇5:word文档中分页符怎么使用

打开Word文档,将光标移动到目标位置。

打开“页面布局”选项卡。

在“页面设置”中单击“分隔符”按钮。

在“分隔符”列表中选择“分页符”选项。

篇6:word文档中分页符怎么使用

打开Word2010文档窗口,将光标移动到目标位置。

单击“插入”选项卡。

在“页”中单击“分页”按钮即可在光标位置插入分页符标记。

篇7:Sql Server和Oracle的sql语句分页

在sql以上的版本中可以用如下代码:

[sql]

--@PageNo 是页码(要查询第几页),@pageSize是页容量(即每页显示多少条数据)

[sql]

select * from (

select row_number over(order by id) rn,* from Test)

tb where rn >(@PageNo-1)*@pageSize and rn <=@PageNo*@pageSize

以上只是简单的分页,如果还有其他逻辑,比如排序 可以在over中加入排序的方法 test表 也可以换成子查询等其他逻辑

在oracle中,可以使用如下语句

[sql]

select t2.*

from (select rownum r,t1.* from test t1 where rownum<=:PageNo*:pageSize) t2

where t2.r>(:PageNo-1)*:pageSize

参数由@变成了‘:’意义都是相同的! 只需在查询时传入需要的参数即可.

篇8:使用 PHP 读取(TXT)文件 并分页显示

[PHP]代码

view source

print?

01

02session_start();

03if (empty($page)) {$page=1;}

04if (isset($_GET['page'])==TRUE) {$page=$_GET['page']; }

05?>

06

07

08

09www.qqview.com-Read Result

10

16

17

18

19

20

21

22if($page){

23$counter=file_get_contents(“example.txt”); //-------read the file into a string.-------

24$length=strlen($counter);

25$page_count=ceil($length/5000);

26

27function msubstr($str,$start,$len){

28$strlength=$start+$len;

29$tmpstr=“”;

30for($i=0;$i<$strlength;$i++) {

31if(ord(substr($str,$i,1))==0x0a) {

32$tmpstr.='

';

33}

34if(ord(substr($str,$i,1))>0xa0) {

35$tmpstr.=substr($str,$i,2);

36$i++;

37}

38else{

39$tmpstr.=substr($str,$i,1); }

40}

41return $tmpstr;

42}

43//--------------------------截取中文字符串--------------------------

篇9:如何对WORD跨页表格使用分页符

朋友托我为他的WORD文档设置页眉页脚,这篇WORD文档不是普通的正文,而是文字与表格混排的文档,我觉得没有什么大问题,就帮他做。

可是在表格的地方遇到了麻烦事,按他的要求,表格的第一页是没有页眉页脚的,而他文章里的所有表格都是跨页的,最少的也是跨了两页,

在使用WORD分页符时怎么也分不了。而文字部分则没的这种问题。后来最终弄清了如何在表格中使用分页符。

当WORD中一个表格需要跨页的时候,将表格拆分成两栏,在表格中的文字部分单击鼠标右键,选择拆分单元格,选择一列两栏,确定后会在已有的表格下面生成新的一栏,然后在下面那栏的第一个回车处使用分页符,使之与上面的表格分离并自动分到下一页去,然后再向表格中粘贴文字。再分页以便设置页眉页脚。

篇10:HibernateHQL语句使用总结

1. 查询整个映射对象所有字段

//直接from查询出来的是一个映射对象,即:查询整个映射对象所有字段 String hql = “from Users”; Query query = session.createQuery(hql); Listusers = query.list();for(Users user : users){ System.out.println(user.getName() + “ : ” + user.getPasswd() + “ : ” + user.getId()); } 输出结果为: name1 : password1 : 1 name2 : password2 : 2 name3 : password3 : 3

2.查询字段

//查询其中几个字段 String hql = “ select name,passwd from Users”; Query query = session.createQuery(hql); //默认查询出来的list里存放的是一个Object数组 Listlist = query.list(); for(Object[] object : list){ String name = (String)object[0]; String passwd = (String)object[1]; System.out.println(name + “ : ” + passwd); } 输出结果为:name1 : password1 name2 : password2 name3 : password3

3.修改默认查询结果(query.list())不以Object[]数组形式返回,以List形式返回

//查询其中几个字段,添加new list(),注意list里的l是小写的,

HibernateHQL语句使用总结

。也不需要导入包,这样通过query.list()出来的list里存放的不再是默认的Object数组了,而是List集合了 String hql = “ select new list(name,passwd) from Users”; Query query = session.createQuery(hql); //默认查询出来的list里存放的是一个Object数组,但是在这里list里存放的不再是默认的Object数组了,而是List集合了 List list = query.list(); for(List user : list){ String name = (String)user.get(0); String passwd = (String)user.get(1); System.out.println(name + “ : ”+ passwd); } /** 输出结果为: name1 : password1 name2 : password2 name3 : password3 */

4.修改默认查询结果(query.list())不以Object[]数组形式返回,以Map形式返回

//查询其中几个字段,添加new map(),注意map里的m是小写的。也不需要导入包,这样通过query.list()出来的list里存放的不再是默认的Object数组了,而是map集合了 String hql = “ select new map(name,passwd) from Users”; Query query = session.createQuery(hql); //默认查询出来的list里存放的是一个Object数组,但是在这里list里存放的不再是默认的Object数组了,而是Map集合了 List

list = query.list(); for(Map user : list){ //一条记录里所有的字段值都是map里的一个元素,key是字符串0,1,2,3....,value是字段值 //如果将hql改为:String hql = “ select new map(name as username,passwd as password) from Users”;,那么key将不是字符串0,1,2...了,而是“username”,“password”了 String name = (String)user.get(“0”);//get(“0”);是get(key),注意:0,1,2...是字符串,而不是整形 String passwd = (String)user.get(“1”);System.out.println(name + “ : ” + passwd); } /** 输出结果为: name1 : password1 name2 : password2 name3 : password3 */    5.修改默认查询结果(query.list())不以Object[]数组形式返回,以自定义类型返回    6.条件查询//条件查询,参数索引值从0开始,索引位置,电脑资料通过setString,setParameter设置参数 String hql =“from Users where name=? and passwd=?”; Query query = session.createQuery(hql); //第1种方式 // query.setString(0, “name1”); // query.setString(1, “password1”); //第2种方式query.setParameter(0, “name1”,Hibernate.STRING); query.setParameter(1,“password1”,Hibernate.STRING); Listlist = query.list(); for(Users users : list){System.out.println(users.getId()); }//条件查询,自定义索引名(参数名):username,:password.通过setString,setParameter设置参数String hql = “from Users where name=:username and passwd=:password”; Query query = session.createQuery(hql); //第1种方式 // query.setString(“username”, “name1”); // query.setString(“password”, “password1”); //第2种方式,第3个参数确定类型query.setParameter(“username”, “name1”,Hibernate.STRING); query.setParameter(“password”,“password1”,Hibernate.STRING); Listlist = query.list(); for(Users users : list){System.out.println(users.getId()); }//条件查询,通过setProperties设置参数 String hql = “from Users where name=:username and passwd=:password”; Query query = session.createQuery(hql); //MyUser类的2个属性必须和:username和:password对应 MyUser myUser = new MyUser(“name1”,“password1”);query.setProperties(myUser); Listlist = query.list(); for(Users users : list){System.out.println(users.getId()); }

7.update 数据

执行SQL语句(为什么要用SQL语句,我想是为了执行某些复杂的SQL语句吧)

String sql=“update Table set field = 'test'” Session session = HibernateSessionFactory.getSession(); session.createSQLQuery(sql).executeUpdate();ts.commit();

执行HQL语句

String hql=“update Table set field = 'test'”Session session = HiberanteSessionFactory.getSession(); Transaction ts = session.beginTransaction(); Query query = session.createQuery(hql); query.executeUpdate();ts.commit();

【Oracle SQl语句使用rownum分页】相关文章:

1.简历:使用商业语句

2.ThinkPHP 分页函数的改造

3.语句

4.一个将数据分页的存储过程数据库教程

5.电教室使用规章制度

6.使用背水一战造句

7.场所使用证明

8.使用根深叶茂造句

9.土地使用协议书

10.微波炉使用注意事项

下载word文档
《Oracle SQl语句使用rownum分页.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度: 评级1星 评级2星 评级3星 评级4星 评级5星
点击下载文档

文档为doc格式

  • 返回顶部