首页 新闻 会员 周边

请问一个关于oracle的问题..怎么会是这样的结果 ?

0
悬赏园豆:10 [待解决问题]

我想查表的结构和注释,这样写的SQL

 

select
    A.column_name 字段名,A.data_type 数据类型,A.data_length 长度,A.DATA_PRECISION 整数位,
    A.Data_Scale 小数位,A.nullable 允许空值,A.Data_default 缺省值,B.comments 备注
from
    user_tab_columns A,user_col_comments B
where
    A.Table_Name = B.Table_Name
    and A.Column_Name = B.Column_Name
    and A.Table_Name = 'test'
 
查询出来了,但是对于number类型的字段长度却不理解..
 
请看下图:
 
 
发现以下3个问题:
 
1,明明是24位的长度,20位整数,4位小数的,长度怎么是22呢?
 
2,对数据录入测试,实际只能输入16位整数,4位小数,这是为什么呢?
 
 
3,录入完成,点绿色的勾时,小数全变成0了,不是精确4位小数么..怎么全是0?
 
hexllo的主页 hexllo | 菜鸟二级 | 园豆:318
提问于:2014-03-18 18:42
< >
分享
所有回答(1)
0

这个比较好解释:

http://docs.oracle.com/cd/B19306_01/server.102/b14220/datatype.htm#sthref3810

注意:NUMBER(p,s)中的p表示数字定义的“精度”。换句话说NUMBER(20,4)代表该字段精度为20位,小数位为4位。

而user_tab_columns中Data_length的含义:

http://docs.oracle.com/cd/B19306_01/server.102/b14237/statviews_2094.htm

注意:指的是     Length of the column (in bytes),换句话说,最多可以有22个字节来存放字段值,明白了么?

邀月 | 园豆:25475 (高人七级) | 2014-03-28 16:00

意思是20.4,整数位能精确到20位,小数位能精确到4位对吗?可是问题3怎么解释呢,谢谢~~

支持(0) 反对(0) hexllo | 园豆:318 (菜鸟二级) | 2014-03-31 09:00

@hexllo:(1) 仔细看,是整个字段精度为20,不是整数位。(2)你输入时只要不是红色,就代表是有效数字,重新查询应该是"111111111111.1234"

支持(0) 反对(0) 邀月 | 园豆:25475 (高人七级) | 2014-03-31 11:54

@邀月: 唉..我查了,结果小数位还是全0,删除4位整数后,重新录入小数,最后的4变成0

 

搞不懂oracle,你看看你电脑是不是也这样?

支持(0) 反对(0) hexllo | 园豆:318 (菜鸟二级) | 2014-03-31 12:12

@hexllo: 我的录入时会显示为浮点数,但查询是正常的111111XXX.1234

支持(0) 反对(0) 邀月 | 园豆:25475 (高人七级) | 2014-04-01 14:17

@邀月: 唉..请看下图:

支持(0) 反对(0) hexllo | 园豆:318 (菜鸟二级) | 2014-04-01 14:53

@hexllo: 

邀月工作室

三种可能:

(1)你的Oracle版本,我的是11.2.0.3 linux 64位;

(2)客户端工具版本,我的是PL/SQL 10.0;

(3)默认的查询参数可能不同

支持(0) 反对(0) 邀月 | 园豆:25475 (高人七级) | 2014-04-01 15:02

@邀月: 那可能就是电脑的原因吧?

支持(0) 反对(0) hexllo | 园豆:318 (菜鸟二级) | 2014-04-01 15:05
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册