数据库开发 - Oracle数据库的rownum为什么会出现这个问题?
本文介绍了数据库开发 - Oracle数据库的rownum为什么会出现这个问题?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
我有一个亲子关系的一张表parentage
:
SQL> select * from parentage;
FATHER CHILD
---------- ----------
David Cindy
David Tony
Tom Amy
Tom Bob
Tom Nick
为了练习rownum
关键字,我想输出前两行,如下语句可以正确运行:
SQL> select * from parentage where rownum<=2;
FATHER CHILD
---------- ----------
David Cindy
David Tomy
但是但我想输出第二行后面的所有行时,结果有异常:
SQL> select * from parentage where rownum>2;
未选定行
系统提示未选定行,为什么呢?明明表中有5行啊?
还有,我想输出第二行和第三行时:
SQL> select * from parentage where rownum between 2 and 3;
未选定行
SQL> select * from parentage where rownum>=2 and rownum<=3;
未选定行
这是为什么呢?
解决方案
rownum
是Oracle系统顺序分配给查询返回的行的编号,返回的第一行分配的是1,第二行是2,依此类推,这个伪字段可以用于限制查询返回的总行数,而且rownum
不能以任何表的名称作为前缀。
WHERE
子句的操作,是筛选数据,不满足的去掉。
又因为,rownum
是返回结果中的顺序计数,如果去掉一行,后面计数会全部-1
;
所以,如果rownum >= 2
,那么第一行就不满足,去掉之后原来rownum = 2
的行,现在成了rownum = 1
,所以这样一直到所有的行都被清完,仍然不会满足。
所以,当所有的行清完都没有满足条件时,就会报错:未选择行。
这篇关于数据库开发 - Oracle数据库的rownum为什么会出现这个问题?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文