Oracle---number数据类型
NUMBER ( precision, scale)
- precision表示数字中的有效位;如果没有指定precision的话,Oracle将使用38作为精度。
- 如果scale大于零,表示数字精确到小数点右边的位数;scale默认设置为0;如果scale小于零,Oracle将把该数字取舍到小数点左边的指定位数。
- Precision的取值范围为【1---38】;Scale的取值范围为【-84---127】。
- NUMBER整数部分允许的长度为(precision- scale),无论scale是正数还是负数。
- 如果precision小于scale,表示存储的是没有整数的小数。
- Precision表示有效位数,有效数位:从左边第一个不为0的数算起,小数点和负号不计入有效位数;scale表示精确到多少位,指精确到小数点左边或右边多少位(+-决定)。
- Number值类型举例:
|
实际值 |
数据类型 |
存储值 |
|
1234567.89 |
Number |
1234567.89 |
|
1234567.89 |
Number(8) |
1234567 |
|
1234567.89 |
Number(6) |
出错 |
|
1234567.89 |
Number(9,1) |
1234567.9 |
|
1234567.89 |
Number(9,3) |
出错 |
|
1234567.89 |
Number(7,2) |
出错 |
|
1234567.89 |
Number(5,-2) |
1234600 |
|
1234511.89 |
Number(5,-2) |
1234500 |
|
1234567.89 |
Number(5,-4) |
1230000 |
|
1234567.89 |
Number(*,1) |
1234567.9 |
|
0.012 |
Number(2,3) |
0.012 |
|
0.23 |
Number(2,3) |
出错 |
8. 关于precision, scale也可以作如下表述
定点数的精度(p)和刻度(s)遵循以下规则:
1) 当一个数的整数部分的长度 > p-s 时,Oracle就会报错
2) 当一个数的小数部分的长度 > s 时,Oracle就会舍入。
3) 当s(scale)为负数时,Oracle就对小数点左边的s个数字进行舍入。
4) 当s > p 时, p表示小数点后第s位向左最多可以有多少位数字,如果大于p则Oracle报错,小数点后s位向右的数字被舍入
与int的区别
oracle本来就没有int类型,为了与别的数据库兼容,新增了int类型作为number类型的子集。
int类型只能存储整数;
number可以存储浮点数,也可以存储整数;
number(8,1)存储小数位为1位,总长度为8的浮点数,如果小数位数不足,则用0补全;
number(8)存储总长度为8的整数;
int相当于number(22),存储总长度为22的整数。
NUMBER类型的子类
a) oracle本来就没有int类型,为了与别的数据库兼容,新增了int类型作为number类型的子集。
b) int类型只能存储整数;number可以存储浮点数,也可以存储整数。
c) 在oracle数据库建表的时候,decimal,numeric不带精度,oracle会自动把它处理成INTEGER;带精度,oracle会自动把它处理成number。
d) Oracle只用NUMBER(m,n)就可以表示任何复杂的数字数据。
e) decimal,numeric,int等都为SQL、DB2等数据库的数据类型,ORACLE为了兼容才将其引入;但实际上在ORACLE内部还是以NUMBER的形式将其存入。
number自增
不同于mysql可以直接设置自增,需要建立序列,和触发器。例:
首先,创建一张表:
CREATE TABLE example( ID Number(4) NOT NULL PRIMARY KEY, NAME VARCHAR(25));
后,自定义一个序列(sequence):
CREATE SEQUENCE example_sequence INCREMENT BY 1 -- 每次加几个 START WITH 1 -- 从1开始计数 NOMAXVALUE -- 不设置最大值 NOCYCLE -- 一直累加,不循环 NOCACHE -- 不建缓冲区
再创建一个触发器:
CREATE OR REPLACE TRIGGER example_t
BEFORE INSERT ON example
FOR EACH ROW
BEGIN
SELECT example_sequence.nextval INTO :new.id FROM dual;
END;
测试一下,插入数据
insert into example(name) values('张三');
insert into example(id, name) values(111,'李四');
输入查询语句:
select t.* from EXAMPLE t
结果是:
| id | name |
| 1 | 张三 |
| 111 | 李四 |
Oracle---number数据类型的更多相关文章
- oracle中数据类型number(m,n)
oracle中数据类型number(m,n)中m表示的是所有有效数字的位数,n表示的是小数位的位数.m的范围是1-38,即最大38位. 1> .NUMBER类型细讲:Oracle numbe ...
- oracle 的number数据类型
NUMBER类型细讲:Oracle number datatype 语法:NUMBER[(precision [, scale])]简称:precision --> p scale ...
- ORACLE基本数据类型总结
ORACLE基本数据类型(亦叫内置数据类型 built-in datatypes)可以按类型分为:字符串类型.数字类型.日期类型.LOB类型.LONG RAW& RAW类型.ROWID &am ...
- Oracle自定义数据类型 2 (调用对象方法)
调用对象方法 调用对象方法基于类型创建表后,就可以在查询中调用对象方法 A. 创建基于对象的表语法: create table <表名> of <对象类型>意义 ...
- Oracle自定义数据类型 1
原文 oracle 自定义类型 type / create type 一 Oracle中的类型 类型有很多种,主要可以分为以下几类: 1.字符串类型.如:char.nchar.varchar2.nva ...
- ORACLE抽象数据类型
ORACLE抽象数据类型 *抽象数据类型*/1,抽象数据类型 概念包含一个或多个子类型的数据类型不局限于ORACLE的标准数据类型可以用于其他数据类型中 2,创建抽象数据类型 的语法(必须用NOT F ...
- ORACLE的数据类型的长度合集
-- ORACLE的数据类型常用的数据库字段类型如下:字段类型 中文说明 限制条件 其它说明CHAR 固定长度字符串 最大长度2000 bytesVARCHAR2 可变长度的字符串 最大长度4000 ...
- Oracle 基本操作--数据类型、修改和删除表、增删改查和复制表
一.Oracle基础数据类型:数据类型: 创建数据表时,设计数据表的结构问题,也就是设计及确定数据表中各个列的数据类型,是数值.字符.日期还是图像等其他类型. 因为只有设计好数据表结构,系统才会在磁盘 ...
- 【Oracle】Oracle基本数据类型总结
ORACLE基本数据类型(亦叫内置数据类型 built-in datatypes)可以按类型分为:字符串类型.数字类型.日期类型.LOB类型.LONG RAW& RAW类型.ROWID &am ...
- 转oracle 学习- 数据类型
oracle数据类型 有道是,磨刀不误砍柴工.多了解一些底层的东西,对于Oracle开发.维护大有裨益.个人总结了一些Oracle数据类型集解,相信读者阅读了本文以后,Oracle数据库开发起来会事半 ...
随机推荐
- node的模块包装为promise写法
1. const Promise = require('bluebird') const fs = Promise.promisifyAll(Promise.promisify(require('fs ...
- 关于Mysql安装启动的若干问题解决
Mysql由于其免费,高效的特点一直是大学,培训班的主力数据库管理软件.但是对于初学者而言可能没有那么友好,一是没有windows软件通用的那套可视化操作,基本上初期在不搭配navicat的状态下只能 ...
- spring cloud: 升级到spring boot 2.x/Finchley.RELEASE遇到的坑
spring boot2.x已经出来好一阵了,而且spring cloud 的最新Release版本Finchley.RELEASE,默认集成的就是spring boot 2.x,这几天将一个旧项目尝 ...
- 用spring boot 2从零开始创建区块链
区块链这么火的技术,大java怎能落后,所以有了本文,主要代码参考自 Learn Blockchains by Building One , 中文翻译:用Python从零开始创建区块链 . 一.区块链 ...
- android: 碎片的demo
现在你已经将关于碎片的重要知识点都掌握得差不多了,不过在灵活运用方面可能还有 些欠缺,因此又该进入我们本章的最佳实践环节了. 前面有提到过,碎片很多时候都是在平板开发当中使用的,主要是为了解决屏幕空间 ...
- 使用Python学习selenium测试工具-4:查找元素
转自:https://blog.csdn.net/wd168/article/details/51819930 web通常包含了Hyper Text Markup Language (HTML).Ca ...
- iOS开发-获取设备型号信息
开发中有的时候查看设计统计数据,或者通过日志查看错误信息,这个时候我们就需要获取获取设备信息,看下关于设备有几种方法: NSLog(@"%@",[[UIDevice current ...
- [Canvas]炸弹人初成版
试玩请点此下载代码,并使用浏览器打开index.html. 用方向键操作小人,空格键放炸弹,把敌人消灭算赢,被炸弹炸中或是碰到敌人算输. 图例: 源码: <!DOCTYPE html> & ...
- Spring ActiveMQ 整合(三): 确认机制ACK(收到消息后,应该有一个回应也就是确认答复)
https://blog.csdn.net/dly1580854879/article/details/68490197
- MDX Cookbook 05 - 条件过滤 FILTER-COUNT 与 SUM-IIF 实现
下面的这个查询返回每个财月的 Customer Count 和 基于上个月比较的 Growth in Customer Base 的记录,Slicer 是 Mountain bikes. SELECT ...