dump blocktrace文件部分内容:
Itl Xid Uba Flag Lck Scn/Fsc 0x01 0x0001.026.0000727c 0x00800696.4411.10 C--- 0 scn 0x0000.05d44076 0x02 0x0006.028.0000729f 0x00802b2a.3eac.2d ---- 3 fsc 0x0000.00000000 … tab 0, row 5, @0x1d11 tl: 40 fb: --H-FL-- lb: 0x2 cc: 8 col 0: [ 3] c2 4d 63 col 1: [ 5] 42 4c 41 4b 45 col 2: [ 7] 4d 41 4e 41 47 45 52 col 3: [ 3] c2 4f 28 col 4: [ 7] 77 b5 05 01 01 01 01 col 5: [ 2] c2 29 col 6: *NULL* col 7: [ 2] c1 1f tab 0, row 6, @0x1d39 tl: 40 fb: --H-FL-- lb: 0x2 cc: 8 col 0: [ 3] c2 4e 53 col 1: [ 5] 43 4c 41 52 4b col 2: [ 7] 4d 41 4e 41 47 45 52 col 3: [ 3] c2 4f 28 col 4: [ 7] 77 b5 06 09 01 01 01 col 5: [ 2] c2 29 col 6: *NULL* col 7: [ 2] c1 0b tab 0, row 7, @0x1e4c tl: 40 fb: --H-FL-- lb: 0x2 cc: 8 col 0: [ 3] c2 4e 59 col 1: [ 5] 53 43 4f 54 54 col 2: [ 7] 41 4e 41 4c 59 53 54 col 3: [ 3] c2 4c 43
其中的col 5: [ 2] c2 29以16进制存储,具体代表什么内容?
SQL> select utl_raw.cast_to_number('c229') from dual; UTL_RAW.CAST_TO_NUMBER('C229') ------------------------------ 4000
16进制转10进制:
utl_raw.cast_to_number
10进制转16进制:
utl_raw.cast_from_number SQL> select utl_raw.cast_from_number('4000') from dual; UTL_RAW.CAST_FROM_NUMBER('4000') ------------------------------ C229
数据类型的转换及存储:
SQL>select dump(4000) from dual; DUMP(4000) ---------------------------- Typ=2 Len=2:194,41
dump的输出格式:
类型<[长度]>,符号/指数位 [数字1,数字2,... 数字20]
含义:
类型:typ=2,代表number型
长度:存储的字节数
符号、指数位
对正负数的存储:
正数:加1存储(避免null);
负数:被101减,如果长度小于21字节,需要在最后加102(为了排序的需要)
指数位换算:
正数:指数=符号/指数位-193(最高位为1代表正数)
负数:指数=62-第一字节
存储数据的计算方法:Σ数字位*100^(指数-N),N指有效位数的顺序位,第一个有效数N=0.
如:
Typ=
2
Len=
2
:
194
,
41
指数=194-193=1
数字1=41-1=40*100^(1-0)=4000
摘自eygle《深入浅出oracle》