Oracle中的数据类型

Oracle的数据类型主要应用场景为:数据表中列的类型、函数、存储过程的变量定义。这些数据类型大致可以分为4类:字符型(character)、数值型(number)、日期时间型(date)、和大对象型(lob),除此之外Oracle还存在这一些特殊的数据值得注意。另外需要注意的是:在Oracle中并不存在布尔类型,因为存在布尔类型是没有任何意义的。如果需要,可以利用字符串或者利用数值型(1或0)来代替。

一、字符型

  1. char(n)
    char数据类型用于标识固定长度的字符串,小括号内的数字n即代表了字符串的长度。当实际数据不足定义长度时,Oracle将使用空格补全右边不足位;当实际数据的长度大于其固定长度时,Oracle将不允许数据存储于对应的列或这变量中,并抛出错误。
    char数据类型是有最大长度限制的,即n的最大值不能大于2000,同时不能小于1
  2. varchar(n)
    varchar类型,是可变字符串儿类型。当某个列或变量指定为varchar(n)的类型时,意味着该列或变量的最大长度不大于n,但当其实际数据小于n时,Oracle并不在其右端补齐空格。这样,减少了存储时所占用的实际资源
  3. varchar2(n)
    varchar2同样是可变字符串儿类型。与varchar的区别在于,varchar是SQL标准规定的、数据库必须实现的数据类型,所以Oracle数据库中必须存在该数据类型。而varchar2则是Oracle在varchar的基础上自行定义的可变长度的字符串类型,并使用了varchar2这个名称。varchar2当被用做列的数据类型时,其最大长度可被定义为4000,当用作变量的数据类型时,其长度可以达到32767。
    但是,需要注意的是:varchar和varchar2的实际数据长度,都不可以大于其定义的长度n。
    varchar是符合工业标准(SQL标准)的数据类型。该类型可以存储空字符串儿,而varchar2则不存储空字符串儿,而是将空字符串而转换为NULL进行存储。为了保证数据库的向后兼容性,Oracle建议使用varchar2,而不是varchar。

二、数值型
number(n) 表示一个整数,数字的长度是n;可以使用INT代替
number(m,n) 表示一个小数,其中m表示总体长度,小数长度为n,整数长度为m-n;可以使用float代替

三、日期时间型
日期时间主要用来存储日期和时间格式的数据。

1、date(oracle中最常用的日期型为date)
该类型中包含了以下信息

  • Century 世纪信息
  • Year 年份信息
  • Month 月份信息
  • Day 天数信息
  • Hour 小时信息
  • Minutes 分钟信息
  • Seconds 秒数信息
    在使用时,需要为日期指定固定的格式,例如:YYYY代表四位年份,MM代表月份,DD代表当月中的第几天,HH代表小时数(HH24代表24小时制小时数),MI代表分钟数,SS代表秒数
    由于Oracle中日期指定的格式是不区分大小写的,因此yyyy-mm-dd等同于YYYY-MM-DD,也等同于yyyy-MM-dd。需要注意的是date类型中不仅包含了日期信息,同时也包含了时间信息。
    下面演示一下date类型的使用
 create table test_date(test_data date);
insert into test_date values(sysdate);
commit;
select * from test_date;

在这里插入图片描述
2、timestamp
Oracle中除了常用的date类型之外,还提供了timestamp的日期时间类型,timestamp可以提供精度更高的时间,它可以将时间精确到毫秒。

四、LOB类型
lob类型主要用于存储大对象,例如大量的文本信息(因为varchar2最大长度只能达到4000)、二进制文件等。 lob类型的最大存储容量为4G,数据存储的形式可以为数据,也可以是外部数据文件。
lob类型有以下几种具体类型
clob: 用于存储大型文本信息,例如,备注信息
blob: 用于存储二进制文件,例如,电影、歌曲、图片等,但是一般不会这么放
bfile: 作为单独文件存在的二进制数据

五、Oralcle中的特殊数据
1、rowid
rowid是用于表示数据物理地址的列。该列是一个伪列,它并非用户创建,而是由数据库自动为表添加,而且可供数据库内部使用。rowid通常由10个字节组成。
select e.*,e.rowid from emp e;
在这里插入图片描述
rowid的前6个字符,例如 AAAR3s 代表数据对象标号
其后的3个字符,例如 AAE 代表文件编号
接下来的的前5个字符,例如 AAAAC 代表块编号
最后的前4个字符,例如 XAAA 代表行的编号

分析表中的各个记录可知,表中的rowid是唯一的。一帮情况下,可以认为在查询语句中没有指定排序标准时,将以rowid作为默认排序标准。
但是,需要注意的是,rowid不能作为记录插入数据表的先后记录。rowid靠后的记录不一定是晚插入的记录。因为,Oracle总是查找空闲的空间进行插入动作。某些记录被删除之后,Oracle即可释放相应的空间,之后插入的数据有可能存储于删除记录所带来的空闲空间中。

2、null与空字符串
Oracle中将空字符串儿视为null,所以在Oracle中判断某列的值是否为空,不能将该列的值与‘’比较,应该使用is null

create table test (id varchar2(10),name varchar2(20))   --创建测试表

begin
       insert into test values (1,'aaa');  --字符串要使用单引号引起来
       insert into test values (1,'bbbb');
       insert into test values (1,'');  --两个单引号表示空字符串
       insert into test values (1,null); --null表示为空  
       commit;     
end;

指定查询条件name=’’(name等于空字符串儿)什么也查不出来
在这里插入图片描述

需要指定is null才可以
在这里插入图片描述
3、单引号与双引号
Oracle中单引号与双引号有着截然不同的意义
单引号用于界定字符串
双引号用于表示对象名称

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值