版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Oracle数据类型,单世民,Oracle数据类型概述,LONG,NVARCHAR2,VARCHAR2,NCHAR,CHAR,RAW,BLOB,LONG RAW,NUMBER,BINARY_FLOAT,BINARY_DOUBLE,BFILE,CLOB,NCLOB,DATE,TIMESTAMP,TIMESTAMP WITH TIME ZONE,TIMESTAMP WITH LOCAL TIME ZONE,INTERVAL YEAR TO MONTH,INTERVAL DAY TO SECOND,ROWID,UROWID,字符类型,数值类型,二进制类型,日期和时间 类型,LONG类型,LOB类型,
2、ROWID/ UROWID 类型,字符类型,概述Oracle中的字符数据类型包括CHAR、VARCHAR2以及带“N”的相应变体(NCHAR和NVARCHAR2),这些字符数据类型能存储2000字节或4000字节的文本。这些文本会由数据库根据需要在不同的字符集(character set)之间进行转换。CHAR、VARCHAR2、NCHAR、NVARCHAR2都是以同样的格式进行存储。,字符类型,NLS(国家语言支持)NLS全称是National Language Support。NLS是数据库的一个非常强大的特性,控制着数据的许多方面,最重要的两个方面是: 文本数据持久存储在磁盘上时如何编码
3、 透明地将数据从一个字符集转换到另一个字符集,字符类型,如何查看当前的数据库字符集设定,SELECT * FROM nls_database_parameters WHERE parameter=NLS_CHARACTERSET,字符类型,CHARCHAR是定长字符串类型,总会用空格填充来达到其最大长度。CHAR字段最多可以存储2000字节的信息。正常情况下,size的单位默认为BYTE。,CHAR(size BYTE|CHAR),字符类型,VARCHAR2VARCHAR2是变长字符串类型,不会用空格填充至最大长度。此类型最多可存储4000字节的信息。,VARCHAR2(size BYTE|C
4、HAR),字符类型,NCHAR/NVARCHAR2两种数据类型用于包含UNICODE格式数据的字符串,以支持某些应用中对多字节数据的需求。两者的存储字符数上界分别是2000/4000字节。 NVARCHAR2和NCHAR与相应的VARCHAR2和CHAR的区别在于: 文本采用数据库的国家字符集来存储和管理,而不是默认字符集 长度总是字符数,而CHAR/VARCHAR2可能会指定是字节还是字符,字符类型,判断:vchar_col列可以存储多少字符(每字符4字节)? 1000字符VARCHAR2中存储的字节数上界是4000。如果选择的字符集中每个字符都要使用4个字节来表示,那么vchar_col字
5、段只能放下1000个字符,CREATE TABLE T ( vchar_col VARCHAR2(4000 CHAR);,字符类型,判断:是否可以如下定义vchar_col列? 不可以NVARCHAR2中存储的字节数上界也是4000。但是定义时长度参数总是表示字符数,没有字节(BYTE)还是字符(CHAR)的选择问题,CREATE TABLE T ( vchar_col NVARCHAR2(4000 CHAR);,数值类型,NUMBEROracle9i Release 2及以前的版本只支持一种适合存储数值数据的固有数据类型。在所有的Oracle版本中NUMBER都得到支持 NUMBER类型精度
6、可达38位。可以存储小到10e-130、大到(但不包括) 10e126的任何数值,数值类型,NUMBER 精度(precision)也称为总位数,取值范围138,默认值为38,也可以用字符*表示38 小数位数(scale)也称为小数点右边的位数,合法值-48127,默认值取决于是否指定了精度。如果没有指定精度,小数位数则默认有最大的取值区间。如果指定了精度,小数位数默认为0,NUMBER(precision,scale),数值类型,判断:num_col字段是否可以存储小数? 可以如果没有指定精度,小数位数则默认有最大的取值区间,换句话说,定义NUMBER的列会存储浮点数(有小数),CREATE
7、 TABLE T ( num_col NUMBER);,数值类型,判断:num_col字段是否可以存储小数? 不可以如果指定小数位数为0,那么相应字段只能存储整数数据(没有小数),CREATE TABLE T ( num_col NUMBER(5);,数值类型,判断:num_col字段是否可以存储123456? 不可以123456含有6位数字,超过了定义时所规定的精度(5位)。因此,可以使用精度来保证某些数据完整性约束。,CREATE TABLE T ( num_col NUMBER(5,0);,数值类型,判断:向num_col插入123.456,Oracle是否会报错? 不会小数位数可以用于
8、控制数值的“舍入”。尽管123.456超过了5位,但是Oracle会利用小数位数将123.456”舍入”为只有两位小数,这就得到了123.46,再根据精度来验证123.46,满足精度要求,CREATE TABLE T ( num_col NUMBER(5,2);,数值类型,判断:向num_col插入1234,Oracle是否会报错? 会数值1234.00的总位数超过了5位。指定小数位数为2时,小数点左边最多只能有3位,右边有两位。因此,1234超过了定义的精度。NUMBER(5,2)列的存储范围是-999.99999.99,CREATE TABLE T ( num_col NUMBER(5,2
9、);,数值类型,判断:是否可以如下定义num_col字段? 可以将小数位数定义为负值,作用在于允许对小数点左边的值舍入,CREATE TABLE T ( num_col NUMBER(5,-2);,数值类型,判断:向num_col插入123.456,数据库会最终存储的数值是多少? 100就像NUMBER(5,2)将值舍入为最接近的0.01量级一样,NUMBER(5,-2)会把数值舍入为与之最接近的100量级,CREATE TABLE T ( num_col NUMBER(5,-2);,数值类型,判断:向num_col插入1234567,Oracle是否会报错? 不会精度指示了舍入后数值允许有多
10、少位,并使用小数位数来确定如何舍入,CREATE TABLE T ( num_col NUMBER(5,-2),数值类型,判断:NUMBER数据类型是定长类型? 错 NUMBER类型是一种变长格式,长度为022字节。随着有效数字数字的增加,NUMBER类型需要越来越多的存储空间。每增加两位有效数字,就需要另外一个字节的存储空间。Oracle存储一个数时,会使用尽可能少的内容来表示。为此,它会存储有效数字、用户指定小数点位置的一个指数,以及有关数值符号的信息,数值类型,BINARY_FLOAT/BINARY_DOUBLE类型在Oracle 10g之前的版本中没有这两种类型。他们就是IEEE标准浮
11、点数,用于近似数值,没有NUMBER类型精确。,BINARY_FLOAT BINARY_DOUBLE,数值类型,特殊值,数值类型,Oracle在语法上支持的其他数值数据类型,NUMBER,NUMERIC(p,s),DECIMAL(p,s),DEC(p,s),INTEGER,INT,SMALLINT,FLOAT(b),DOUBLE PRECISION,REAL,二进制类型,数据库中以二进制类型存储的二进制数据不会进行字符集转换,而文本类型需要进行字符集转换 Oracle支持3种数据类型来存储二进制数据 RAW类型能够存储最多2000字节的二进制数据 BLOB类型也即大对象类型 LONG RAW类
12、型此类型是为了支持向后兼容性提供的,二进制类型,RAWRAW类型是一个变长度的二进制串,物理上限是2000字节 ,不能存储可直接显示的字符数据。当使用SQL*PLUS等许多工具处理RAW数据时,这些RAW数据会被隐式地转换为一个VARCHAR2类型。,RAW(size),二进制类型,判断:对于仅包含一个16字节长RAW类型的表T,通过SQL*Plus,Oracle会如何处理如下所示的命令?能成功执行插入字符abcdef么? 会成功执行插入操作,但是插入的数据并不是字符串abcdef,而是一个3字节的RAW数据。SQL*PLUS将RAW类型获取为一个串时,会隐式地调用RAWTOHEX函数,而插入
13、串时会隐式地调用HEXTORAW函数。,INSERT INTO T VALUES( abcdef );,二进制类型,判断:对于仅包含一个16字节长RAW类型的表T,通过SQL*Plus,Oracle会如何处理如下所示的命令? 报错,错误信息为”invalid hex number”。,INSERT INTO T VALUES( abcdefgh );,日期类型,Oracle固有数据类型DATE、TIMESTAMP和INTERVAL是紧密相关的。DATE和TIMESTAMP类型可以存储固定日期/时间。INTERVAL类型可以存储一个时间量。 TIMESTAMP相对于DATE的两个优势: 支持小数
14、秒 支持时区,日期类型,判断:DATE类型就是用来存储日期(年月日)的? 错DATE类型不仅可以用来存储日期,还存储了有关时间的信息,精度可以到达整数秒。,日期类型,DATEDATE类型是一个7字节的定宽日期/时间数据类型。它总是包含7个属性,包括:世纪、世纪中的哪一年、月份、月份中的哪一天、小时、分钟和秒。Oracle使用一种内部格式来表示这些信息。,日期类型,判断:在书写过程中使用的日期格式会以某种方式影响磁盘上存储的数据,并且会影响数据如何存储? 错格式对数据如何存储根本没有任何影响。格式只是用于将存储DATE所用的二进制格式转换为一个串,或者将一个串转换为用于存储DATE的二进制格式,
15、对于TIMESTAMP和INTERVAL也是如此,日期类型,日期类型到底是怎么存储的?Oracle以数值方式存储日期。Oracle支持儒略历(Julian date)。当系统使用儒略历时,它指定一个开始日期为第一天;接下来的一天为第二天等等,每个次日都将计数值增加1。Oracle所支持的儒略历的开始日期是公元前4712年的1月1日。用户使用熟悉的文本表示方式输入日期,Oracle在后台将它们转换成对应的儒略历。此外,儒略历还可以存储时间值,时间以小数值存储在表示日期的整数值之后。,日期类型,使用日期相关的系统变量存储时间信息时,应注意在查询时适当结合使用TRUNC函数。,ROWID/UROWI
16、D类型,ROWIDROWID是数据库中一行的地址。ROWID中编入了足够多的信息,足以在磁盘上找到行,以及标识ROWID所指向的对象。ROWID并不真正存储在行中,而是行的一个推导属性,基于行的物理地址生成。 Oracle中除了索引组织表(IOT)外的所有行都有ROWID。ROWID主要用于作为物理地址来减少行更新操作的操作代价,加快访问任何表中某一行的速度。,ROWID/UROWID类型,UROWIDUROWID是ROWID的“近亲”。它用于比如索引组织表(IOT)和通过异构数据库网关访问的没有固定ROWID的表。 UROWID基于行的主键生成,是行主键值的一个表示。但是,UROWID并不作为一个单独的列存在,而只是作为现有列的一个函数。,LONG类型,Oracle中的LONG类型有两种: LONG文本类型:可以存储2GB的文本 LONG RAW类型:可以存储
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 肘管综合征患者的个案护理
- BIM碰撞检查方案(完整版)
- 2026年听力语言康复培训试题及答案
- 人行道铺装监理规划
- 2026年安徽省网格员招聘考试备考题库及答案解析
- 2026年哈尔滨市道外区网格员招聘笔试备考题库及答案解析
- 2026年安徽省淮北市网格员招聘考试参考题库及答案解析
- 2026年苏州市吴中区网格员招聘笔试备考题库及答案解析
- 大学生转正工作总结
- 2026年天津市河东区网格员招聘考试备考题库及答案解析
- 4微检查 高中语文必背古诗文60篇打卡表
- 第十三章-危重症患者系统功能监测
- 班级电脑壁纸桌面励志班主任班级文化班规可分区可修改含内容课件两篇
- 建筑面积相关术语
- 焦虑状态疾病查房
- 城南控规修改说明书
- Bachmann控制器使用说明
- 中小学文明校园评比细则
- 宴席基本知识
- YC/T 382-2010烟草及烟草制品质体色素的测定高效液相色谱法
- GB/T 8982-2009医用及航空呼吸用氧
评论
0/150
提交评论