ORACLE 数据类型总结

Oracle 包含:标量 (SCALAR)、复合(COMPOSITE)、引用(REFERENCE)和LOB四种数据类型;

  标量数据类型分为七个组:数字、字符、行、日期、行标识、布尔和可信。

  数字类型:NUMBER、PLS-INTEGER和 BINARY-INTEGER。

  NUMBER是以十进制格式进行储存的,它便于储存,但是电脑会自动将它转换为二进制运算。NUMBER的定义方式是NUMBER(P,S),p是精度 (precision),s是刻度范围(scale)。精度最大值为38,scale的取值范围为-84到127 。p、s可以省略,s的默认值是0,例如NUMBER(5)、NUMBER。

  定点数的精度(p)和刻度(s)遵循以下规则:

  当s>0时,s表示小数点右边的数字的个数;

  当一个数的整数部分的长度 > p-s 时,Oracle就会报错,

  当一个数的小数部分的长度 > s 时,Oracle就会舍入;

  当s<0时,s表示小数点左边的数字的个数,Oracle就对小数点左边的s个数字进行舍入;

  当s > p 时, p表示小数点后第s位向左最多可以有多少位数字,如果大于p则Oracle报错,小数点后s位向右的数字被舍入。

  BINARY_INTENER用来描述不存储在数据库中,但是需要用来计算的带符号的整数值。它以2的补码二进制形式表述。循环计数器经常使用这种类型。

PLS_INTEGER和BINARY_INTENER唯一区别是在计算当中发生溢出时,BINARY_INTENER型的变量会被自动指派给一个 NUMBER型而不会出错,PLS_INTEGER型的变量将会发生错误。

  字符:CHAR、VARCHAR2(VARCHAR)、LONG、NCHAR和NVARCHAR2几种类型。

  CHAR:描述定长的字符 串,如果实际值不够定义的长度,系统将以空格填充。它的声明方式如下CHAR(L),L为字符串长度,缺省为1,作为变量最大32767个字符,作为数据 存储在ORACLE8中最大为2000。

  VARCHAR2(VARCHAR): 描述变长字符串。它的声明方式如下VARCHAR2(L),L为字符串长度,没有缺省值,作为变量最大32767个字节,作为数据存储在ORACLE8中 最大为4000。在多字节语言环境中,实际存储的字符个数可能小于L值,例如:当语言环境为中文(SIMPLIFIED CHINESE_CHINA.ZHS16GBK)时,一个VARCHAR2(200)的数据列可以保存200个英文字符或者100个汉字字符。

  LONG:在数据库存储中可以用来保存高达2G的数据,作为变量,可以表示一个最大长度为32760字节的可变字符串。它是从早期版本中继承来的。现在如果想存储大容量的数据,Oracle推荐使用CLOB和NCLOB数据类型。在表和SQL语句中使用LONG类型有许多限制。CLOB和NCLOB CLOB和NCLOB数据类型可以存储多达4GB的字符数据。NCLOB数据类型可存储NLS数据。

  NCHAR、NVARCHAR2:国家字符集,与环境变量NLS指定的语言集密切相关,NCHAR和NVARCHAR2数据类型分别存储固定长度与可变长度的字符数据,但是它们使用的是和数据库其他类型不同的字符集。在创建数据库时,需要指定所使用的字符集,以便对数据库中数据进行编码。还可以指定一个辅助的字符集[即本地语言集(National Language Set,简称NLS)]。NCHAR和NVARCHAR2类型的列使用辅助字符集,使用方法和CHAR、VARCHAR2相同。varchar2是oracle提供的独特的数据类型,oracle保证在任何版本中该数据类型向上和向下兼容,但不保证varchar。因为 varchar是标准sql提供的数据类型,有可能随着sql标准的变化而改变,推荐用varchar2。CHAR如果存放字母数字占1个字节,存放 GBK编码的汉字存放2个字节,存放UTF-8编码的汉字占用3个字节;NCHAR根据所选字符集来定义存放字符的占用字节数,一般都为2个字节存放一个 字符(不管字符或者汉字)。同理VARCHAR2与NVARCHAR2的区别。在Oracle9i中,可以以字符而不是字节为单位来表示NCHAR和NVARCHAR2列的长度。

  行:包括RAW和LONG RAW两种类型。用来存储二进制数据,不会在字符集间转换。

RAW:类似于 CHAR,声明方式RAW(L),L为长度,以字节为单位,作为数据库列最大2000,作为变量最大32767字节。主要用于对数据库进行解释。指定这两种类型时,Oracle以位的形式来存储数据。RAW数据类型一般用于存储有特定格式的对象,如位图。 RAW数据类型可占用2KB的空间,而LONG RAW数据类型则可以占用2GB大小。

