oracle 各資料型別dump說明(三)

selectshen發表於2016-02-05

    這一節簡單介紹 rowid,long,clob,nclob,long raw,blob,bfile型別.

環境:
os:centos 6.6
db version:11.2.0.4

#rowid型別
#rowid,固定長度len=10,內部型別號Typ=69
#rowid的dump中,前4個位元組是object_id,接下來4個位元組是DBA(4個位元組32位,前10位是relative file,後22位是block),最後2個位元組是ROW
#rowid值是基於(A~Z a~z 0~9 + /)64進位制,長度18,前6個字元對應object,接下來9個字元對應DBA(前3個字元是relative file,後6個字元是block),最後3個字元是row
select rowid,dump(rowid),dump(rowid,16) from scott.emp where rownum<2;
/*
ROWID                DUMP(ROWID)                                DUMP(ROWID,16)
AAAVREAAEAAAACXAAA    Typ=69 Len=10: 0,1,84,68,1,0,0,151,0,0    Typ=69 Len=10: 0,1,54,44,1,0,0,97,0,0
*/
#透過dump的值換算object_id,relative file number,block number,row number
object_id:to_number('00015444','xxxxxxxx')=87108
DBA4個位元組32位,前10位是relative file,後22位是block,所以要將1,0,0,97轉換為2進位制,00000001,00000000,00000000,10010111,
所以relative file前10位0000000100=4,block後22位0000000000000010010111=151
row_number:to_number('0000','xxxx')=0
#可以看到dump的值換算後與實際的值相同
select rowid,dbms_rowid.rowid_object(rowid) object_id,dbms_rowid.rowid_relative_fno(rowid) relative_fno,
dbms_rowid.rowid_block_number(rowid) block_number,dbms_rowid.rowid_row_number(rowid) row_number
from scott.emp where rownum<2;
/*
ROWID                OBJECT_ID    RELATIVE_FNO    BLOCK_NUMBER    ROW_NUMBER
AAAVREAAEAAAACXAAA    87108        4                151                0
*/


#long型別
#long型別,可變長度,最大長度可達2G,儲存在行內,內部型別號Typ=8
#建議用lob型別去替換還有的long型別

#long raw型別
#long raw型別,可變長度,最大長度可達2G,內部型別號Typ=24
#建議用blob型別去替換還有的long raw型別

#clob型別
#clob型別用NLS_CHARACTERSET字符集,內部型別號Typ=112

#nclob型別
#nclob型別用NLS_NCHAR_CHARACTERSET字符集,內部型別號Typ=112

#blob型別
#blob型別用於儲存二進位制資料,內部型別號Typ=113

#bfile型別
#bfile型別用於儲存外部檔案的資訊,實際檔案大小依賴於作業系統,內部型別號Typ=114






來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28539951/viewspace-1986647/,如需轉載,請註明出處,否則將追究法律責任。

相關文章