問題:Oracle將ROWID和ROWNUM區(qū)別開了嗎?如果他們有區(qū)別,那么他們的區(qū)別是什么呢?
回答:正如你的地址唯一的標識了你的住處,一個Oracle的rowid唯一的標識了一條數(shù)據(jù)的物理地址。
rowid提供了你找到這一行數(shù)據(jù)所需要的所有信息,硬盤號,柱面,塊和所在塊上的偏移地址。
rownum是一個偽碼,一個你可以在SQL*Plus中引用的占位符。rownum可以用于書寫專業(yè)的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條數(shù)據(jù),你可以用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的區(qū)別是rownum是暫時的而rowid是永久的。
另外,rowid可以用來獲取一個數(shù)據(jù)行,rowid僅僅在單個sql語句內容里面有意義,一種參照取出的數(shù)據(jù)集的方式。
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
本文出自:億恩科技【1tcdy.com】
服務器租用/服務器托管中國五強!虛擬主機域名注冊頂級提供商!15年品質保障!--億恩科技[ENKJ.COM]
|