[20160828]number类型.txt

[20160828]number类型.txt

--昨天看了一个链接http://www.cnblogs.com/kerrycode/p/4427352.html,感觉有点不对,上班测试看看。

1.环境:
SCOTT@book> @ &r/ver1
PORT_STRING                    VERSION        BANNER
------------------------------ -------------- --------------------------------------------------------------------------------
x86_64/Linux 2.4.xx            11.2.0.4.0     Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

create table tx ( a number,b number(38,2) ,c number(38));
insert into tx values (1/3,1/3,1/3);
commit ;

SCOTT@book> select * from tx;
         A          B          C
---------- ---------- ----------
.333333333        .33          0

2.测试:
set serveroutput on

DECLARE 
CURSOR c_test IS SELECT a,b,c FROM Tx;
c_row c_test%rowtype;
begin
   for c_row in c_test loop
        dbms_output.put_line('the result is a=' || c_row.a);
        dbms_output.put_line('the result is b=' || c_row.b);
        dbms_output.put_line('the result is c=' || c_row.c);
   end loop;
end;
/

the result is a=.3333333333333333333333333333333333333333
the result is b=.33
the result is c=0
PL/SQL procedure successfully completed.

SCOTT@book> @ &r/desc tx
           Name Null?    Type
           ---- -------- ----------------------------
    1      A             NUMBER
    2      B             NUMBER(38,2)
    3      C             NUMBER(38)

--很明显我并没有测试出作者的情况,实际上定义number,并不意味者精度是0.估计作者使用pl/sql的原因。

SCOTT@book> select dump(a,10) c80 ,dump(b,10) c30 ,dump(c,10) c20 from tx;
C80                                                                              C30                            C20
-------------------------------------------------------------------------------- ------------------------------ --------------------
Typ=2 Len=21: 192,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34    Typ=2 Len=2: 192,34            Typ=2 Len=1: 128

--你可以发现字段a,长度是21,也就是在生产系统最好不要简单的定义类型number,要加入整数部分长度的限制,避免一些运算导致字
--段占用空间很大,最佳的方式准确的设置scale。

--另外我曾经在使用copy命令(sqlplus)时出现异常,可以参考链接:
http://blog.itpub.net/267265/viewspace-1257036/

--使用copy后丢失了小数点后面的信息,数据类型number变成了number(38).

--总之最好不要简单的定义类型是number,要写成number(10) ,如果有精度需求加入number(10,3).

时间: 2024-10-10 09:13:23

[20160828]number类型.txt的相关文章

[20150503]关于oracle的number类型.txt

[20150503]关于oracle的number类型.txt --节前的事情,别人建表使用number类型,本来想定义成number(10,2),结果少输入0,变成number(1,2). --在我的记忆里,好像前面的数值应该大于后面的精度的,没想到这样竟然可以通过,自己感到很奇怪! --测试下来,才知道自己oracle基本的东西都不是很清楚. 1.首先提到我以前写的一篇blog: [20140823]在sqlplus使用copy注意.txt http://blog.itpub.net/267

[20171203]关于raw类型.txt

[20171203]关于raw类型.txt --//从来没有关注raw类型,昨天看https://blog.dbi-services.com/doag-2017-avg_row_len-with-virtual-columns/ --//我第一次接触一个应用使用sys_guid()函数生成键值,不过对方使用-分割,36位字符串长度.一个表有6个这样的字段.昏.. --//还真的没有反过来想利用raw类型可以减少磁盘空间占用. 1.环境: SCOTT@test01p> @ ver1 PORT_ST

[20151119]nvarchar2类型.txt

[20151119]nvarchar2类型.txt -- 前几天帮别人看awr报表,连接如下:http://www.itpub.net/thread-1942785-1-1.html -- 最终确定是使用navrchar2存在隐式转换,实际上如果应用没有国际化需求,不要使用这个类型,通过一些例子来说明问题. 1.环境: SCOTT@book> create table t ( id number,c1 varchar2(20),c2 nvarchar2(20)); Table created.

ORACLE NUMBER类型详解

1>.NUMBER类型细讲:Oracle number datatype 语法:NUMBER[(precision [, scale])]简称:precision --> p      scale     --> s NUMBER(p, s)范围: 1 <= p <=38, -84 <= s <= 127保存数据范围:-1.0e-130 <= number value < 1.0e+126   保存在机器内部的范围: 1 ~ 22 bytes 有效为:

ORACLE NUMBER类型Scale为0引发的问题

今天遇到了一个很有意思的NUMBER类型Scale引发的问题,我用一个简单的测试用例来展示一下这个案例.假如有个TEST的表,有个字段类型为NUMBER,我插入下面两条数据 CREATE TABLE TEST (      Category VARCHAR(12),      QTY  NUMBER )   INSERT INTO TEST SELECT 'M', 12 FROM DUAL UNION ALL SELECT 'C', 0.99999999999999999 FROM DUAL;

ORACLE 中NUMBER类型默认的精度和Scale问题

在ORACLE数据库中,NUMBER(P,S)是最常见的数字类型,可以存放数据范围为10^-130~10^126(不包含此值),需要1~22字节(BYTE)不等的存储空间.P 是Precison的英文缩写,即精度缩写,表示有效数字的位数,最多不能超过38个有效数字.S是Scale的英文缩写,表示从小数点到最低有效数字的位数,它为负数时,表示从最大有效数字到小数点的位数.有时候,我们在创建表的时候,NUMBER往往没有指定P,S的值,那么默认情况下,NUMBER的P.S的值分别是多少呢?相信这个问

js中string和number类型互转换技巧(分享)_javascript技巧

1.string-->number string类型   *1  即可变成  number类型 2.number-->string number类型  +''  即可变成  string 类型 <script type="text/javascript"> function screenInfo() { var str = '012.8372'; var s = 0; str = str * 1; alert(typeof (str));//number s +

string-数据库number类型java String类型可以接吗?

问题描述 数据库number类型java String类型可以接吗? 数据库number类型java String类型可以接吗? 数据库number类型java String类型可以接吗? 数据库number类型java String类型可以接吗? 解决方案 可以接 不过得转格式类型才能保证编译不报错 解决方案二: 可以 接受语句:示例(需要将接受的数据进行转换) int age = Integer.parseInt(rs.getString("Age"));//整型 对于String

Oracle中的number类型

number类型用于定义固定长度的数字,可以使整数,也可以是实数.number(p,s)是完整的定义形式. p必须是整数,取值范围是1-38,用于指定数字的总的位数.s必须是整数,取值范围是-84~127,用于指定小数点之后的位数. NUMBER 赋值:1234.56 实际:1234.56 NUMBER(3) 赋值:-123 实际:-123 NUMBER(3) 赋值:1234 实际:错误(ORA-06502:PL/SQL:数字或值错误:数字精度太高) NUMBER(4,3) 赋值:1.23456