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