正数的解读数字为正数,第一个字节必须大于128(0×80)
第一步:指数=第一个字节-193
第二步:每一个其他的数字都减1
第三步:从基于100的指数转换到基于10的指数每一个结果通过100^(EXP-N)其中EXP是第一步中得到的指数N是数字的位置的顺序号(最高位的N=0)
第四步:将所有的值相加
负数的解读数字为负数,第一个字节必须小于128(0×80)
第一步:指数=62-first bytes
第二步:每一个数字被101减
第三步:将基数从100转换为10每一个数字乘以100^(EXP-N)这里EXP是第一步中的指数值N是数字位置顺序值(最高位为0)
第四步:确认尾巴上的102已经抛弃第五步:将所有的值相加如果数字标示超过21字节,则最后的102不被要求,oracle不会使用22字节来标示的。oracle将自己会考虑所有的字节。
long最大2GB大小的变长字符串在数据库字符集和用户session字符集间自动转换(基于参数NLS_LANG的设置)
永远是内嵌存储内部代码:8推荐将long类型转换为lob类型long列在表中是内嵌存储的。因此最好是最后一个列(性能的因素)。但是用户还是可以在任何顺序指定long列的,但是oracle会自己在数据字典中组织数据,将long放到最后。因此在表COL$中,COL#是用户创的列的顺序,SEGCOL#是真实的存储顺序。
如果用户在创建了表以后,通过alert命令给表增加了列,则long列不会被存储在最后。oracle会自己算出重排数据的代价,并且将决定权交给dba.
RAW和long raw二进制数据长度浮动,最多2000字节内部代码:23 long raw raw二进制数据浮动长度,最多2GB内部代码24在用户字符集和数据库字符集之间无法进行自动转换。
推荐使用lob列来代替long raw列long raw列数据也是内嵌存储在表中的raw和long raw是二进制内容,因此不需要转换为可打印的例如,v$sqlarea是一个含有raw类型的列ADDRESS,注意,在sql层不会进行数据内容转换的。
date date存储是固定的7个字节,世纪,年,月,日时分秒各占一个字节开始的两个字节存储世纪和年的基数是100接下来的两个字节是月和年(没有加任何数字的)
最后三个字节是时(24小时制),分,秒(分别都加1了)
如果是作块的dump,要记得将数字从16进制转换为10进制。
有另外一个时间类型,内部代码13,有8个字节并且是被SYSDATE使用的
datetimes和intervals在816中引入的新的数据类型这些类型被称之为datatimes和intervals datetime数据类型提供一个点的时间的信息一个intereval行提供的是两个不同点的时间之间的信息816中新的datetime类型:TIME TIME WITH TIME ZONE TIMESTAMP TIMESTAMP WITH TIME ZONE TIMESTAMP WITH LOCAL TIME ZONE 816中新的interval类型:INTERVAL YEAR TO MONTH INTERVAL DAY TO SECOND这些新的数据类型在816中并没有正式发布,因此是不被支持的,默认也是不可见的,向使用他们,必须设置事件:event=“10406 trace name context forever”
event=“10407 trace name context forever”
time该类型提供关于小时,分钟以及秒的9个数字精度的事件信息固定长度是7字节数组前三个字节是HH24,MI,SS(这三个都加过1的)
后四个字节是秒使用的(乘以10^9然后以16进制存储)
责任编辑:小草