Oracle数据类型

Oracle数据类型
字符类型CHAR 、 NCHAR VARCHAR2 、 NVARCHAR2 LONG NUMBER 数值类型NUMBER 日期类型TIMESTAMPRAW、LONG RAW 其它类型LOBBFILEXML TYPE及用户自定义类型
1、CHAR及VARCHAR2类型
如果对某个CHAR类型字段/变量赋值,其长度小于规定的长度,那么Oracle自动用空格填充;如果大于规定的长度,则出错。ASCII码字符集中包含的字符占一个字节,汉字占两个字节。
VARCHAR2类型数据存储的是可变长的字符串,具体定义时指明其最大长度,实际使用时,如果数据长度没有达到规定的字段长度最大值时,Oracle系统会根据数据的实际实际长度为其分配存储空间(自动调节字段长度),如果大于规定的长度,则出错。Oracle推荐使用VARCHAR2型保存文本信息。VARCHAR2类型使用格式为VARCHAR2(n),其中参数n指定对该变量赋值的最大长度而非实际赋值长度,其允许取值范围1~4000(字节),由于VARCHAR2类型数据只存储有效的字符信息(不会追加空格符),所以会比CHAR型节省存储空间。通常在数据库表中字段值长度变化范围较大、且其内容不频繁变化时(比如留言信息),可采用VARCHAR2数据类型以节省存储开销。在实际应用开发中,VARCHAR2是最常用的字符数据类型。
2、NCHAR和NVARCHAR2
NCHAR和NVARCHAR2类型数据分别存储固定长度与可变长度的字符串,但是它们使用的是和数据库其他类型不同的字符集。在创建数据库时,需要指定所使用的字符集,以便对数据中数据进行编码。还可以指定一个辅助的字符集(National Language Support,NLS)。NCHAR和NVARCHAR2类型的字段使用辅助字符集进行编码和存储。
此外,需要注意的是,在Oracle 9i中,以字符而不是字节为单位指定NCHAR和NVARCHAR2类型的长度参数,例如:
CREATE TABLE users(name NCHAR(6), sex NCHAR(1));
INSERT INTO users VALUES('医圣张仲景','男');
INSERT INTO users VALUES('Jessica','f');
上述代码中建表时指定的name、sex字段长度单位均为字符,之后添加的第一行记录未超出其各字段的长度限制('医圣张仲景'、'男'两个字符串的长度分别为5个、1个字符),因此添加操作成功,而第二行记录则添加失败('Jessica'长度为7个字符,超出了name字段最大长度6字符的限制)。
NVARCHAR2的情况类似,
3、LONG类型
LONG型数据存储的也是可变长度的字符串,其最大长度限制是2GB(2G个字节),不支持对字符串的内容进行检索(例如条件查询中比较字段值或模糊查询),如要进行字符串内容检索该使用VARCHAR2类型。
LONG是一种较老的数据类型(它是从早期版本中继承下来的),在表和SQL语句中使用LONG类型存在诸多限制,比如一个表中最多只能有一个LONG型的字段,现已不提倡使用。如要存储大容量的字符数据,Oracle推荐使用CLOB和NCLOB数据类型。
4、NUMBER类型
NUMBER类型描述的可变长的数值,允许取0、正值即负值,其使用格式为"NUMBER(m,n)",下面具体说明一下其中两个类型参数的含义:
- 参数m用于设定数据精度(有效数字的位数),取值范围1~38,默认值为38;
- 参数n用于设定小数点以后的位数,取值范围-84~127,默认值与是否显式设定了数据精度
关——如果显式设定了数据精度m的值,则n的默认值为0;否则n默认取其最大值127;如果把n设
负数,则Oracle将把该数字取舍到小数点左边的指定位数。
实际应用中使用NUMBER类型时,建议显式指定合理的精度和小数点后有效位数值(m和n),以便于数据库系统在数据输入时帮助我们进行校验,此外,也可以避免滥用默认的全精度所造成的不必要的空间开销。
NUMBER(25.6)=27,由于未指定N值,小数位数为零,所以四舍五入。NUMBER(125.354,1)=125.4,保留一位小数。
声明格式           输入值   实际存储值     说明
NUMBER(5,2)  21.4896  21.49          最大能表示999.9949999...
NUMBER(3,0)  214         214            最大能表示999.4999999...
NUMBER(3,-1) 2148.96  2150           最大能表示9994.999999...
NUMBER(3)     214.896   215            等价于: NUMBER(3, 0)
…                   2148.96   出错,值大于此列指定的允许精确度 …
…                   0.0024896 0 …
NUMBER 214.896 215 等价于: NUMBER(38, 127)
5、日期类型
Oracle中的日期数据类型包括DATE和TIMESTAMP两种,其中应用最普遍的是DATE类型。DATE类型数据记录的日期/时间信息按世纪、年、月、日、小时、分钟、秒钟来表示,也获取日期相应的星期几,其允许取值范围从公元前4712年1月1日到公元4712年12月31日,默认为公元后(AD)。
DATE类型日期的默认格式是"DD-MON-YY",其中DD表示日,MON表示月份(例如中文的“4月”,英文语言环境中则为月份英文单词的简写形式、如“Feb”),YY表示年份的最后两位数字,默认为最近一个世纪范围(目前为1950~2049)内的年份,如希望使用非默认格式来输入和获取日期信息,则须借用相关的系统函数to_date或to_char进行转换,例如:
CREATE TABLE users(name VARCHAR2(20), birth DATE);
INSERT INTO users VALUES('张三','2-12月-07');
INSERT INTO users VALUES('李四','28-5月-51');
INSERT INTO users VALUES('王五',to_date('2004-10-16','yyyy-mm-dd'));
INSERT INTO users VALUES('赵六', to_date('03/08/1876 15:23:55', 'mm/dd/yyyy hh24:mi:ss'));
SELECT name, birth FROM users;
SELECT name, to_char(birth, 'yyyy-mm-dd day hh24:mi:ss') FROM users;
要了解Oracle当前语言环境中的日期型常量缺省格式,可执行如下语句:
SELECT SYSDATE FROM dual;或是:SELECT * FROM v$nls_parameters WHERE parameter='NLS_DATE_FORMAT';
SELECT TO_CHAR(SYSDATE,'YYYY-MM-DD DAY HH24:MI:SS') FROM DUAL;
2014-06-12 THURSDAY 10:56:56
如果需要,可采用如下方式修改当前会话的语言、地域环境以及日期/时间的缺省显式格式设置:
--将语言改为英文
ALTER SESSION SET NLS_LANGUAGE=american;
--将语言改回简体中文
ALTER SESSION SET NLS_LANGUAGE='SIMPLIFIED CHINESE';
--将地域改为美国
ALTER SESSION SET NLS_TERRITORY=america;
--将地域改为中国
ALTER SESSION SET NLS_TERRITORY=CHINA;
--修改日期/时间的缺省显式格式
ALTER SESSION SET NLS_DATE_FORMAT = 'yyyy-mm-dd';
上述修改仅在本次会话范围内有效,实际开发中并不提倡这样的做法,而是应该采用相应的日期型函数(to_char()或to_date()等)进行转换,其功能更强大而灵活。
6、RAW和LONG
RAW RAW和LONG RAW数据类型用于保存变长二进制数据。RAW类型一般用于存储有特定格式的对象(如位图),单个字段最多可占用2000字节的空间,而LONG RAW数据类型则最多可占用2GB的空间。二者均属较老的数据类型,一个表中最多只能有一个LONG RAW型的字段,现已逐渐被BLOB、CLOB、NCLOB等大对象类型(见下文)所取代。
LOB(Large Object,大型对象)类型用于保存大规模的信息(其单个字段最多能容纳4GB的数据)。由于LOB类型字段容量大,且一个表中可以出现多个LOB类型的字段,很灵活,适用于数据量非常大的业务领域(如图象、档案等)。相应地,LONG、LONG RAW等类型的字段,虽然存储容量也不小,但由于一个表中最多只能有一个这样类型的字段的限制,现在已很少使用了。
LOB类型又可细分为三种:
- CLOB——字符大对象类型,最大长度4GB
- NCLOB——基于NLS国家字符集的字符字符大对象类型,最大长度4GB
- BLOB——二进制大对象类型,最大长度4GB
BFILE属于特殊的大对象类型,该类型描述的是在数据库外部保存的大型二进制对象文件,
最大长度是4GB。这种外部的LOB类型,通过数据库记录变化情况,但是数据的具体保存是在数据库外部进行的。可以简单理解为,BFILE类型数据相当于指向存储在Oracle数据库以外的文件的指针。
7、 XML Type
作为对XML支持的一部分,XMLType是从Oracle 9i开始引入的一种的数据类型。该类型字段用于存储一个XML文档,并提供了多种内置的XML文档解析处理功能,比如可以从文档中抽取单个节点、也可以在XML Type文档中对任何节点创建索引。

posted on 2014-06-12 11:41  遠離塵世の方舟  阅读(254)  评论(0编辑  收藏  举报

导航