oracle資料庫的表中的每一行資料都有一個唯一的標識符,或者稱為rowid,在oracle內部通常就是使用它來訪問資料的。rowid需要 10個位元組的儲存空間,並用18個字元來顯示。該值表明了該行在oracle資料庫中的物理具體位置。可以在一個查詢中使用rowid來表明查詢結果中包含該值。
儲存rowid需要10個位元組或者是80個位二進位位。這80個二進位位分別是:
1. 資料對象編號,表明此行所屬的資料庫物件的編號,每個資料對象在資料庫建立的時候都被唯一分配一個編號,並且此編號唯
一。資料對象編號佔用大約32位。
2. 對應檔案編號,表明該行所在檔案的編號,資料表空間的每一個檔案標號都是唯一的。檔案編號所佔用的位置是10位。
3. 塊編號,表明改行所在檔案的塊的位置塊編號需要22位。
4. 行編號,表明該行在行目錄中的具體位置行編號需要16位。
這樣加起來就是80位。
rowid使用64為的編碼方案來顯示,使用了‘A-Z’,’a-z’,'0-9′和’/'來表示。
例如:
select rowid,empid from scott.emp;
將會得到結果:
SQL> select rowid,empno from scott.emp;
ROWID EMPNO
—————— ———-
AAAHW7AABAAAMUiAAA 7369
AAAHW7AABAAAMUiAAB 7499
AAAHW7AABAAAMUiAAC 7521
AAAHW7AABAAAMUiAAD 7566
AAAHW7AABAAAMUiAAF 7698
AAAHW7AABAAAMUiAAG 7782
AAAHW7AABAAAMUiAAH 7788
AAAHW7AABAAAMUiAAI 7839
AAAHW7AABAAAMUiAAJ 7844
AAAHW7AABAAAMUiAAK 7876
AAAHW7AABAAAMUiAAL 7900
AAAHW7AABAAAMUiAAM 7902
AAAHW7AABAAAMUiAAN 7934
這裡的AAAHW7是資料庫物件編號,AAB是檔案標號,AAAMU是塊編號,最後四位(empno = 7369時為iAAA)是行編號。
使用describle(或簡寫為desc)命令查看錶結構時,輸出結果中是不能看到rowid這裡一列的,這是因為這一列只在資料庫內部使用,
row通常被稱為一個偽列。
在某些oracle資料庫操作的IDE(例如golden)中使用這些工具內建的資料編輯功能時,必須指定rowid列才能完成,例如如果想選擇
scott.emp的資料後進行手工修改,則必須使用
select rowid,t.* from scott.emp t;
而不能直接寫成
select * from emp;