特别是number数据类型,我看好多人喜欢用,甚至整型都要用个number(10,0)来表示,给我的感觉,number是一个对象,它能比内部数据类型,比如int,float的速度还要快?
我想知道number数据类型的优势在哪里,而内部数据类型,比如int,float,real等的劣势又在哪里呢?注:我是oracle新手,以前都是用MSSQLServer的,MSSQLServer里面的数据类型,基本上都是内部类型(CPU可识别的),除了image这些特殊数据类型和numeric等之外。numeric在我看来也是一个对象,不能直接参与计算的,所以我都不用,记得有一次,我用ADO来读取numeric数据,结果是返回一个字符串的,难道是用字符串保存的numeric。听说oracle的number是按10进制保存的,那么它也是一个对象,无法直接参与计算,那么它的效率又是如何得到保障的呢?我能想到的,需要精确的确定小数位数的,就是在计算钱的时候(而且MSSQLServer里面,已经有一个货币类型数据了),可是大部分情况下,我认为并不需要精确小数的位数,比如1.2用1.199999来表示,是可以接受的。
我想知道number数据类型的优势在哪里,而内部数据类型,比如int,float,real等的劣势又在哪里呢?注:我是oracle新手,以前都是用MSSQLServer的,MSSQLServer里面的数据类型,基本上都是内部类型(CPU可识别的),除了image这些特殊数据类型和numeric等之外。numeric在我看来也是一个对象,不能直接参与计算的,所以我都不用,记得有一次,我用ADO来读取numeric数据,结果是返回一个字符串的,难道是用字符串保存的numeric。听说oracle的number是按10进制保存的,那么它也是一个对象,无法直接参与计算,那么它的效率又是如何得到保障的呢?我能想到的,需要精确的确定小数位数的,就是在计算钱的时候(而且MSSQLServer里面,已经有一个货币类型数据了),可是大部分情况下,我认为并不需要精确小数的位数,比如1.2用1.199999来表示,是可以接受的。
解决方案 »
- 帮忙解决一下 SQL 错误: ORA-01843: ¿¿¿¿¿ 01843. 00000 - "not a valid month"
- oracle查询能将查询的某个字段特别显示数据吗
- delete语句执行不下去,删除不了数据,请问怎么解决?
- 如何定义常量,使其可以在另一个包中调用
- ORACLE的日志查询问题,分不够可以再加!
- 这个程序那里错了哦,哎,不明白
- 新手问题
- 8.17i的版本怎么样才能安装到win2 server上去啊
- oracle8.17的客户端能不能访问oracle8.0服务端
- Oracle分页数据重复 ,去掉distinct之后,数据不会重复,原因是为啥
- 安装Oracle 9i是开始的一个错误
- 请教:ORA-01219:数据库未打开:仅允许在固定表/食堂中查询。
oracle自己也是推荐使用number类型。
我用TTClasses对TimesTen进行操作时,如果要做参数绑定,那么对应于number(5,0)的居然是double型的,你可以试试。
我想用OCCI也会这样。oracle推荐使用什么我不太清楚,但光从效率上来说,好像oracle也说float double integer等比number快,而且占用的存储空间还少一些,这是oracle sql developer里面的帮助:However, while NUMBER uses decimal precision, BINARY_FLOAT and BINARY_DOUBLE use binary precision. This enables faster arithmetic calculations and usually reduces storage requirements.The BINARY_FLOAT and BINARY_DOUBLE data types store floating-point data in the 32-bit IEEE 754 format and the double precision 64-bit IEEE 754 format respectively. Compared to the Oracle NUMBER data type, arithmetic operations on floating-point data are usually faster for BINARY_FLOAT and BINARY_DOUBLE. Also, high-precision values require less space when stored as BINARY_FLOAT and BINARY_DOUBLE
PLS_INTEGER和NUMBER比较起来,其优点是:
1).占有较少的存储空间;
2).可以直接进行算术运算(在NUMBER上不能直接进行算术运算,如果要计算,NUMBER必须先被转换成二进制)。所以在进行算术的时候PLS_INTEGER比NUMBER和BINARY_INTEGER快一些。PLS_INTEGER可以存储一个有符号的整形值,其精度范围和BINARY_INTEGER一样,是:-2^31~2^31。
而PLS_INTEGER和BINARY_INTEGER区别是:
PLS_INTEGER进行的运算发生溢出的时候,会触发异常。但是当BINARY_INTEGER运算发生溢出时,如果可以指派给一个NUMBER变量(没有超出NUMBER的精度范围)的话就不会触发异常。