问题:Oracle将ROWID和ROWNUM区别开了吗?如果他们有区别,那么他们的区别是什么呢?
回答:正如你的地址唯一的标识了你的住处,一个oracle的rowid唯一的标识了一条数据的物理地址。
rowid提供了你找到这一行数据所需要的所有信息,硬盘号,柱面,块和所在块上的偏移地址。
rownum是一个伪码,一个你可以在SQL*Plus中引用的占位符。rownum可以用于书写专业的sql语句和调整sql。
在sql语句中使用rownum要注意:
正确:where rownumn;
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 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