Oracle数据类型的简单概述

事件背景:写这篇文章的初衷是最近碰到一个改账票字段长度的案子,然后发现对各种字段类型记得模糊不清,所以想总结记录一下,如有错误,忘指正。
首先我们得知道Oracle的数据类型共分为几大类呢?
Oracle的四大数据类型分为四大类,分别是:
1. 标量(Scalar)类型。
2. 复合(Composite)类型。
3. 引用(Reference)类型。
4. LOB(Large Object)类型。

下面我们具体谈谈各大类型。
一. 标量(Scalar)类型。
标量类型很像java等语言的基础数据类型,标量类型分别有数值,字符,日期,布尔,行,行标识和可信几种类型。

1.数值(NUMBER)
NUMBER,以十进制的形式进行存储,但是在计算的时候会转换为二进制进行运算的。定义方式是NUMBER(P,S),其中P定义了数值精度,最大38位,S是刻度范围,列如NUMBER(6, 4),其中6限制了数值精度总共6位,4指小数点后位数,范围为99.9999至 -99.9999
※: 有人还提到PLS_INTEGER 和 BINARY_INTEGER类型,这两种类型是PLSQL类型,不属于oracle类型,并且这两种类型更多的被用于描述,但是循环计数器会用到这两种类型。

2.字符类型(CHAR, VARCHAR, VARCHAR2, NCHAR, NVARCHARNVARCHAR2)
(1).CAHR, 定长字符串,如果实际值长度不够;则用空格填充,定义如下CHAR(L), L为字符串长度,缺省值为1,因此定义字段定义为 asd char; 也是没有问题的,表示asd是一个长度为1的字符,Oracle8以上规定存储的最大位数为2000字节,在PLSQL中作为变量最大长度为32767个字节。

(2).VARCHAR2和VARCHAR,变长字符串,如果实际值长度不够,不会用空格填充,没有缺省值,因此asd varchar;这种定义是错误的,Oracle8以上规定存储的最大位数为4000字节,在PLSQL中作为变量最大长度为32767个字节。

(3).NCHAR,固定字符串,与环境变量NLS密切相关,用法与CHAR相同,表示长度的最小单位是位,一个字母占一位,一个中文汉字,日文汉字同样也占一位,最大长度为1000位。

(4).NVARCHAR和NVARCHAR2,变长字符串,与环境变量NLS密切相关,用法与VARCHAR2相同,表示长度的最小单位是位,一个字母占一位,一个中文汉字,日文汉字同样也占一位,最大长度为2000位。

3.日期类型(DATE、TIMESTAMP)
(1).DATE,用来存储时间信息,只有7个字节,从世纪到秒,不存在千年虫问题,其存储格式只有一种:YYYY/MM/DD HH24:MI:SS,可以通过to_char(),to_date()的函数来用于数据展示。

(2).TIMESTAMP(时间戳),也是用于存储时间的,时间戳可以存储世纪、4位年、月、日、时(以24小时格式)、分、秒。与DATE类型相比,时间戳具有以下优点:
a.时间戳可以存储秒的小数位
b.时间戳可以存储时区
※: 可以通过CAST函数将DATE类型转换为TIMESTAMP类型。

oracle的时间函数:
sysdate:sysdate函数用于返回当前系统的时间(返回date数据类型)
systimestamp:在Oracle中,systimestamp函数返回本机数据库上当前系统日期和时间(包括微秒和时区)
to_date():将字符类型按一定格式转化为日期类型
to_timestamp():将字符类型按一定格式转化为日期时间戳类型(timestamp类型)
to_char():将日期转按一定格式换成字符类型

4.布尔类型(BOOLEAN)
BOOLEAN,只能表示TRUE,FALSE和NULL。

5.行类型(RAW,LONG RAW)
(1).RAW,声明方式RAW(L),L为长度,oracle最大长度为2000字节,plsql变量最大长度为32767字节,类似于CHAR。

(2).LONG RAW,数据库存储最大长度2G字节,plsql变量最大长度为32760字节,类似于LONG类型。

6.行标识(ROWID)
ROWID,用来存储“行表示符”,可以通过ROWIDTOCHAR函数实现ROWID到CHAR类型的转换。

7.可信(MLSLABEL)
MLSLABEL,使用MLSLABEL来存储数据系统标签的二进制格式。Trusted Oracle使用标签来控制对数据库的访问。MLSLABEL的最大长度为255字节。
在标准 Oracle 中,您可以使用 MLSLABEL 数据类型定义列。但是,该列的唯一有效值是 NULL。在Trusted Oracle 中,您可以将任何有效格式的任何有效操作系统标签插入到具有 MLSLABEL 数据类型的列中。Trusted Oracle将数据隐式转换为标签的二进制格式。

二. 复合(Composite)类型。
复合类型,听名字就知道是多个类的组合体,复合类型是在标量类型的基础上衍生的类型,主要有记录(record)类型,记录表类型,对象数组 和 集合(嵌套表,VARRAYS)等类型,其中最常用的就是前两种,其定义格式如下:
记录类型的定义:
TYPE test_rec IS RECORD ( --定义记录行类型
字段1 表字段1%TYPE,



字段n 表字段n%TYPE
);

记录表类型定义:
TYPE 表类型 IS TABLE OF 类型名 INDEX BY binary_integer;
※: INDEX BY binary_integer的作用是,被声明的类型的下标就是自增长,被表类型在插入元素时,不需要初始化,不需要每次扩展增加一个空间。

三. 引用(Reference)类型。
目前我知道的就只有一种类型,就是游标数组CURSOR,关于CORSOR我曾经详细讲过可参考我之前的内容,游标CURSOR的基本用法

四. LOB(Large Object)类型。
LOB,分为内部LOB和外部LOB。内部LOB包括CLOB、BLOB、NCOLB,外部LOB包括BFILE。
内部LOB和外部OB的区别:

  1. 内部LOB的数据存储在数据库中,并且支持事务操作(提交、回退、保持点);
  2. 外部LOB的数据存储在OS文件中,并且不支持事务操作

CLOB(存放大字符数据)用于存储大批量字符数据,
BLOB(存放大二进制数据)用于存放存储无结构的二进制数据,比如音频、图像等。
NCLOB(存放大字符数据)用于存储大批量字符数据,
BFILE(存储指向OS文件的指针)对数据库外存储的大型二进制文本可进行只读操作。
※: 关于LOB的用法可以参考ORACLE DBMS_LOB的相关说明。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值