zoukankan      html  css  js  c++  java
  • 【功能】返回数据类型、字节长度和在内部的存储位置.DUMP(w[,x[,y[,z]]])



      1 DUMP(w[,x[,y[,z]]])
      2 【功能】返回数据类型、字节长度和在内部的存储位置.
      3 【参数】
      4  w为各种类型的字符串(如字符型、数值型、日期型……)
      5  x为返回位置用什么方式表达,可为:8,10,16或17,分别表示:8/10/16进制和字符型,默认为10。
      6  y和z决定了内部参数位置
      7 
      8 
      9 【返回】类型 <[长度]>,符号/指数位 [数字1,数字2,数字3,......,数字20]
     10 如:Typ=2 Len=7: 60,89,67,45,23,11,102
     11 
     12 SELECT DUMP('ABC',1016) FROM dual;
     13 返回结果为:Typ=96 Len=3 CharacterSet=ZHS16GBK: 41,42,43
     14 
     15   代码 数据类型
     16   0 对应 VARCHAR2
     17   1 对应 NUMBER
     18   8 对应 LONG
     19   12 对应 DATE
     20   23 对应 RAW
     21   24 对应 LONG RAW
     22   69 对应 ROWID
     23   96 对应 CHAR
     24   106 对应 MSSLABEL
     25 
     26 
     27 
     28 各位的含义如下:
     29 
     30 1.类型: Number型,Type=2 (类型代码可以从Oracle的文档上查到)
     31 2.长度:指存储的字节数
     32 3.符号/指数位
     33 在存储上,Oracle对正数和负数分别进行存储转换:
     34 正数:加1存储(为了避免Null)
     35 负数:被101减,如果总长度小于21个字节,最后加一个102(是为了排序的需要)
     36 
     37 指数位换算:
     38 正数:指数=符号/指数位 - 193 (最高位为1是代表正数)
     39 负数:指数=62 - 第一字节
     40 
     41 4.从<数字1>开始是有效的数据位
     42 
     43 从<数字1>开始是最高有效位,所存储的数值计算方法为:
     44 
     45 将下面计算的结果加起来:
     46 
     47 每个<数字位>乘以100^(指数-N) (N是有效位数的顺序位,第一个有效位的N=0)
     48 
     49 5、举例说明
     50 
     51 SQL> select dump(123456.789) from dual;
     52 返回:Typ=2 Len=6: 195,13,35,57,79,91
     53 
     54 <指数>:    195 - 193 = 2
     55 <数字1>     13 - 1     = 12 *100^(2-0) 120000
     56 <数字2>     35 - 1     = 34 *100^(2-1) 3400
     57 <数字3>     57 - 1     = 56 *100^(2-2) 56
     58 <数字4>     79 - 1     = 78 *100^(2-3) .78
     59 <数字5>     91 - 1     = 90 *100^(2-4) .009
     60                              123456.789
     61 
     62 SQL> select dump(-123456.789) from dual;
     63 返回:Typ=2 Len=7: 60,89,67,45,23,11,102
     64 算法:
     65 <指数>  62 - 60 = 2(最高位是0,代表为负数)
     66 <数字1> 101 - 89 = 12 *100^(2-0) 120000
     67 <数字2> 101 - 67 = 34 *100^(2-1) 3400
     68 <数字3> 101 - 45 = 56 *100^(2-2) 56
     69 <数字4> 101 - 23 = 78 *100^(2-3) .78
     70 <数字5> 101 - 11 = 90 *100^(2-4) .009
     71                                123456.789(-)
     72 
     73 现在再考虑一下为什么在最后加102是为了排序的需要,-123456.789在数据库中实际存储为
     74 
     75 60,89,67,45,23,11
     76 
     77 而-123456.78901在数据库中实际存储为
     78 
     79 60,89,67,45,23,11,91
     80 
     81 可见,如果不在最后加上102,在排序时会出现-123456.789<-123456.78901的情况。
     82 
     83 
  • 相关阅读:
    微软软件下载
    FTP主动连接与被动连接
    Linux下grep显示前后几行信息
    cacti 安装过程中“ERROR: 您的MySQL TimeZone 数据库未被填充. 请在继续之前填入此数据库.”
    Cacti安装详细步骤
    Linux 踢掉其他终端用户
    迁移设备存储报的错误及解决方式
    sql_mode :(STRICT_TRANS_TABLES与STRICT_ALL_TABLES 区别)
    Nginx日志按日期切割详解(按天切割)
    git pull冲突:commit your changes or stash them before you can merge.
  • 原文地址:https://www.cnblogs.com/ios9/p/7451037.html
Copyright © 2011-2022 走看看