欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

oracle number类型的语法跟用法

更新时间: 2014-01-05 02:04:31 责任编辑: Author_N1

 

Oracle number类型的语法和用法


  Oracle number类型的语法很简单,就是:

  number(p,s)

  p,s都是可选的,假如都不填,p默认为38,s默认为-48~127。

  1. 精度(precision),或总位数。默认情况下,精度为38位,取值范围是1~38之间。也可以用字符*表示38。

  2. 小数位置(scale),或小数点右边的位数。小数位数的合法值为-48~127,其默认值取决于是否指定了精度。如果没有知道精度,小数位数则默认有最大的取值区间。如果指定了精度,小数位数默认为0(小数点右边一位都没有)。例如,定义为NUMBER的列会存储浮点数(有小数),而NUMBER(38)只存储整数数据(没有小数),因为在第二种情况下小数位数默认为0.

  如下SQL语句:

  create table t ( msg varchar2(12.), num_col number(5,2) );

  insert into t (msg,num_col) values ( '123.456', 123.456 );//执行成功,保存的是123.46

  insert into t (msg,num_col) values ( '1234', 1234 );//执行失败,要保留2位小数,那么整数位最多3位,现在是4位。

  如果scale是负数怎么样,表示左边整数位舍入几位:

  create table t ( msg varchar2(12.), num_col number(5,-2) );

  insert into t (msg,num_col) values ( '123.45', 123.45 );//执行成功,保存的是100

  insert into t (msg,num_col) values ( '123.456', 123.456 );//执行成功,保存的是100

  其他数据类型:

  1. NUMERIC(p,s):完全映射至NUMBER(p,s)。如果p未指定,则默认为38.

  2. DECIMAL(p,s)或DEC(p,s):完全映射至NUMBER(p,s)。如果p为指定,则默认为38.

  3. INTEGER或INT:完全映射至NUMBER(38)类型。

  4. SMALLINT:完全映射至NUMBER(38)类型。

  5. FLOAT(b):映射至NUMBER类型。

  6. DOUBLE PRECISION:映射至NUMBER类型。

  7. REAL:映射至NUMBER类型。

  性能考虑:

  一般而言,Oracle NUMBER类型对大多数应用来讲都是最佳的选择。不过,这个类型会带来一些性能影响。Oracle NUMBER类型是一种软件数据类型,在Oracle软件本身中实现。我们不能使用固有硬件操作将两个NUMBER类型相加,这要在软件中模拟。不过,浮点数没有这种实现。将两个浮点数相加时,Oracle会使用硬件来执行运算。

  换而言之,将一些列的number列相加,没有将一系列float列相加来得快。因为float列的精度低很多,一般是6~12位。

  比如:select sum(ln(cast( num_type as binary_double ) )) from t

  比:select sum(ln(cast( num_type) )) from t 要快很多。
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 02:04:31
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/5314/
本文WWW.DOC100.NET DOC100.NET版权所有。