LONG RAW:类似于LONG,作为数据库列最大存储2G字节的数据,作为变量最大32760字节。raw这种格式可以用来保存较小的图形文件或带格式的文本文件,如Miceosoft Word文档。raw是一种较老的数据类型,将来会逐渐被BLOB、CLOB、NCLOB等大的对象数据类型所取代。long raw 无可变长二进制数据,最大长度是2GB。Oracle用这种格式来保存较大的图形文件或带格式的文本文件,如Miceosoft Word文档,以及音频、视频等非文本文件。在同一张表中不能同时有long类型和long raw类型,long raw也是一种较老的数据类型,将来会逐渐被BLOB、CLOB、NCLOB等大的对象数据类型所取代。

   日期:只有一种类型DATE,用来存储时间信息,站用7个字节(从世纪到秒),绝对没有“千年虫”问题。通过修改实例的参数NLS_DATE_FORMAT,可以改变实例中插入日期的格式。在一个会话期间,可以通过ALTER SESSION SQL命令来修改日期,或者通过使用SQL语句的TO_DATE表达式中的参数来更新一个特定值。

   行标识ROWID:只有一种类型ROWID,用来存储“行标识符”,可以利用ROWIDTOCHAR函数来将行标识转换成为字符。ROWID是一种特殊的列类型,称之为伪列(pseudocolumn)。伪列在SQL SELECT语句中可以像普通列那样被访问。Oracle数据库中每行都有一个伪列。ROWID表示行的地址,ROWID伪列用ROWID数据类型定义。ROWID与磁盘驱动的特定位置有关,因此,ROWID是获得行的最快方法。但是,行的ROWID会随着卸载和重载数据库而发生变化,因此建议不要在事务 中使用ROWID伪列的值。例如,一旦当前应用已经使用完记录,就没有理由保存行的ROWID.不能通过任何SQL语句来设置标准的ROWID伪列的值。列或变量可以定义成ROWID数据类型,但是Oracle不能保证该列或变量的值是一个有效的ROWID。

 布尔:只有一种类型BOOLEAN,仅仅可以表示TRUE、FALSE或者NULL。

  可信:只有一种类型MLSLABEL,可以在TRUSTED ORACLE中用来保存可变长度的二进制标签。在标准ORACLE中,只能存储NULL值。

  复合类型(COMPOSITE):标量类型是经过预定义的,利用这些类型可以衍生出一些复合类型。

  记录:可以看作是一组标量的组合结构,它的声明方式如下:

  TYPE record_type_name IS RECORD

  ( filed1 type1 [NOT NULL] [:=expr1]

  .......

  filedn typen [NOT NULL] [:=exprn] )

  其中,record_type_name是记录类型的名字。(是不是看着象 CREATE TABLE?......)引用时必须定义相关的变量,记录只是TYPE,不是VARIABLE。

  表:不是物理存储数据的表,在这里是一种变量类型,也称为PL/SQL表,它 类似于C语言中的数组,在处理方式上也相似。它的声明方式如下:

  TYPE table_type_name IS TABLE OF scalar_type INDEX BY BINARY_INTENER;

  其中,table_type_name是类型的名字,scalar_type 是一种标量类型的类型声明。引用时也必须定义相关的变量。表和数组不同,表有两列,KEY和VALUE,KEY就是定义时声明的 BINARY_INTENER,VALUE就是定义时声明的scalar_type。

  引用类型(REFERENCE):在PL/SQL8.0之前,只有一种类型--REF CURSOR,也就是游标。它的定义较为简单,CURSOR cursor_name IS select .....from.....。在PL/SQL8.0之后,引入了REF类型,它指向一个对象。这种类型将单 独讲解。(等我弄明白再说,免得在高人面前......)

  LOB型:LOB变量主要是用来存储大量数据的数据库字段,最大可以存储4G字节的内容。主要有:

  CLOB:和ORA7中的LONG类型相似,存储单字节字符数据,别用来存中文,只能存储字符数据,可以指定将一个LOB数据保存在Oracle数据库内,还是指向一个包含次数据的外部文件,LOB可以参与事务。管理LOB中的数据必须通过DBMS_LOB PL/SQL内置软件包或者OCI接口;

  NCLOB:用来存储定宽多字节字符数据,保存本地语言字符集数据。

  BLOB:和LONG RAW相似,用来存储无结构的二进制数据。

  BFILE:它用来允许ORACLE对数据库外存储的大型二进制文本进行只读形式的访问。 LOB(大型对象)数据类型,可以保存4GB的信息。  

Oracle 9i共提供了16种标量数据类型:

名称含义

Char用于描述定长的字符型数据,长度<=2000字节

varchar2用于描述变长的字符型数据,长度<=4000字节

nchar用来存储Unicode字符集的定长字符型数据,长度<=1000字节

nvarchar2用来存储Unicode字符集的变长字符型数据,长度<=1000字节

number用来存储整型或者浮点型数值

Date用来存储日期数据

Long用来存储最大长度为2GB的变长字符数据

Raw用来存储非结构化数据的变长字符数据,长度<=2000字节

Long raw用来存储非结构化数据的变长字符数据,长度<=2GB

rowid用来存储表中列的物理地址的二进制数据,占用固定的10个字节

Blob用来存储多达4GB的非结构化的二进制数据

Clob用来存储多达4GB的字符数据

nclob用来存储多达4GB的Unicode字符数据

Bfile用来把非结构化的二进制数据存储在数据库以外的操作系统文件中

urowid用来存储表示任何类型列地址的二进制数据

float用来存储浮点数

 NULL

    NULL值是关系数据库的重要特征之一。实际上,NULL不代表任何值,它表示没有值。如果要创建表的一个列,而这个列必须有值,那么应将它指定为NOT NULL,这表示该列不能包含NULL值。

    任何数据类型都可以赋予NULL值。NULL值引入了SQL运算的三态逻辑。如果比较的一方是NULL值,那么会出现3种状态:TURE、FALSE以及两者都不是。

    因为NULL值不等于0或其他任何值,所以测试某个数据是否为NULL值只能通过关系运算符IS NULL来进行。

    NULL值特别适合以下情况:当一个列还未赋值时。如果选择不使用NULL值,那么必须对行的所有列都要赋值。这实际上也取消了某列不需要值的可能性,同时对它赋的值也很容易产生误解。这种情况则可能误导终端用户,并且导致累计操作的错误结果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值