<!-- [if gte mso 9]><xml><w:WordDocument><w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel><w:DisplayHorizontalDrawingGridEvery>0</w:DisplayHorizontalDrawingGridEvery><w:DisplayVerticalDrawingGridEvery>2</w:DisplayVerticalDrawingGridEvery><w:DocumentKind>DocumentNotSpecified</w:DocumentKind><w:DrawingGridVerticalSpacing>7.8</w:DrawingGridVerticalSpacing><w:View>Normal</w:View><w:Compatibility></w:Compatibility><w:Zoom>0</w:Zoom></w:WordDocument></xml><![endif]-->
数据类型(datatype )是列( column )或存储过程中的一个属性。
Oracle支持的数据类型可以分为三个基本种类:字符数据类型、数字数据类型以及表示其它数据的数据类型。
字符数据类型
CHARCHAR数据类型存储固定长度的子符值。一个 CHAR 数据类型可以包括 1 到 2000 个字符。如果对 CHAR 没有明确地说明长度,它的默认长度则设置为 1. 如果对某个 CHAR 类型变量赋值,其长度小于规定的长度,那么 Oracle 自动用空格填充。
VARCHAR2存储可变长度的字符串。虽然也必须指定一个 VARCHAR2 数据变量的长度,但是这个长度是指对该变量赋值的的最大长度而非实际赋值长度。不需要用空格填充。最多可设置为 4000 个字符。
因为VARCHAR2 数据类型只存储为该列所赋的字符(不加空格),所以 VARCHAR2 需要的存储空间比 CHAR 数据类型要小。
Oracle推荐使用 VARCHAR2
NCHAR和 NVARCHAR2NCHAR 和 NVARCHAR2 数据类型分别存储固定长度与可变长度的字符数据,但是它们使用的是和数据库其他类型不同的字符集。在创建数据库时,需要指定所使用的字符集,以便对数据库中数据进行编码。还可以指定一个辅助的字符集[即本地语言集( NationalLanguageSet ,简称 NLS )]。 NCHAR 和 NVARCHAR2 类型的列使用辅助字符集。
在Oracle9i 中,可以以字符而不是字节为单位来表示 NCHAR 和 NVARCHAR2 列的长度。
LONGLONG数据类型可以存放 2GB 的字符数据,它是从早期版本中继承来的。现在如果想存储大容量的数据, Oracle 推荐使用 CLOB 和 NCLOB 数据类型。在表和 SQL 语句中使用 LONG 类型有许多限制。
CLOB和 NCLOBCLOB 和 NCLOB 数据类型可以存储多达 4GB 的字符数据。 NCLOB 数据类型可存储 NLS 数据。
数字数据类型
Oracle使用标准、可变长度的内部格式来存储数字。这个内部格式精度可以高达 38 位。
NUMBER数据类型可以有两个限定符,如:
columnNUMBER( precision , scale )
precision表示数字中的有效位。如果没有指定 precision 的话, Oracle 将使用 38 作为精度。
scale表示数字小数点右边的位数, scale 默认设置为 0. 如果把 scale 设成负数, Oracle 将把该数字取舍到小数点左边的指定位数。
日期数据类型
Oracle标准日期格式为: DD-MON-YYHH : MI : SS
通过修改实例的参数NLS_DATE_FORMAT ,可以改变实例中插入日期的格式。在一个会话期间,可以通过 ALTERSESSIONSQL 命令来修改日期,或者通过使用 SQL 语句的 TO_DATE 表达式中的参数来更新一个特定值。
其它的数据类型
RAW和 LONGRAWRAW 和 LONGRAW 数据类型主要用于对数据库进行解释。指定这两种类型时, Oracle 以位的形式来存储数据。 RAW 数据类型一般用于存储有特定格式的对象,如位图。 RAW 数据类型可占用 2KB 的空间,而 LONGRAW 数据类型则可以占用 2GB 大小。
ROWIDROWID是一种特殊的列类型,称之为伪列( pseudocolumn )。 ROWID 伪列在 SQLSELECT 语句中可以像普通列那样被访问。 Oracle 数据库中每行都有一个伪列。 ROWID 表示行的地址, ROWID 伪列用 ROWID 数据类型定义。
ROWID与磁盘驱动的特定位置有关,因此, ROWID 是获得行的最快方法。但是,行的 ROWID 会随着卸载和重载数据库而发生变化,因此建议不要在事务中使用 ROWID 伪列的值。例如,一旦当前应用已经使用完记录,就没有理由保存行的 ROWID. 不能通过任何 SQL 语句来设置标准的 ROWID 伪列的值。
列或变量可以定义成ROWID 数据类型,但是 Oracle 不能保证该列或变量的值是一个有效的 ROWID.
LOB
LOB(大型对象)数据类型,可以保存 4GB 的信息。 LOB 有以下 3 种类型:
。CLOB ,只能存储字符数据
。NCLOB ,保存本地语言字符集数据
。BLOB ,以二进制信息保存数据
可以指定将一个LOB 数据保存在 Oracle 数据库内,还是指向一个包含次数据的外部文件。
LOB可以参与事务。管理 LOB 中的数据必须通过 DBMS_LOBPL/SQL 内置软件包或者 OCI 接口。
为了便于将LONG 数据类型转换成 LOB , Oracle9i 包含许多同时支持 LOB 和 LONG 的函数,还包括一个 ALTERTABLE 语句的的新选择,它允许将 LONG 数据类型自动转换成 LOB.
BFILE
BFILE数据类型用做指向存储在 Oracle 数据库以外的文件的指针。
XMLType
作为对XML 支持的一部分, Oracle9i 包含了一个新的数据类型 XMLType. 定义为 XMLType 的列将存储一个在字符 LOB 列中的 XML 文档。有许多内置的功能可以使你从文当中抽取单个节点,还可以在 XMLType 文档中对任何节点创建索引。
用户自定义数据
从Oracle8 以后,用户可以定义自己的复杂数据类型,它们由 Oracle 基本数据类型组合而成。
AnyType、 AnyData 和 AnyDataSet
Oracle包括 3 个新的数据类型,用于定义在现有数据类型之外的数据结构。其中每种数据类型必须用程序单元来定义,以便让 Oracle9i 知道如何处理这些类型的特定实现。
类型转换
Oracle会自动将某些数据类型转换成其他的数据类型,转换取决于包括该值的 SQL 语句。
数据转换还可以通过Oracle 的类型转换函数显示地进行。
连接与比较
在大多数平台上OracleSQL 中的连接操作符用两条竖线( || )表示。连接是将两个字符值连接。 Oracle 的自动类型转换功能使得两个数字值也可以进行连接。
NULL
NULL值是关系数据库的重要特征之一。实际上, NULL 不代表任何值,它表示没有值。如果要创建表的一个列,而这个列必须有值,那么应将它指定为 NOTNULL ,这表示该列不能包含 NULL 值。
任何数据类型都可以赋予NULL 值。 NULL 值引入了 SQL 运算的三态逻辑。如果比较的一方是 NULL 值,那么会出现 3 种状态: TURE 、 FALSE 以及两者都不是。
因为NULL 值不等于 0 或其他任何值,所以测试某个数据是否为 NULL 值只能通过关系运算符 ISNULL 来进行。
NULL值特别适合以下情况:当一个列还未赋值时。如果选择不使用 NULL 值,那么必须对行的所有列都要赋值。这实际上也取消了某列不需要值的可能性,同时对它赋的值也很容易产生误解。这种情况则可能误导终端用户,并且导致累计操作的错误结果。
来源:http://www.cnblogs.com/cxd4321/archive/2008/04/14/1153201.html
2465

被折叠的 条评论
为什么被折叠?



