任何一个实数都是可以表示为:S=A.B*10n(10的n次方)。则我们只是需要存储A.B(数据部分),n(最高表示位)即可。可是oracle 还存储了符号位(负数需要用到)。
create table test_number ( num_col number);
SQL> INSERT INTO TEST_NUMBER VALUES (0);
1 row inserted
SQL> INSERT INTO TEST_NUMBER VALUES (1);
1 row inserted
SQL> INSERT INTO TEST_NUMBER VALUES (2);
1 row inserted
SQL> INSERT INTO TEST_NUMBER VALUES (25);
1 row inserted
SQL> INSERT INTO TEST_NUMBER VALUES (123);
1 row inserted
SQL> INSERT INTO TEST_NUMBER VALUES (4100);
1 row inserted
SQL> INSERT INTO TEST_NUMBER VALUES (132004078);
1 row inserted
SQL> INSERT INTO TEST_NUMBER VALUES (2.01);
1 row inserted
SQL> INSERT INTO TEST_NUMBER VALUES (0.3);
1 row inserted
SQL> INSERT INTO TEST_NUMBER VALUES (0.00000125);
1 row inserted
SQL> INSERT INTO TEST_NUMBER VALUES (115.200003);
1 row inserted
SQL> INSERT INTO TEST_NUMBER VALUES (-1);
1 row inserted
SQL> INSERT INTO TEST_NUMBER VALUES (-2);
1 row inserted
SQL> INSERT INTO TEST_NUMBER VALUES (-20032);
1 row inserted
SQL> INSERT INTO TEST_NUMBER VALUES (-234.432);
1 row inserted
SQL> COMMIT;
Commit complete
SQL> SELECT NUM_COL, DUMP(NUM_COL, 16) D_NUMBER FROM TEST_NUMBER;
NUM_COL D_NUMBER
---------- --------------------------------------------------------------------------------
0 Typ=2 Len=1: 80
1 Typ=2 Len=2: c1,2
2 Typ=2 Len=2: c1,3
25 Typ=2 Len=2: c1,1a
123 Typ=2 Len=3: c2,2,18
4100 Typ=2 Len=2: c2,2a
132004078 Typ=2 Len=6: c5,2,21,1,29,4f
2.01 Typ=2 Len=3: c1,3,2
0.3 Typ=2 Len=2: c0,1f
1.25E-6 Typ=2 Len=3: be,2,1a
115.200003 Typ=2 Len=6: c2,2,10,15,1,4
-1 Typ=2 Len=3: 3e,64,66
-2 Typ=2 Len=3: 3e,63,66
-20032 Typ=2 Len=5: 3c,63,65,45,66
-234.432 Typ=2 Len=6: 3d,63,43,3a,51,66
15 rows selected
0 :没有数据部分,只存储了一个最高表示位。
1 :最高表示位 为 C1 。这是为什么那??
正数和负数具有相同的取值范围,所以,正数的最高表示位 > 80 ; 负数的最高表示位 < 80 。
但是正数部分又分为:大于1的数和小数,并且同样具有相同的取值范围。
计算公式如下:
SQL> select round( (to_number('ff','xx') - to_number('80','xx'))/2 + to_number('80','xx') ) + 1 from dual ;
ROUND((TO_NUMBER('FF','XX')-TO
------------------------------
193
SQL> select to_char('193','xx') from dual;
TO_CHAR('193','XX')
-------------------
c1
所以,个数的最高表示位为:C1。
则百位的最高表示位为C2,万位的最高表示位为C3,百分位的最高表示位为C0,万分位的最高表示位为C0,以此类推。
这又是为什么哪?
Oracle每个字节表示2位数,两位数之间相差的是100(即10的平方)。所以百位的最高表示位为C2.
但是oracle又为什么用0x2表示1哪???
对于这个2位数,出现的可能是0~99共100种可能,问题出在0这里。Oracle底层是用C语言实现的,我们知道二进制0在C语言中用作字符串终结符,Oracle为了避免这个问题,因此使用了0x1表示0,并依次类推,使用0x64表示99。
-1 Typ=2 Len=3: 3e,64,66 , 最高表示位 为什么 是 3e??
因为,负数和正数互为相反数。其最高表示位相加为 255 , 数据部分相加为:66 。所以-1的最高表示位为 3e。
SQL> select to_char('193','xx') from dual;
TO_CHAR('193','XX')
-------------------
c1
SQL> select to_number('3e','xx') from dual ;
TO_NUMBER('3E','XX')
--------------------
62
负数的数据部分用 65 到 2 进行表示。
分享到:
相关推荐
Oracle基本数据类型存储格式浅析(二)——数字类型 Oracle基本数据类型存储格式浅析(三)——日期类型 Oracle基本数据类型存储格式浅析(四)——ROWID类型 Oracle基本数据类型存储格式浅析(五)——RAW类型
7、LOB数据类型用于存储大型的,没有被结构化的数据,例如二进制文件,图片文件,LOB主要分为BLOB和CLOB,BLOB数据类型用于存储二进制对象:图像,音频,视频...CLOB数据类型用于存储字符格式的大型对象 8、ORACLE...
常用的数据库字段类型如下: 字段类型 中文说明 限制条件 其它说明 CHAR 固定长度字符串 ...数据类型 参数 描述 char(n) n=1 to 2000字节 定长字符串,n字节长,如果不指定长度,缺省为1个字节长(一个汉字为2字节)
ORACLE中的数据类型.doc 当你在数据库中创建数据表的时候,你需要定义表中所有字段的类型。ORACLE有许多种数据类型以满足你的需要。数据类型大约分为:character, number, date, LOB, 和RAW等类型。虽然ORACLE8i也...
Oracle中trunc()函数用法处理日期、数字类型数据
ORACLE函数大全 _______________________________________...将ROWID数据类型转换为字符类型 47.TO_CHAR(date,'format') SQL> select to_char(sysdate,'yyyy/mm/dd hh24:mi:ss') from dual; TO_CHAR(SYSDATE,'YY -----...
四:oracle表的管理(数据类型,表创建删除,数据CRUD操作) 9 oracle支持的数据类型 10 字符类 10 数字型 10 日期类型 10 建表 10 修改表 11 删除表 11 添加数据 11 修改数据 12 删除数据 12 savepoint a; --创建保存...
SQL> select instr('oracle traning','ra',1,2) instring from dual; INSTRING --------- 9 6.LENGTH 返回字符串的长度; SQL> select name,length(name),addr,length(addr),sal,length(to_char(sal)) from ....
oracle数据库id为uuid类型时自动生成id的工具类,不再依赖sequence自增长
其三、职业方向多:Oracle数据库管理方向、Oracle开发及系统架构方向、Oracle数据建模数据仓库等方向。 四、 如何学习 认真听课、多思考问题、多动手操作、有问题一定要问、多参与讨论、多帮组同学 五、 体系结构 ...
5.1.1 Oracle数据存储模型 140 5.1.2 段、区间、块和行 142 5.1.3 文件存储技术 144 5.2 创建和管理表空间 146 5.2.1 创建表空间 146 5.2.2 更改表空间 150 5.2.3 删除表空间 154 5.2.4 OMF 154 5.3 管理表...
1.3 Oracle Database 11g的基本数据类型 8 1.3.1 varchar2 8 1.3.2 数字 9 1.3.3 日期 9 1.3.4 时间戳 9 1.3.5 clob 10 1.3.6 blob 10 1.4 表 10 1.5 存储对象 11 1.5.1 视图 12 1.5.2 触发器 12 1.5.3 ...
ORACLE中科学计数法显示问题的解决,PLSQL显示超长数字的时候显示格式为科学计数法,此文档为解决方法
-- 首先,以超级管理员的身份登录oracle sqlplus sys/bjsxt as sysdba --然后,解除对scott用户的锁 alter user scott account unlock; --那么这个用户名就能使用了。 --(默认全局数据库名orcl) 1、...
请对应好关系,并保证excel数据正确,列如字段是数字类型,excel里是文字,当然会报错。 注意下标从0开始,注意输入法,每次执行前请先用解压文件打开jar,配置好对应关系,保存后再执行导入程序。 可根据需要,自行...
9.4.1 采用正确的数据类型 9.4.2 存储参数的正确设置 9.4.3 定期回收无用表空间 9.4.4 归档历史表空间 第10章 备份与恢复机制 10.1 备份与恢复的方法 10.2 使用数据泵进行逻辑备份和恢复 10.2.1 使用...
用CREATE TABLE语句建立表,在建立表的同时,必须定义表名,列,以及列的数据类型和大小。表名标识一个表,所以应尽可能在表名中描述表,oracle中表名或列名最长可以达30个字符串。表名应该以字母开始,可以在表名中...
3.1 Oracle常用数据类型 3.2创建表 3.3表的约束 4. 数据操作语言(DML) 4.1数据插入 4.2更新数据 4.3删除数据 4.4 TRUNCATE(DDL命令) 5. 操作符 5.1算术运算 5.2关系运算和逻辑运算 5.3字符串连接操作...