oracle 各数据类型dump说明(三)
-
selectshen
2016-02-05 10:28:03
-
Oracle
-
原创
这一节简单介绍 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