Oracle数据类型

当你在数据库中创建数据表的时候,你需要定义表中所有字段的类型。ORACLE有许多种数据类型以满足你的需要。数据类型大约分为:character, number, date, LOB, 和RAW等类型。虽然ORACLE8i也允许你自定义数据类型,但是它们是最基本的数据类型。在下面的文章中你将了解到他们在oracle 中的用法、限制以及允许值。
在新建表时,可以查看数据库支持的几种类型。我这个显示的不全。
在这里插入图片描述
在这里插入图片描述

数据类型

数据类型参数描述
char(n)n=1 to 2000字节定长字符串,n字节长,如果不指定长度,缺省为1个字节长(一个汉字为2字节)
varchar2(n)n=1 to 4000字节可变长的字符串,具体定义时指明最大长度n,
这种数据类型可以放数字、字母以及ASCII码字符集(或者EBCDIC等数据库系统接受的字符集标准)中的所有符号。
如果数据长度没有达到最大值n,Oracle 8i会根据数据大小自动调节字段长度,
如果你的数据前后有空格,Oracle 8i会自动将其删去。VARCHAR2是最常用的数据类型。
可做索引的最大长度3209。
number(m,n)m=1 to 38
n=-84 to 127
可变长的数值列,允许0、正值及负值,m是所有有效数字的位数,n是小数点以后的位数。
如:number(5,2),则这个字段的最大值是99,999,如果数值超出了位数限制就会被截取多余的位数。
如:number(5,2),但在一行数据中的这个字段输入575.316,则真正保存到字段中的数值是575.32。
如:number(3,0),输入575.316,真正保存的数据是575。
date从公元前4712年1月1日到公元4712年12月31日的所有合法日期,Oracle 8i其实在内部是按7个字节来保存日期数据,在定义中还包括小时、分、秒。
缺省格式为DD-MON-YY,如07-11月-00 表示2000年11月7日。
long可变长字符列,最大长度限制是2GB,用于不需要作字符串搜索的长串数据,如果要进行字符搜索就要用varchar2类型。
long是一种较老的数据类型,将来会逐渐被BLOB、CLOB、NCLOB等大的对象数据类型所取代。
raw(n)n=1 to 2000可变长二进制数据,在具体定义字段的时候必须指明最大长度n,Oracle 8i用这种格式来保存较小的图形文件或带格式的文本文件,如Miceosoft Word文档。
raw是一种较老的数据类型,将来会逐渐被BLOB、CLOB、NCLOB等大的对象数据类型所取代。
long raw可变长二进制数据,最大长度是2GB。Oracle 8i用这种格式来保存较大的图形文件或带格式的文本文件,如Miceosoft Word文档,以及音频、视频等非文本文件。
在同一张表中不能同时有long类型和long raw类型,long raw也是一种较老的数据类型,将来会逐渐被BLOB、CLOB、NCLOB等大的对象数据类型所取代。
blob
clob
nclob
三种大型对象(LOB),用来保存较大的图形文件或带格式的文本文件,如Miceosoft Word文档,以及音频、视频等非文本文件,最大长度是4GB。
LOB有几种类型,取决于你使用的字节的类型,Oracle 8i实实在在地将这些数据存储在数据库内部保存。可以执行读取、存储、写入等特殊操作。
bfile在数据库外部保存的大型二进制对象文件,最大长度是4GB。
这种外部的LOB类型,通过数据库记录变化情况,但是数据的具体保存是在数据库外部进行的。
Oracle 8i可以读取、查询BFILE,但是不能写入。大小由操作系统决定。

1、字符型:

char(n):用于标识固定长度的字符串。
  当实际数据不足定义长度时,使用空格补全右边不足位。
varchar(n):可变字符串类型。
  为SQL标准规定的,数据库必须实现的数据据类型。可以存储空字符串。
varchar2(n):可变字符串类型。
  oracle在varchar的基础上自行定义的可变长度字符串类型。当做为列类型使用时,最大长度可被定义为4000;当做为变量类型使用时,长度可被定义为32767。不可以存储空字符串。

