dump函数以及数字类型浅析

来源:互联网 发布:怎么查网络延迟 编辑:程序博客网 时间:2024/06/05 05:25
--dump函数DUMP(expr[, return_fmt [, start_position [, length ] ] ])DUMP returns a VARCHAR2 value containing the data type code, length in bytes, and internal representation of expr. The returned result is always in the database character set.dump函数返回一个varchar2值,其中包括数据类型代码,字节长度,以及内部表示的字节书目return_fmt可以是8,10,16,17分别代表八进制,十进制,十六进制,单字符默认的情况下,返回值不包含字符集信息。如果要获取expr的字符集的名称,可以在上述的值加上1000。例如参数return_fmt为1008时,返回值将以八进制表示并包含expr对应的字符集名称。DUMP的输出格式SYS@PROD1> select dump(1) from dual;DUMP(1)------------------Typ=2 Len=2: 193,2  --类型,长度,符号/指数位,数据位CODE TYP----- ------------------------------1      VARCHAR22      NUMBER8      LONG12     DATE23     RAW24     LONG RAW69     ROWID96     CHAR112    CLOB113    BLOB114    BFILE180    TIMESTAMP181    TIMESTAMP WITH TIMEZONE182    INTERVAL YEAR TO MONTH183    INTERVAL DAY TO SECOND208    UROWID231    TIMESTAMP WITH LOCAL TIMEZONE  --类型符号/指数位:在存储上,Oracle对正数和负数分别进行存储转换:正数:加1存储(为了避免Null),在实际算法中就是要减1,必须>128负数:被101减,如果总长度小于21个字节,最后加一个102(是为了排序的需要),必须<128指数位换算:正数:指数=符号/指数位 - 193 (第一字节)负数:指数=62 - 第一字节数据位:每个数字位乘以100^(指数-N) (N是有效位数的顺序位,第一个有效位的N=0)example:SYS@PROD1> select dump(0) from dual;  128表示0DUMP(0)----------------Typ=2 Len=1: 128SYS@PROD1> select dump(98765432) from dual;DUMP(98765432)----------------------------Typ=2 Len=5: 196,99,77,55,33指数位196-193=3数据位计算(99-1)*100^3+(77-1)*100^2+(55-1)*100^1+(33-1)*100^0SYS@PROD1> select dump(-98765432) from dual;DUMP(-98765432)------------------------------Typ=2 Len=6: 59,3,25,47,69,102指数为62-59=3数据位计算(101-3)*100^3+(101-25)*100^2+(101-47)*100^1+(101-69)*100^0 || '102' 最后加上102为了排序--八进制十六进制的情况下SYS@PROD1> select dump(0,8) from dual;DUMP(0,8)----------------Typ=2 Len=1: 200SYS@PROD1> select dump(0,16) from dual;DUMP(0,16)---------------Typ=2 Len=1: 800200=1280x80=128  --计算方式与十进制相同SYS@PROD1> select dump(-432,16) from dual;DUMP(-432,16)------------------------Typ=2 Len=4: 3d,61,45,66指数位0x3d=61  62-61=1数据位计算 0x61=97 0x45=69 0x66=102 (101-97)*100^1+(101-69)*100^0 || '102'为什么负数要加上102进行排序?SYS@PROD1> select dump(-1.0001) from dual;DUMP(-1.0001)-------------------------------Typ=2 Len=5: 62,100,101,100,102SYS@PROD1> select dump(-1.000101) from dual;DUMP(-1.000101)-----------------------------------Typ=2 Len=6: 62,100,101,100,100,102-1.0001>-1.000101如果没有最后的102那么明显内部排序会62,100,101,100,100>62,100,101,100

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 汽车保养手册丢了怎么办 五号电池没电了怎么办 电脑打印时显示脱机怎么办 博新计划两年后怎么办 门帘粘扣老是掉怎么办 魔术粘贴带双面背胶不粘了怎么办 斜挎包包磨衣服怎么办 电脑ip被别人知道了怎么办 西乐葆不止痛了怎么办 家里鸽子多捣蛋的不行怎么办 联璧倒闭了理财钱怎么办 众筹平台雷了怎么办 App理财无法提现怎么办 喝咖啡喝的心慌怎么办 睾丸被用力捏破流血怎么办 足球大师球队声望过高怎么办 fm17买了好多球员怎么办 fm2018电脑适应了战术怎么办 家纺摆放跑色怎么办 买的t恤太小了怎么办? 汽车全包围脚垫翘边怎么办 针织衣服线跑了怎么办 老板跟老板娘吵架我应该怎么办 偷看老板娘洗澡被发现怎么办? 幽浮2人挂了怎么办 蜻蜓fm业务扣费怎么办 退出键退不到主页面怎么办 3d纯英文版怎么办 3d单位设置错了怎么办 翼龙贷款不还款怎么办 lol视角变低了怎么办 王者荣耀体验卡太多怎么办 文件打开后超出电脑屏幕怎么办 2400g玩lol跳fps怎么办 手机吃鸡延迟长怎么办 三星s8发热卡顿怎么办 逆水寒修为不够怎么办 诛仙摆摊金币被扣怎么办 诛仙手游宠物亲密度满了怎么办 诛仙包裹满了怎么办 感觉自己心理有问题 怎么办