Oracle 内置数据类型 -- 数值

本文介绍了Oracle数据库中用于存储数值的内置数据类型,包括NUMBER、FLOAT、BINARY_FLOAT和BINARY_DOUBLE。详细讨论了它们的特点和使用场景,是理解Oracle数值类型的重要参考资料。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

-- Start

NUMBER

CREATE TABLE TEST
(
  -- 语法:NUMBER [ (p [, s]) ]
  
  -- p(precision) 表示精度,精度是指从左边第一个非0数字开始到右边最后一个非0数字结束的所有数字的个数
  -- p 可以是 1 到 38 的任意数字
  -- s(scale) 表示标度,标度是指小数位的个数,s 可以是 -84 到 127 的任意数字
  -- 如果一个数字超过了定义的精度,Oracle 会报错
  -- 如果一个数字超过了定义的标度,Oracle 会自动四舍五入
  COL1 NUMBER(7,2),
  
  -- 你可能已经注意到了,标度怎么可能是负值呢?
  -- 下面的列存储的是以万为单位的数字,万以下的数字将会被四舍五入,如 15000 --> 20000
  COL2 NUMBER(10,-4),
  
  -- 你可能也已经注意到了,标度怎么可能大于精度呢?那么请你再次看看精度的定义。
  -- 下面的列用来存储诸如 0.01234 等小数点后的第一个数字是0的数字
  COL3 NUMBER(4,5),
  
  -- 下面的列定义了一个整数
  COL4 NUMBER(4),
  
  -- 下面的列同样定义了一个整数
  COL5 NUMBER(4, 0),
  
  -- 如果一个列没有指定精度和标度,表示最大精度和标度
  COL6 NUMBER
);

-- 大多数国家都是用.作为整数与小数的分隔符
-- 但是也有些奇葩国家如德国用,作为整数与小数的分隔符
-- Oracle 允许我们修改 NLS_NUMERIC_CHARACTERS 来设置自己的分隔符
-- SELECT * FROM NLS_SESSION_PARAMETERS WHERE PARAMETER='NLS_NUMERIC_CHARACTERS'
INSERT INTO TEST VALUES (0.1, 15000, .0388, 5, 8, 88e3);
INSERT INTO TEST VALUES (+.1, +15000, +0.0388, +5, +8, +88E+3);
INSERT INTO TEST VALUES (-0.1, -15000, -.0388, -5, -8, -88e-3);

FLOAT

CREATE TABLE TEST
(
  -- 语法:FLOAT [(p)]
  
  -- FLOAT 是 NUMBER 的一个子类型
  -- FLOAT 非常诡异,没有充足的理由,千万不要使用它
  -- Oracle 也不推荐我们使用 FLOAT,推荐使用 BINARY_FLOAT 和 BINARY_DOUBLE
  COL1 FLOAT(7)
);


BINARY_FLOAT


CREATE TABLE TEST
(
  -- BINARY_FLOAT 支持特殊值 BINARY_FLOAT_INFINITY 和 BINARY_FLOAT_NAN
  COL1 BINARY_FLOAT
);

INSERT INTO TEST VALUES (BINARY_FLOAT_INFINITY);
INSERT INTO TEST VALUES (BINARY_FLOAT_NAN);
INSERT INTO TEST VALUES (0.1f);
INSERT INTO TEST VALUES (.2F);
INSERT INTO TEST VALUES (+0.3f);
INSERT INTO TEST VALUES (-.4F);
INSERT INTO TEST VALUES (5e6f);
INSERT INTO TEST VALUES (-6e+7f);
INSERT INTO TEST VALUES (+7E-8F);

BINARY_DOUBLE

CREATE TABLE TEST
(
  -- BINARY_DOUBLE 支持特殊值 BINARY_DOUBLE_INFINITY 和 BINARY_DOUBLE_NAN
  COL1 BINARY_DOUBLE
);

INSERT INTO TEST VALUES (BINARY_DOUBLE_INFINITY);
INSERT INTO TEST VALUES (BINARY_DOUBLE_NAN);
INSERT INTO TEST VALUES (0.1d);
INSERT INTO TEST VALUES (.2D);
INSERT INTO TEST VALUES (+0.3d);
INSERT INTO TEST VALUES (-.4D);
INSERT INTO TEST VALUES (5e6d);
INSERT INTO TEST VALUES (-6e+7d);
INSERT INTO TEST VALUES (+7e-8D);


-- 更多参见:Oracle SQL 精萃

-- 声明:转载请注明出处

-- Last edited on 2015-07-04

-- Created by ShangBo on 2014-12-13

-- End


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值