2、数值型:

(1) NUMBER(Type = 2)
number 类型是 Oracle 中常用的数据类型,即可以用于存储整数,也可以存储小数,是一个非常有意思的数据类型。number 是一个可变长度的数据类型,并且始终保持四舍五入的原则。

number 可以指定两个参数 number(p,s):

  • p表示有效位,从左边第一个非0的数字开始数,到结尾的长度,取值范围:1 ~ 38;

  • s表示小数位,取值范围:-84 ~ 127。
    注意:通常情况下(需要整数位时),应该 p > s,例如:
    1.number(3,2) 只能存储:0.01 ~ 9.99 和 -0.01 ~ -9.99
    2.number(3,3) 只能存储:0.001 ~ 0.999 和 -0.001 ~ -0.999
    3.number(2,3) 只能存储:0.001 ~ 0.099 和 -0.001 ~ -0.099

  • number 可以表示的数值范围:-1.0e-130 ~ 1.0e+126,占用空间为1 ~ 22 个字节。

    下面看几个常见的例子:

numbernumber(3)number(5,2)
create table t_number(num number);
insert into t_number values(56);
insert into t_number values(56.78);
select * from t_number;
create table t_number3(num number(3));
insert into t_number3 values(999);
insert into t_number3 values(28.56);
select * from t_number3;
create table t_number5_2(num number(5,2));
insert into t_number5_2 values(128.264);
insert into t_number5_2 values(128.265);
select * from t_number5_2;
执行以上语句,实际存储为56和56.78。
当不指定有效位和小数位时,number 可根据实际值而确定。
56占用2个字节;而56.78占用3个字节
执行以上语句,实际存储为999和29,表示存储为整数形式,小数位进行四舍五入。
number(3) 相当于 number(3,0),取值范围为:-999~999
执行以上语句,实际存储为128.26和128.27,当小数位大于指定范围时,将进行四舍五入。
查看占用字节情况:select num, dump(num) from t_number;
在这里插入图片描述

    更多例子:

范围插入值1结果插入值2结果
number(5,2)23.5623.560.0080.01
number(4,3)123.45报错3.453.45
number(5,5)0.20.20.0000120.00001
number(3,-2)182200142.85100
number(2,3)0.123报错0.0230.023
0.23报错
number(3,3)0.2340.2340.230.23
0.10.1
number(6,3)999.9995999.9990.00950.01

总结

  1. 有效位范围表示,从左边数第一个非0数值开始,到最后一个数值的长度范围。例如:number(3,2) 最大值:9.99,最小值:0.01 或 0
  2. 是不是发现,number 确实是一个很有意思的数据类型。它通过有效位§和小数位(S),就可以精设置该字段可以存储的数据范围。
  3. 在平常开发中,对于已知长度数值类型,建议指定有效位和小数位;对于未知长度的数值,可以使用 number。

3、日期时间型:

date:包含Year(年)、Month(月) 、Day(天)、Hour(时)、Minutes(分)、Second(秒)
  说明:(yyyy表示4位年分;mm表示月份;dd表示天;hh表示时;mi表示分;ss表示秒)

4、大对象类型:

lob:用于存储大对象类型。例如:文本信息长度超过4000、二进制文件等。最大容量为4GB。
  lob分类:clob:用于存储大型文本数据。(例如:备注信息)
  blob:用于存储二进制数据。(例如:图片文件)
  bfile:作为独立文件存在的二进制数据。

5、特殊数据:

null与空字符串:null与空字符串,都要用is null或is not null进行比较。
  单引号:想将单引号做为字符中使用,请通过单引号进行转义。

6、注意:

oracle中,没有布尔类型,可利用字符串或数值(1/0)表示

参考资料:
https://www.cnblogs.com/abeam/p/12153432.html
https://www.cnblogs.com/helong/articles/2087721.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值