【正文】
NO IDselect * from(select rownum no ,id,name from student) where no2。查找第二行以后的記錄可使用以下的子查詢方法來解決。select rownum,id,name from student where rownum=1。但是想找到學(xué)生表中第二條學(xué)生的信息,使用rownum=2結(jié)果查不到數(shù)據(jù)。 對于rownum來說它是oracle系統(tǒng)順序分配為從查詢返回的行的編號,返回的第一行分配的是1,第二行是2,依此類推,這個偽字段可以用于限制查詢返回的總行數(shù),且rownum不能以任何表的名稱作為前綴。rowid 相對于表來說又像表中的一般列,所以以 rowid 為條件就不會有 rownum那些情況發(fā)生。另外:rowid 與 rownum 雖都被稱為偽列,但它們的存在方式是不一樣的,rowid 可以說是物理存在的,表示記錄在表空間中的唯一位置ID,在DB中唯一。但如果就是想要用 rownum 10 這種條件的話話就要用子查詢,把 rownum 先生成,然后對他進行查詢。 原因同上一樣,因為 rownum 總是從 1 開始。3. 為什么 between 1 and 10 或者 between 0 and 10 能查到結(jié)果,而用 between 2 and 10 卻得不到結(jié)果?2. 為什么 rownum 1 時查不到一條記錄,而 rownum 0 或 rownum =1 卻總顯示所有的記錄? 因為是在查詢到結(jié)果集后,顯示完第 9 條記錄后,之后的記錄也都是 != 10,或者 =10,所以只顯示前面9條記錄。如果你用,=,=,between...and這些條件,因為從緩沖區(qū)或數(shù)據(jù)文件中得到的第一條記錄的rownum為1,則被刪除,接著取下條,可是它的rownum還是1,又被刪除,依次類推,便沒有了數(shù)據(jù)?;蛘呖梢赃@樣理解:ROWNUM是一個序列,是oracle數(shù)據(jù)庫從數(shù)據(jù)文件或緩沖區(qū)中讀取數(shù)據(jù)的順序。所以你選出的結(jié)果不可能沒有1,而有其他大于1的值。簡單的說 rownum 是對符合條件結(jié)果的序列號。二、實例:假設(shè)某個表 t1(c1) 有 20 條記錄,如果用 select rownum,c1 from t1 where rownum 10, 只要是用小于號,查出來的結(jié)果很容易地與一般理解在概念上能達成一致,應(yīng)該不會有任何疑問的。(2).適用于有少量重復(fù)記錄的情況(注意,對于有大量重復(fù)記錄的情況,用以下語句效率會很低):Delete from dupCityInfo a where rowid(select max(rowid) from dupCityInfo where id= )。方法2:Delete from dupCityInfo Where ROWID Not In(每個組中最小的ROWIDSelect Min(ROWID) From dupCityInfo Group By id)。:方法2: Select * From dupCityInfo Where ROWID Not In( 每個組中最小的ROWID(或者最大的ROWID)Select Min(ROWID) From dupCityInfo Group By id)。(為以下演示)插入重復(fù)記錄創(chuàng)建一個表create table dupCityInfoas select * from cityInfo制造重復(fù)數(shù)據(jù) insert into dupCityInfo select * from cityInfo 2. 查找重復(fù)記錄的幾種方法: Create table empa as select * from emp。 四、RowID的應(yīng)用1。 22bit 的 block, 32bit的 data_object_id, BBBBBB 塊編號 ROWID 的格式如下: 數(shù)據(jù)對象編號4,作為表中唯一標識。 往往花上很多時間去查錯,最后查出來既然是update時帶的rowid并非此表的rowid,所以在發(fā)現(xiàn)很多次的錯誤時,重視rowid起來了,開發(fā)中一定要注意rowid的匹配2,能以最快的方式訪問表中的一行。但往往我們在開發(fā)過程中,由于連接的表很多,再加上程序的復(fù)制,有時忽略了rowid對應(yīng)的是那一個表中rowid,所以有時過程出錯,所以oracle ERP中大部份的視圖都會加入rowid這個字段。未存儲在表中,可以從表中查詢,但不支持插入,更新,刪除它們的值。yyyymmdd HH24:mm:ss39。一般用于驗證函數(shù)。 ROWID 記錄的唯一標識 CURRVAL AND NEXTVAL 使用序列號的保留字 oracle系統(tǒng)為了實現(xiàn)完整的關(guān)系數(shù)據(jù)庫功能,系統(tǒng)專門提供了一組成為偽列(Pseudocolumn)的數(shù)據(jù)庫列,這些列不是在建立對象時由我們完成的,而是在我們建立時由Oracle完成的。oracle的偽列以及偽表 Oracle目前有以下偽列:一、 偽列: LEVEL 查詢數(shù)據(jù)所對應(yīng)的層級 ROWNUM 限制查詢結(jié)果集的數(shù)量二、偽表DUAL 表該表主要目的是為了保證在使用SELECT語句中的語句的完整性而提供的。例如:select sysdate,to_char(sysdate,39。) from dualOracle偽列RowID一、什么是偽列RowID?首先是一種數(shù)據(jù)類型,唯一標識一條記錄物理位置的一個id,基于64位編碼的18個字符顯示。二、RowID的用途1,在開發(fā)中使用頻率應(yīng)該是挺多的,特別在一些update語句中使用更加頻繁。 在一些cursor定義時也少不了加入rowid。3,能顯示表的行是如何存儲的。三,RowID的組成rowid確定了每條記錄是在Oracle中的哪一個數(shù)據(jù)對象,數(shù)據(jù)文件、塊、行上。 文件編號 行編號 OOOOOO FFF RRR 由 data_object_id + rfile + block + row 組成,占用10個bytes的空間, 10 bit 的 rfile, 16 bit 的 row. 所以每個表空間不能超過1023個 數(shù)據(jù)文件。準備數(shù)據(jù): 當試圖對庫表中的某一列或幾列創(chuàng)建唯一索引時, 系統(tǒng)提示 ORA01452 :不能創(chuàng)建唯一索引,發(fā)現(xiàn)重復(fù)記錄。 /*conn scott/tiger方法1:select id,count(*) from dupCityInfo group by id having count(*) 1。select * from dupCityInfo a where rowid(select max(rowid) from dupCityInfo where id= )。 (1).適用于有大量重復(fù)記錄的情況(列上建有索引的時候,用以下語句效率會很高):方法1: Delete from dupCityInfo Where id In ( Select id From dupCityInfo Group By id Having count(*) 1 ) And ROWID Not In (Select Min(ROWID) From dupCityInfo Group By id Having Count(*) 1)。Oracle偽列RowNum一、概述:rownum從1開始;rownum按照記錄插入時的順序給記錄排序,所以有orde