首页 > 代码库 > Oracle第二章——Oracle数据类型

Oracle第二章——Oracle数据类型

当创建一个表时,需要为表的各个列指定数据类型,Oracle的数据类型主要有5种,字符类型、数值类型、日期时间类型、LOB类型和伪列。

一、字符类型

  1、CHAR类型

    定长字符串,长度为1~2000字节,如果定义时未指定大小,默认为1,使用时,若存储的值大小小于指定的长度,则用空格填充剩余长度,

    若大于指定长度,则报错。示例:CHAR(20),若此时存储一个长度为10的字符串,则还是占用20个字节的空间。(此外,还可以用

    CHAR(20CHAR)的方式进行定义,这种方式的意思是存储多少个字符,而不是字节)。

  2、VARCHAR2类型

    可变字符串,长度为1~4000字节,定义时需指定大小,使用时,若存储的值大小小于指定的长度,则长度缩小为值的大小,若大于指定长度,

    则报错。(Oracle也有VARCHAR类型,但该类型有可能会被在未来的版本中被重新定义,所以不推荐使用)示例:VARCHAR2(20),

    若此时存储一个长度为10的字符串,则占用10个字节的空间。(也可以使用VARCHAR2(20CHAR)的方式定义,意思同CHAR类型)。

  3、NCHAR类型

    存储Unicode字符的定长字符串,既存储双字节字符类型数据,每个字符占用2个字节,其他特性与CHAR类型相似。示例:NCHAR(20),

    若此时存储一个长度为10的字符串,则占用40个字节的空间。

  4、NVARCHAR2类型

    存储Unicode字符的可变字符串,其他特性与VARCHAR2类型相似。示例:NVARCHAR2(20),若此时存储一个长度为10的字符串,

    则占用20个字节的空间。

二、数值类型

  1、NUMBER类型

    NUMBER类型可以存储正数、负数、0、定点数和浮点数。格式为NUMBER(P,S),其中P为精度,表示数值的有效位数(从左边第一个不为0

    的数字算起,不包括小数点和负号为有效位数),在1~38之间。S为范围,表示小数点右边数字的位数,在-84~127之间。使用规则:

    将值精确到小数点右边S位并四舍五入,判断有效位数是否<=P。以下结合几个示例进行说明:

    (1)、NUMBER(3):当要存储的值是100时,精确到小数点右边0位并四舍五入后值为100,有效位数为3,可以存储。当值是3.563时,

        精确到小数点右边0位并四舍五入后值为4,有效位数为1,可以存储。当值是2350.5时,精确到小数点右边0位并四舍五入后值为2351,

        有效位数为4,不可以存储。

    (2)、NUMBER(3,2):当要存储的值是100时,精确到小数点右边2位并四舍五入后值为100.00,有效位数为5,不可以存储。当值是3.563时,

        精确到小数点右边2位并四舍五入后值为3.56,有效位数为3,可以存储。当值是2350.5时,精确到小数点右边2位并四舍五入后

        值为2350.50,有效位数为6,不可以存储。

    (3)、NUMBER(3,-2):当S为负数时,较为特殊,会将值左边|S|(|S|为S的绝对值)位的值进行四舍五入后取0且不计入有效位数,

        如:当要存储的值是100时,实际值为100,有效位数为1,可以存储。当值是3.5时,实际值为0,有效位数为1,可以存储。

        当值是2350.5时,实际值为2400,有效位数为2,可以存储。

  2、INTEGER类型

    是NUMBER的子类型,等同于NUMBER(38,0),用于储存整数。

  3、FLOAT类型

    是NUMBER的子类型,格式为FLOAT(n),n在1~126之间,这个值是二进制的精度,最大值126转换为十进制大概为38。

三、日期时间类型

  1、DATE类型

    存储日期和时间的类型,使用7个字节的固定长度,存储世纪、年、月、日、时、分、秒,最小时间为公元前4712年1月1日,最大时间为

    公元9999年12月31日。可以使用SYSDATE函数获取当前时间的DATE类型。

  2、TIMESTAMP类型

    存储日期和时间的类型,使用7到12字节长度,秒数精确到小数秒(不指定精度的情况下为小数点后6位,指定精度可以达到9位),

    且包含时区信息。可以使用SYSTIMESTAMP函数获取当前时间的TIMESTAMP类型。

四、LOB类型

  1、CLOB类型

    存储大量字符数据,可以存储单字节字符数据和多字节字符数据,主要用于存储非结构化XML文档。

  2、BLOB类型

    存储二进制对象,如图片、视频和音乐。

  3、BFILE类型

    存储一个定位器,该定位器指向一个服务器文件系统的二进制文件,最大为4G。

  4、NCLOB类型

    与CLON类似,不过NCLON可同时支持固定宽度字符集和可变宽度字符集,最大为4G。

  操作LOB类型数据可以使用PL/SQL提供的DBMS_LOB程序包来完成,使用LOB类型要合理分配好表空间,否则会对性能造成影响。

五、伪列

  伪列的定义:类似于表中的列,但并未实际存储在表中,无法对伪列进行增删改。

  1、ROWID

    表中的每一行都有一个地址,可以唯一的标识数据库中的一行,ROWID可以返回这个地址,可以用来作为查询条件查询唯一行,提高查询效率,

    还可以查看行在表中是如何存储的。

  2、ROWNUM

    ROWNUM伪列可以为查询结果从1开始进行排序,可以用来限制返回行数,Oracle的分页就是使用ROWNUM实现的。需注意,使用ROWNUM

    必须包含1,否则无法查出数据,也就是说,ROWNUM=1可以查询出结果集中第一行的数据,但ROWNUM=2是无法查询任何数据的,

    还有ROWNUM>2也是无法查询出任何数据的,但使用ROWNUM<2就可以查询出两条数据,这是因为ROWNUM是一个从1开始的伪列,

    Oracle认为ROWNUM>n(n为大于1的自然数)的条件不成立,所有无法查出数据。

  (关于伪列的更多资料可以查看官方文档:http://docs.oracle.com/cd/E11882_01/server.112/e41084/pseudocolumns.htm#SQLRF0025)

Oracle第二章——Oracle数据类型