问题:Oracle将ROWID和ROWNUM区别开了吗?如果他们有区别,那么他们的区别是什么呢?
回答:正如你的地址唯一的标识了你的住处,一个Oracle的rowid唯一的标识了一条数据的物理地址。
rowid提供了你找到这一行数据所需要的所有信息,硬盘号,柱面,块和所在块上的偏移地址。
rownum是一个伪码,一个你可以在SQL*Plus中引用的占位符。rownum可以用于书写专业的sql语句和调整sql。-
在sql语句中使用rownum要注意:
正确:where rownum<n;
where rownum=1;
错误:where rownum>n;
where rownum=some_num>1
如果你非得这么写的话,这样才正确:
select * from(
select rownum rn,t.* from t
)
where rn=3;
例如,为了显示前5条数据,你可以用rownum作为过滤器:
SQL> select rownum,emp.empno,emp.ename,emp.job from emp
2 where rownum<=5;
ROWNUM EMPNO ENAME JOB
---------- ----- ---------- ---------
1 7369 SMITH CLERK
2 7499 ALLEN SALESMAN
3 7521 WARD SALESMAN
4 7566 JONES MANAGER
5 7654 MARTIN SALESMAN
总之,rowid和rownum的区别是rownum是暂时的而rowid是永久的。
另外,rowid可以用来获取一个数据行,rowid仅仅在单个sql语句内容里面有意义,一种参照取出的数据集的方式。
SQL> select rownum,rowid,empno,initcap(ename),initcap(job),sal from emp;
ROWNUM ROWID EMPNO INITCAP(ENAME) INITCAP(JOB) SAL
---------- ------------------ ----- -------------- ------------ ---------
1 AAAL+ZAAEAAAAAdAAA 7369 Smith Clerk 800.00
2 AAAL+ZAAEAAAAAdAAB 7499 Allen Salesman 1600.00
3 AAAL+ZAAEAAAAAdAAC 7521 Ward Salesman 1250.00
4 AAAL+ZAAEAAAAAdAAD 7566 Jones Manager 2975.00
5 AAAL+ZAAEAAAAAdAAE 7654 Martin Salesman 1250.00
6 AAAL+ZAAEAAAAAdAAF 7698 Blake Manager 2850.00
7 AAAL+ZAAEAAAAAdAAG 7782 Clark Manager 2450.00
8 AAAL+ZAAEAAAAAdAAH 7788 Scott Analyst 3000.00
9 AAAL+ZAAEAAAAAdAAI 7839 King President 5000.00
10 AAAL+ZAAEAAAAAdAAJ 7844 Turner Salesman 1500.00
11 AAAL+ZAAEAAAAAdAAK 7876 Adams Clerk 1100.00
12 AAAL+ZAAEAAAAAdAAL 7900 James Clerk 950.00
13 AAAL+ZAAEAAAAAdAAM 7902 Ford Analyst 3000.00
14 AAAL+ZAAEAAAAAdAAN 7934 Miller Clerk 1300.00
本文出自:亿恩科技【www.enkj.com】
服务器租用/服务器托管中国五强!虚拟主机域名注册顶级提供商!15年品质保障!--亿恩科技[ENKJ.COM]
|