对于 Oracle 的 rownum问题,很多资料都说不支持>,>=,=,between...and,只能用以上符号(<、<=、!=),并非说用>,......
ROWNUM ID AGE NAME
------- ------ --- ------
3 200002 22 BBB
4 200003 22 CCC
实例
需求:假设不知道数据库里的数据规则和数量,把所有的student数据打印到终端。
解:
rownum是伪列,在表里没有,数据库先是执行from
book遍历book表,如果没有where条件过滤,则先做成一个结果集,然后再看select后面的条件挑出合适的字段形成最后的结果集,如果有
where条件,则不符合条件的就会从第一个结果集中删除,后面的数据继续加进来判断,所以如果直接写rownum=2,或者rownum>10这
样的语句就查不出数据,但是可以用一个子查询来解决这个问题,对于select rownum,id from book where
rownum=2;是查补出数据来的。
declare
v_number binary_integer;
v_student student%rowtype;
begin
select count(*) into v_number from student;
for i in 1..v_number loop
select id,name,age into v_student from(select rownum rn,id,name,age from student)where rn=i;
dbms_output.put_line('id: '||v_student.id||' name:'||v_student.name);
end loop;
end;
rownum是对结果集加的一个伪列,即先查到结果集之后再加上去的一个列 (强调:先要有结果集)。简单的说 rownum 是对符合条件结果的序列号。它总是从1开始排起的。所以你选出的结果不可能没有1,而有其他大于1的值。
原帖地址:http://www.sunxin.org/article/242.html
5/5 首页 上一页 3 4 5 |