Oracle 19数据类型

Oracle Database 处理的每个值都有一个数据类型。值的数据类型将一组固定的属性与该值相关联。这些属性导致 Oracle 将一种数据类型的值与另一种数据类型的值区别对待。例如,您可以添加 data type 的值,但不能添加 data type 的值。NUMBERRAW

在创建表或集群时,您必须为其每个列指定数据类型。在创建过程或存储函数时,必须为其每个参数指定数据类型。这些数据类型定义每个列可以包含的值或每个参数可以具有的值的域。例如,列不能接受值 February 29(闰年除外)或值 2 或 'SHOE'。随后放置在列中的每个值都采用该列的数据类型。例如,如果插入到列中,则 Oracle 会在验证字符串是否转换为有效日期后将其视为值。DATE'01-JAN-98'DATE'01-JAN-98'DATE

Oracle Database 提供了许多内置数据类型以及可用作数据类型的用户定义类型的多个类别。Oracle 数据类型的语法显示在下面的图表中。本节的内容分为以下几节:

数据类型可以是标量或非标量。标量类型包含原子值,而非标量类型(有时称为“集合”)包含一组值。大对象 (LOB) 是一种特殊形式的标量数据类型,表示二进制或字符数据的大型标量值。LOB 受到一些限制,由于其大小,这些限制不会影响其他标量类型。这些限制记录在相关 SQL 语法的上下文中。

另请参见:

LOB 列的限制

Oracle 预编译器可识别嵌入式 SQL 程序中的其他数据类型。这些数据类型称为外部数据类型,并与主变量相关联。不要将内置数据类型和用户定义类型与外部数据类型混淆。有关外部数据类型的信息,包括 Oracle 如何在它们与内置数据类型或用户定义类型之间进行转换,请参阅 Pro*COBOL 程序员指南和 Pro*C/C++ 程序员指南

数据类型::=

Oracle 内置数据类型显示在下图中。有关说明,请参阅 Oracle Built-in Data Types

Oracle_built_in_datatypes::=

character_datatypes::=

number_datatypes::=

long_and_raw_datatypes::=

datetime_datatypes::=

large_object_datatypes::=

rowid_datatypes::=

ANSI 支持的数据类型显示在下图中。ANSI、DB2 和 SQL/DS 数据类型讨论了 ANSI 支持的数据类型到 Oracle 内置数据类型的映射。

ANSI_supported_datatypes::=

有关用户定义类型的描述,请参阅用户定义类型

Oracle 提供的数据类型显示在下图中。有关说明,请参阅 Oracle 提供的类型

Oracle_supplied_types::=

any_types::=

有关类型的描述,请参阅 Any TypesAny

XML_types::=

有关 XML 类型的描述,请参阅 XML 类型

spatial_types::=

有关空间类型的描述,请参阅空间类型

Oracle 内置数据类型

Built-In Data Type Summary 表列出了可用的内置数据类型。Oracle Database 使用代码在内部标识数据类型。这是 Built-In Data Type Summary 表的 Code 列中的数字。您可以使用该函数验证表中的代码。DUMP

除了 Built-In Data Type Summary 表中列出的内置数据类型之外,Oracle Database 还在内部使用许多数据类型,这些数据类型可通过函数查看。DUMP

表 2-1 内置数据类型摘要

法典数据类型描述

1

VARCHAR2(尺寸 [ |BYTECHAR])

具有最大长度、大小、字节或字符的可变长度字符串。您必须为 指定大小。最小大小为 1 个字节或 1 个字符。最大大小为:VARCHAR2

  • 32767 字节或字符,如果MAX_STRING_SIZE = EXTENDED

  • 4000 字节或字符(如果MAX_STRING_SIZE = STANDARD

请参阅 扩展数据类型 以了解有关 initialization 参数的更多信息。MAX_STRING_SIZE

BYTE指示该列将具有字节长度语义。 指示该列将具有字符语义。CHAR

1

NVARCHAR2(size)

具有最大长度大小字符的可变长度 Unicode 字符串。您必须为 指定大小。字节数最多可以是编码大小的 2 倍,编码的字节数最多可以是 3 倍最大大小由国家字符集定义决定,上限为:NVARCHAR2AL16UTF16UTF8

  • 32767 字节MAX_STRING_SIZE = EXTENDED

  • 4000 字节,如果MAX_STRING_SIZE = STANDARD

请参阅 扩展数据类型 以了解有关 initialization 参数的更多信息。MAX_STRING_SIZE

2

NUMBER [ (p [, s]) ]

具有精确度 p 和小数位数 s 的数字。精度 p 的范围是 1 到 38。等级 s 的范围可以从 -84 到 127。精度和小数位数均采用十进制数字。一个值需要 1 到 22 个字节。NUMBER

2

FLOAT [(p)]

具有精度 p 的数据类型的子类型。值在内部表示为 。精度 p 的范围可以是 1 到 126 个二进制数字。一个值需要 1 到 22 个字节。NUMBERFLOATNUMBERFLOAT

8

LONG

可变长度的字符数据,最大 2 GB 或 231 -1 字节。提供向后兼容性。

12

DATE

有效日期范围为公元前 4712 年 1 月 1 日至公元 9999 年 12 月 31 日。默认格式由参数显式确定或由参数隐式确定。大小固定为 7 字节。此数据类型包含日期时间字段 、 、 和 。它没有秒的小数部分或时区。NLS_DATE_FORMATNLS_TERRITORYYEARMONTHDAYHOURMINUTESECOND

100

BINARY_FLOAT

32 位浮点数。此数据类型需要 4 个字节。

101

BINARY_DOUBLE

64 位浮点数。此数据类型需要 8 个字节。

180

TIMESTAMP [(fractional_seconds_precision)]

日期的年、月和日值,以及时间的小时、分钟和秒值,其中 fractional_seconds_precision 是日期时间字段的小数部分的位数。接受的 fractional_seconds_precision 值为 0 到 9。默认值为 6。默认格式由参数显式确定或由参数隐式确定。大小为 7 或 11 字节,具体取决于精度。此数据类型包含日期时间字段 、 、 和 。它包含秒的小数部分,但没有时区。SECONDNLS_TIMESTAMP_FORMATNLS_TERRITORYYEARMONTHDAYHOURMINUTESECOND

181

TIMESTAMP [(fractional_seconds_precision)] WITH TIME ZONE

的所有值以及时区位移值,其中 fractional_seconds_precision 是 datetime 字段的小数部分的位数。接受的值为 0 到 9。默认值为 6。数据类型的默认日期格式由 initialization 参数确定。大小固定为 13 字节。此数据类型包含日期时间字段 、 、 、 、 、 和 。它具有秒的小数部分和明确的时区。TIMESTAMPSECONDTIMESTAMP WITH TIME ZONENLS_TIMESTAMP_TZ_FORMATYEARMONTHDAYHOURMINUTESECONDTIMEZONE_HOURTIMEZONE_MINUTE

231

TIMESTAMP [(fractional_seconds_precision)] WITH LOCAL TIME ZONE

的所有值 ,但以下情况除外:TIMESTAMPWITHTIMEZONE

  • 当数据存储在数据库中时,数据将规范化为数据库时区。

  • 检索数据时,用户会看到会话时区中的数据。

默认格式由参数显式确定或由参数隐式确定。大小为 7 或 11 字节,具体取决于精度。NLS_TIMESTAMP_FORMATNLS_TERRITORY

182

INTERVAL YEAR [(year_precision)] TO MONTH

以年和月为单位存储一段时间,其中 year_precision 是 datetime 字段中的位数。接受的值为 0 到 9。默认值为 2。大小固定为 5 字节。YEAR

183

INTERVAL DAY [(day_precision)] [(fractional_seconds_precisionTOSECOND)]

以天、小时、分钟和秒为单位存储时间段,其中

  • day_precision 是 datetime 字段中的最大位数。接受的值为 0 到 9。默认值为 2。DAY

  • fractional_seconds_precision 是字段小数部分的位数。接受的值为 0 到 9。默认值为 6。SECOND

大小固定为 11 字节。

23

RAW(size)

长度大小字节的原始二进制数据。您必须为值指定 size。最大大小为:RAW

  • 32767 字节MAX_STRING_SIZE = EXTENDED

  • 2000 字节,如果MAX_STRING_SIZE = STANDARD

请参阅 扩展数据类型 以了解有关 initialization 参数的更多信息。MAX_STRING_SIZE

24

LONG RAW

可变长度的原始二进制数据,最大 2 GB。

69

ROWID

Base 64 字符串,表示其表中行的唯一地址。此数据类型主要用于伪列返回的值。ROWID

208

UROWID [(size)]

Base 64 字符串,表示索引组织表的一行的逻辑地址。可选 size 是 type 为 的列的大小。最大大小和默认值为 4000 字节。UROWID

96

CHAR [(尺寸 [ |BYTECHAR])]

长度、大小、字节或字符的固定长度字符数据。最大大小为 2000 字节或字符。默认和最小大小为 1 字节。

BYTE并且具有与 相同的语义。CHARVARCHAR2

96

NCHAR[(size)]

长度大小字符的固定长度字符数据。字节数最多可以是编码大小的 2 倍,编码的字节数最多可以是 3 倍最大大小由国家字符集定义决定,上限为 2000 字节。默认和最小大小为 1 个字符。AL16UTF16UTF8

112

CLOB

包含单字节或多字节字符的字符大型对象。固定宽度和可变宽度字符集均受支持,两者都使用数据库字符集。最大大小为 (4 GB - 1) * (数据库块大小)。

112

NCLOB

包含 Unicode 字符的字符大对象。支持固定宽度和可变宽度字符集,两者都使用数据库国家字符集。最大大小为 (4 GB - 1) * (数据库块大小)。存储国家字符集数据。

113

BLOB

二进制大型对象。最大大小为 (4 GB - 1) * (数据库块大小)。

114

BFILE

包含存储在数据库外部的大型二进制文件的定位器。允许对驻留在数据库服务器上的外部 LOB 进行字节流 I/O 访问。最大大小为 4 GB。

以下各节介绍了存储在 Oracle Database 中的 Oracle 数据类型。有关将这些数据类型指定为文本的信息,请参阅 文本.

字符数据类型

字符数据类型将字符(字母数字)数据存储在数据库字符集或国家字符集中,这些数据是单词和自由格式的文本。与其他数据类型相比,它们的限制较少,因此具有较少的属性。例如,字符列可以存储所有字母数字值,但列只能存储数字值。NUMBER

字符数据存储在字符串中,字节值对应于创建数据库时指定的字符集之一,例如 7 位 ASCII 或 EBCDIC。Oracle Database 支持单字节和多字节字符集。

这些数据类型用于字符数据:

有关将字符数据类型指定为文本的信息,请参阅文本文本

CHAR 数据类型

数据类型指定数据库字符集中的固定长度字符串。您可以在创建数据库时指定数据库字符集。CHAR

创建包含列的表时,将列长度指定为 size(可选),后跟 length 限定符。限定符表示字节长度语义,而限定符表示字符长度语义。在字节长度语义中, size 是要存储在列中的字节数。在字符长度语义中,size 是数据库字符集中要存储在列中的代码点数。一个代码点可能有 1 到 4 个字节,具体取决于数据库字符集和代码点编码的特定字符。Oracle 建议您指定一个 length 限定符,以显式记录列的所需长度语义。如果未指定限定符,则创建列的会话的参数值将定义长度语义,除非表属于 schema ,在这种情况下,默认语义为 。CHARBYTECHARNLS_LENGTH_SEMANTICSSYSBYTE

Oracle 确保存储在列中的所有值都具有由所选长度语义中的 size 指定的长度。如果插入的值短于列长度,则 Oracle 会将该值留空填充到列长度。如果您尝试插入的值对于列来说太长,则 Oracle 将返回错误。请注意,如果列长度以字符(码位)表示,则 blank-padding 并不能保证所有列值具有相同的字节长度。CHAR

您可以在列定义中省略 size。默认值为 1。

size 的最大值为 2000,这意味着 2000 字节或字符(码位),具体取决于所选的长度语义。但是,独立地,可以存储到列中的任何字符值的绝对最大长度为 2000 字节。例如,即使您将列长度定义为 2000 个字符,如果您尝试插入一个 2000 个字符的值,其中一个或多个码位的宽度大于 1 个字节,Oracle 也会返回错误。字符为单位的大小值是长度限制,而不是保证容量。如果希望列始终能够在任何数据库字符集中存储大小字符,请使用小于或等于 500 的 size 值。CHARCHAR

要确保在具有不同字符集的数据库和客户端之间正确进行数据转换,必须确保数据由格式正确的字符串组成。CHAR

另请参见:

有关字符集支持的更多信息,请参见 Oracle Database Globalization Support Guide,有关比较语义的信息,请参见数据类型比较规则

NCHAR 数据类型

数据类型指定国家字符集中的固定长度字符串。在创建数据库时,将国家字符集指定为 AL16UTF16 或 UTF8。AL16UTF16 和 UTF8 是 Unicode 字符集的两种编码形式(相应地是 UTF-16 和 CESU-8),因此是仅限 Unicode 的数据类型。NCHARNCHAR

当您创建包含列的表时,您可以将列长度指定为大小字符,或者更准确地说,将国家字符集中的码位指定。一个码位始终具有 2 个字节的 AL16UTF16 字节和 1 到 3 个字节的 UTF8 字节,具体取决于该码位编码的特定字符。NCHAR

Oracle 确保存储在列中的所有值都具有大小字符的长度。如果插入的值短于列长度,则 Oracle 会将该值留空填充到列长度。如果您尝试插入的值对于列来说太长,则 Oracle 将返回错误。请注意,如果国家字符集是 UTF8,则 blank-padding 不能保证所有列值具有相同的字节长度。NCHAR

您可以在列定义中省略 size。默认值为 1。

当国家字符集为 AL16UTF16 时,size 的最大值为 1000 个字符,当国家字符集为 UTF8 时,size 的最大值为 2000 个字符。但是,独立地,可以存储到列中的任何字符值的绝对最大长度为 2000 字节。例如,即使您将列长度定义为 1000 个字符,如果您尝试插入 1000 个字符的值,但国家字符集是 UTF8 并且所有码位都是 3 字节宽,Oracle 也会返回错误。size 的值是长度限制,而不是保证容量。如果希望列始终能够在两个国家字符集中存储大小字符,请使用小于或等于 666 的 size 值。NCHARNCHAR

要确保在具有不同字符集的数据库和客户端之间正确进行数据转换,必须确保数据由格式正确的字符串组成。NCHAR

如果为列分配值,则该值将从数据库字符集隐式转换为国家字符集。如果为列分配值,则该值将从国家字符集隐式转换为数据库字符集。如果值中的某些字符无法在数据库字符集中表示,则如果 session 参数的值为 ,则 Oracle 将报告错误。如果参数的值为 ,则不可表示的字符将替换为数据库字符集的默认替换字符,通常是问号 '?' 或倒置的问号 '¿'。CHARNCHARNCHARCHARNCHARNLS_NCHAR_CONV_EXCPTRUEFALSE

另请参见:

有关 Unicode 数据类型支持的信息,请参见 Oracle Database Globalization Support Guide

VARCHAR2 数据类型

数据类型指定数据库字符集中的可变长度字符串。您可以在创建数据库时指定数据库字符集。VARCHAR2

创建包含列的表时,必须将列长度指定为 size(可选),后跟 length 限定符。限定符表示字节长度语义,而限定符表示字符长度语义。在字节长度语义中,size 是列中可以存储的最大字节数。在字符长度语义中, size 是数据库字符集中可以存储在列中的最大码位数。一个代码点可能有 1 到 4 个字节,具体取决于数据库字符集和代码点编码的特定字符。Oracle 建议您指定一个 length 限定符,以显式记录列的所需长度语义。如果未指定限定符,则创建列的会话的参数值将定义长度语义,除非表属于 schema ,在这种情况下,默认语义为 。VARCHAR2BYTECHARNLS_LENGTH_SEMANTICSSYSBYTE

Oracle 将字符值完全按照您的指定方式存储在列中,只要该值不超过列的长度,则无需任何空白填充。如果您尝试插入超过指定长度的值,则 Oracle 将返回错误。VARCHAR2

size 的最小值为 1。最大值为:

  • 32767 字节MAX_STRING_SIZE = EXTENDED

  • 4000 字节,如果MAX_STRING_SIZE = STANDARD

请参阅 扩展数据类型 ,以了解有关 initialization parameter 和扩展数据类型的内部存储机制的更多信息。MAX_STRING_SIZE

虽然 size 可以用字节或字符(码位)表示,但可以存储到列中的任何字符值的独立绝对最大长度为 32767 或 4000 字节,具体取决于 .例如,即使您将列长度定义为 32767 个字符,如果您尝试插入一个或多个代码点宽于 1 个字节的 32767 个字符的值,Oracle 也会返回错误。字符为单位的大小值是长度限制,而不是保证容量。如果希望列始终能够在任何数据库字符集中存储大小字符,请使用小于或等于 8191 的 size 值(如果)或 1000(如果)。VARCHAR2MAX_STRING_SIZEVARCHAR2MAX_STRING_SIZE=EXTENDEDMAX_STRING_SIZE=STANDARD

Oracle 使用非填充比较语义比较值。VARCHAR2

要确保在具有不同字符集的数据库之间正确进行数据转换,必须确保数据由格式正确的字符串组成。有关字符集支持的更多信息,请参阅 Oracle Database Globalization Support GuideVARCHAR2

另请参见:

数据类型比较规则 有关比较语义的信息

VARCHAR 数据类型

请勿使用 data type。请改用数据类型。尽管数据类型目前是 的同义词,但与不同的比较语义相比,该数据类型计划重新定义为用于可变长度字符串的单独数据类型。VARCHARVARCHAR2VARCHARVARCHAR2VARCHAR

NVARCHAR2 数据类型

数据类型指定国家字符集中的可变长度字符串。在创建数据库时,将国家字符集指定为 AL16UTF16 或 UTF8。AL16UTF16 和 UTF8 是 Unicode 字符集的两种编码形式(相应地是 UTF-16 和 CESU-8),因此是仅限 Unicode 的数据类型。NVARCHAR2NVARCHAR2

创建包含列的表时,必须将列长度指定为大小字符,或者更准确地说,将国家字符集中的码位指定。一个码位始终具有 2 个字节的 AL16UTF16 字节和 1 到 3 个字节的 UTF8 字节,具体取决于该码位编码的特定字符。NVARCHAR2

Oracle 将字符值完全按照您的指定方式存储在列中,没有任何空白填充,前提是该值不超过列的长度。如果您尝试插入超过指定长度的值,则 Oracle 将返回错误。NVARCHAR2

size 的最小值为 1。最大值为:

  • 16383 if 且国家字符集为 AL16UTF16MAX_STRING_SIZE=EXTENDED

  • 32767 如果国家字符集为 UTF8MAX_STRING_SIZE=EXTENDED

  • 2000 if 且国家字符集为 AL16UTF16MAX_STRING_SIZE=STANDARD

  • 4000 如果国家字符集为 UTF8MAX_STRING_SIZE=STANDARD

请参阅 扩展数据类型 ,以了解有关 initialization parameter 和扩展数据类型的内部存储机制的更多信息。MAX_STRING_SIZE

与最大列长度(以字符为单位)无关,可以存储到列中的任何值的绝对最大长度为 32767 或 4000 字节,具体取决于 .例如,即使您将列长度定义为 16383 个字符,如果您尝试插入 16383 个字符的值,但国家字符集是 UTF8 并且所有码位都是 3 字节宽,Oracle 也会返回错误。size 的值是长度限制,而不是保证容量。如果希望列始终能够在两个国家字符集中存储大小字符,请使用小于或等于 10922 的 size 值(如果)或 1333(如果)。NVARCHAR2MAX_STRING_SIZENVARCHAR2MAX_STRING_SIZE=EXTENDEDMAX_STRING_SIZE=STANDARD

Oracle 使用非填充比较语义比较值。NVARCHAR2

要确保在具有不同字符集的数据库和客户端之间正确进行数据转换,必须确保数据由格式正确的字符串组成。NVARCHAR2

如果为列分配值,则该值将从数据库字符集隐式转换为国家字符集。如果为列分配值,则该值将从国家字符集隐式转换为数据库字符集。如果值中的某些字符无法在数据库字符集中表示,则如果 session 参数的值为 ,则 Oracle 将报告错误。如果参数的值为 ,则不可表示的字符将替换为数据库字符集的默认替换字符,通常是问号 '?' 或倒置的问号 '¿'。VARCHAR2NVARCHAR2NVARCHAR2VARCHAR2NVARCHAR2NLS_NCHAR_CONV_EXCPTRUEFALSE

另请参见:

有关 Unicode 数据类型支持的信息,请参阅《Oracle Database Globalization Support Guide》。

数值数据类型

Oracle Database 数值数据类型存储正负定点和浮点数、零、无穷大以及作为作的未定义结果的值 — “非数字”或 .有关将数值数据类型指定为文本的信息,请参阅数值文本NAN

NUMBER 数据类型

该数据类型存储零以及正负固定数字,绝对值从 1.0 x 10-130 到但不包括 1.0 x10 126。如果指定的算术表达式的绝对值大于或等于 1.0 x 10126,则 Oracle 将返回错误。每个值需要 1 到 22 个字节。NUMBERNUMBER

使用以下格式指定定点数:



Copy
NUMBER(p,s)

哪里:

  • p 是精度或最大有效十进制位数,其中最高有效位是最左侧的非零位,最低有效位是最右侧的已知位。Oracle 保证数字的可移植性,精度高达 20 位 100 进制数字,相当于 39 或 40 个十进制数字,具体取决于小数点的位置。

  • s 是小数位数,或从小数点到最低有效位数的位数。范围可以从 -84 到 127。

    • 正小数位数是小数点右侧到最低有效位(包括最低有效位数)的有效位数。

    • 负数位数是小数点左侧的有效位数,但不包括最低有效位数。对于负数位数,最低有效位位于小数点左侧,因为实际数据四舍五入到小数点左侧的指定位数。例如,规范 (10,-2) 表示四舍五入到百。

小数位数可以大于精度,最常见的是使用 notation 时。当 scale 大于 precision 时,精度指定小数点右侧的最大有效位数。例如,定义为的列要求小数点后的第一位数字为零,并将小数点后第五位数字之后的所有值四舍五入。eNUMBER(4,5)

最好指定定点数字列的小数位数和精度,以便在输入时进行额外的完整性检查。指定小数位数和精度不会强制所有值都为固定长度。如果值超过精度,则 Oracle 将返回错误。如果值超过小数位数,则 Oracle 会对其进行四舍五入。

使用以下格式指定整数:



Copy
NUMBER(p)

这表示精度为 p 且小数位数为 0 的定点数,相当于 。NUMBER(p,0)

使用以下格式指定浮点数:



Copy
NUMBER

缺少精度和小数位数指示符指定 Oracle 数字的最大范围和精度。

另请参见:

浮点数

表 2-2 显示了 Oracle 如何使用不同的精度和小数位数存储数据。

表 2-2 刻度和精度的存储

实际数据指定为存储为

123.89

NUMBER

123.89

123.89

NUMBER(3)

124

123.89

NUMBER(3,2)

超越精度

123.89

NUMBER(4,2)

超越精度

123.89

NUMBER(5,2)

123.89

123.89

NUMBER(6,1)

123.9

123.89

NUMBER(6,-2)

100

.01234

NUMBER(4,5)

.01234

.00012

NUMBER(4,5)

.00012

.000127

NUMBER(4,5)

.00013

.0000012

NUMBER(2,7)

.0000012

.00000123

NUMBER(2,7)

.0000012

1.2E-4

NUMBER(2,5)

0.00012

1.2E-5

NUMBER(2,5)

0.00001

FLOAT 数据类型

数据类型是 的子类型 。它可以指定精度或不指定精度,精度与它的定义相同,范围可以从 1 到 126。比例无法指定,但可以从数据中解释。每个值需要 1 到 22 个字节。FLOATNUMBERNUMBERFLOAT

要从二进制精度转换为十进制精度,请将 n 乘以 0.30103。要从十进制精度转换为二进制精度,请将十进制精度乘以 3.32193。二进制精度的最大值 126 位大致相当于十进制精度的 38 位。

和 之间的区别最好地通过示例来说明。在以下示例中,将相同的值插入到 和 列中:NUMBERFLOATNUMBERFLOAT



Copy
CREATE TABLE test (col1 NUMBER(5,2), col2 FLOAT(5)); INSERT INTO test VALUES (1.23, 1.23); INSERT INTO test VALUES (7.89, 7.89); INSERT INTO test VALUES (12.79, 12.79); INSERT INTO test VALUES (123.45, 123.45); SELECT * FROM test; COL1 COL2 ---------- ---------- 1.23 1.2 7.89 7.9 12.79 13 123.45 120

在此示例中,返回的值不能超过 5 个二进制数字。可以用 5 个二进制数字表示的最大十进制数是 31。最后一行包含超过 31 的十进制值。因此,必须截断该值,以便其有效数字不需要超过 5 个二进制数字。因此,123.45 四舍五入为 120,它只有两个有效十进制数字,只需要 4 个二进制数字。FLOATFLOAT

Oracle Database 在转换 ANSI 数据时在内部使用 Oracle 数据类型。Oracle 可供您使用,但 Oracle 建议您改用 and 数据类型,因为它们更可靠。有关更多信息,请参阅 浮点数 。FLOATFLOATFLOATBINARY_FLOATBINARY_DOUBLE

浮点数

浮点数可以具有从第一位到最后一位数字的任何位置的小数点,也可以完全没有小数点。可以选择在数字后面使用指数来增加范围,例如 1.777 e-20。小数位数值不适用于浮点数,因为小数点后可以出现的位数不受限制。

二进制浮点数与 Oracle Database 内部存储值的方式不同。值使用小数精度存储。支持的范围和精度内的所有文本都完全按照 .存储文本正是因为文本使用十进制精度(数字 0 到 9)表示。二进制浮点数使用二进制精度(数字 0 和 1)存储。这样的存储方案不能完全使用十进制精度表示所有值。通常,将值从二进制精度转换回十进制精度时,将值从十进制精度转换回二进制精度时发生的错误会被撤消。文本 0.1 就是这样一个例子。NUMBERNUMBERNUMBERNUMBER

Oracle Database 提供两种专门用于浮点数的数字数据类型:

BINARY_FLOAT

BINARY_FLOAT是一种 32 位单精度浮点数数据类型。每个值需要 4 个字节。BINARY_FLOAT

BINARY_DOUBLE

BINARY_DOUBLE是一种 64 位双精度浮点数数据类型。每个值需要 8 个字节。BINARY_DOUBLE

在列中,浮点数具有十进制精度。在 or 列中,浮点数具有二进制精度。二进制浮点数支持特殊值 infinity 和 (not a number)。NUMBERBINARY_FLOATBINARY_DOUBLENaN

您可以在表 2-3 中列出的限制内指定浮点数。指定浮点数的格式在 Numeric Literals 中定义。

表 2-3 浮点数限制

价值BINARY_FLOATBINARY_DOUBLE

最大正有限值

3.40282E+38F

1.79769313486231E+308

最小正有限值

型号:17549E-38F

2.22507485850720E-308

IEEE754一致性

浮点数据类型的 Oracle 实现基本符合电气和电子工程师协会 (IEEE) 二进制浮点运算标准 IEEE 标准 754-1985 (IEEE754)。浮点数据类型在以下方面符合 IEEE754:

  • SQL 函数实现平方根。参见 SQRT。SQRT

  • SQL 函数实现 remainder。参见 REMAINDER。REMAINDER

  • 算术运算符符合。请参见 Arithmetic Operators

  • 比较运算符符合 ,但与 的比较除外。Oracle 对所有其他值进行排序最大排序,计算结果等于 。请参阅 浮点条件NaNNaNNaNNaN

  • 转换运算符符合。请参见 Conversion Functions

  • 支持默认舍入模式。

  • 支持默认的异常处理模式。

  • 支持特殊值 -和 。请参阅 浮点条件INFINFNaN

  • 将 and 值四舍五入为整数值 and 值由 SQL 函数 、 、 和 提供。BINARY_FLOATBINARY_DOUBLEBINARY_FLOATBINARY_DOUBLEROUNDTRUNCCEILFLOOR

  • 将 / 四舍五入为十进制,将十进制四舍五入为 / 由 SQL 函数 、 、 、 和 提供。BINARY_FLOATBINARY_DOUBLEBINARY_FLOATBINARY_DOUBLETO_CHARTO_NUMBERTO_NCHARTO_BINARY_FLOATTO_BINARY_DOUBLECAST

浮点数据类型在以下方面不符合 IEEE754:

  • -0 被强制为 +0。

  • 不支持 比较。NaN

  • 所有值都强制转换为 或 。NaNBINARY_FLOAT_NANBINARY_DOUBLE_NAN

  • 不支持非默认舍入模式。

  • 不支持非默认异常处理模式。

数字优先级

对于支持数字数据类型的作,如果作的参数具有不同的数据类型,则数字优先级确定 Oracle 使用的数据类型。 具有最高的数字优先级,其次是 ,最后是 。因此,在对多个数值进行的任何运算中:BINARY_DOUBLEBINARY_FLOATNUMBER

  • 如果任何作数为 ,则 Oracle 会尝试在执行该作之前将所有作数隐式转换为 。BINARY_DOUBLEBINARY_DOUBLE

  • 如果没有任何作数是 ,但任何作数是 ,则 Oracle 会尝试在执行该作之前将所有作数隐式转换为 。BINARY_DOUBLEBINARY_FLOATBINARY_FLOAT

  • 否则,Oracle 会尝试在执行该作之前将所有作数转换为 to。NUMBER

如果需要任何隐式转换但失败,则作将失败。有关隐式转换的更多信息,请参阅表 2-8

在其他数据类型的上下文中,数字数据类型的优先级低于 datetime/interval 数据类型,而优先级高于 character 和所有其他数据类型。

LONG 数据类型

不要创建包含列的表。请改用 LOB 列 (、、 )。 仅支持向后兼容列。LONGCLOBNCLOBBLOBLONG

LONG列存储可变长度的字符串,最多包含 2 GB -1 或 2 个31-1 字节。 列具有列的许多特征。您可以使用列来存储长文本字符串。值的长度可能受计算机上可用内存的限制。 文本的格式与 文本文本 中所述。LONGVARCHAR2LONGLONGLONG

Oracle 还建议您将现有列转换为 LOB 列。LOB 列受到的限制比列少得多。此外,LOB 功能在每个版本中都得到了增强,而功能在多个版本中是静态的。有关将列转换为 LOB 的更多信息,请参阅 ALTER TABLE 和 TO_LOB 的 modify_col_properties 子句。LONGLONGLONGLONG

您可以在以下位置引用 SQL 语句中的列:LONG

  • SELECT列表

  • SET语句的子句UPDATE

  • VALUES语句的子句INSERT

值的使用受以下限制:LONG

  • 一个表只能包含一列。LONG

  • 不能创建具有属性的对象类型。LONG

  • LONG列不能出现在子句或完整性约束中(除了它们可以出现在 AND 约束中)。WHERENULLNOTNULL

  • LONG无法对列进行索引。

  • LONG不能在正则表达式中指定 data。

  • 存储的函数不能返回值。LONG

  • 您可以使用数据类型声明 PL/SQL 程序单元的变量或参数。但是,您不能从 SQL 调用程序单元。LONG

  • 在单个 SQL 语句中,所有列、更新的表和锁定的表必须位于同一数据库上。LONG

  • LONG和列不能在分布式 SQL 语句中使用,也不能复制。LONGRAW

  • 如果表同时具有 和 LOB 列,则不能将超过 4000 字节的数据绑定到同一 SQL 语句中的 和 LOB 列。但是,您可以将超过 4000 字节的数据绑定到 或 LOB 列。LONGLONGLONG

此外,列不能出现在 SQL 语句的以下部分中:LONG

  • GROUP BYclauses、clauses 或 clauses 或 with the operator in 语句ORDERBYCONNECTBYDISTINCTSELECT

  • 语句的运算符UNIQUESELECT

  • 语句的列列表CREATECLUSTER

  • 语句的子句CLUSTERCREATEMATERIALIZEDVIEW

  • SQL 内置函数、表达式或条件

  • SELECT包含子句的查询列表GROUPBY

  • SELECT子查询列表或由 、 或 set 运算符组合的查询UNIONINTERSECTMINUS

  • SELECT列表 ... 语句CREATETABLEASSELECT

  • ALTER TABLE... 语句MOVE

  • SELECT语句中子查询中的列表INSERT

触发器可以按以下方式使用数据类型:LONG

  • 触发器中的 SQL 语句可以将数据插入到列中。LONG

  • 如果列中的数据可以转换为受约束的数据类型(如 和 ),则可以在触发器内的 SQL 语句中引用列。LONGCHARVARCHAR2LONG

  • 触发器中的变量不能使用数据类型声明。LONG

  • : 和 : 不能与列一起使用。NEWOLDLONG

您可以使用 Oracle Call Interface 函数从数据库中检索值的一部分。LONG

日期时间和间隔数据类型

datetime 数据类型为 、 、 和 。datetime 数据类型的值有时称为 datetimes。interval 数据类型为 和 。interval 数据类型的值有时称为 intervals。有关将 datetime 和 interval 值表示为文本的信息,请参阅 Datetime Literals 和 Interval LiteralsDATETIMESTAMPTIMESTAMPWITHTIMEZONETIMESTAMPWITHLOCALTIMEZONEINTERVALYEARTOMONTHINTERVALDAYTOSECOND

datetimes 和 intervals 都由字段组成。这些字段的值决定了数据类型的值。表 2-4 列出了日期时间字段及其可能的日期时间和间隔值。

为避免对日期时间数据执行 DML作时出现意外结果,您可以通过查询内置 SQL 函数和 来验证数据库和会话时区。如果尚未手动设置时区,则 Oracle Database 默认使用作系统时区。如果作系统时区不是有效的 Oracle 时区,则 Oracle 使用 UTC 作为默认值。DBTIMEZONESESSIONTIMEZONE

表 2-4 日期时间字段和值

日期时间字段日期/时间的有效值INTERVAL 的有效值

YEAR

-4712 到 9999(不包括第 0 年)

任何正整数或负整数

MONTH

01 至 12

0 到 11

DAY

01 到 31(根据当前 NLS 日历参数的规则,受 和 的值限制)MONTHYEAR

任何正整数或负整数

HOUR

00 到 23

0 到 23

MINUTE

00 到 59

0 到 59

SECOND

00 到 59.9(n),其中 9(n) 是时间小数秒的精度。9(n) 部分不适用于 。DATE

0 到 59.9(n),其中 9(n) 是间隔小数秒的精度

TIMEZONE_HOUR

-12 到 14(此范围适用于夏令时更改。不适用于 或 。DATETIMESTAMP

不適用

TIMEZONE_MINUTE

(见表尾注释)

00 到 59。不适用于 或 。DATETIMESTAMP

不適用

TIMEZONE_REGION

查询数据字典视图的列。不适用于 或 。有关所有时区区域名称的完整列表,请参阅《Oracle Database Globalization Support Guide》。TZNAMEV$TIMEZONE_NAMESDATETIMESTAMP

不適用

TIMEZONE_ABBR

查询数据字典视图的列。不适用于 或 。TZABBREVV$TIMEZONE_NAMESDATETIMESTAMP

不適用

注:

TIMEZONE_HOUR 和 TIMEZONE_MINUTE 一起指定,并解释为格式为 +|- hhmi,值范围为 -12:59 到 +14:00。有关为该 API 指定时区值的信息,请参阅适用于 .NET 的 Oracle Data Provider for .NET 开发人员指南(适用于 Microsoft Windows)。

DATE 数据类型

数据类型存储日期和时间信息。尽管日期和时间信息可以用字符和数字数据类型表示,但该数据类型具有特殊的关联属性。对于每个值,Oracle 存储以下信息:年、月、日、小时、分钟和秒。DATEDATEDATE

您可以将值指定为文本,也可以使用该函数将字符或数值转换为日期值。有关以这两种方式表示值的示例,请参阅 Datetime LiteralsDATETO_DATEDATE

使用 Julian Days

儒略日数是自公元前 4712 年 1 月 1 日以来的天数。儒略日允许从共同的参考开始连续测年。您可以将日期格式模型 “J” 与日期函数一起使用,并在 Oracle 值与其 Julian 等效值之间进行转换。TO_DATETO_CHARDATE

注:

Oracle Database 使用天文系统来计算儒略日,其中公元前 4713 年指定为 -4712。相比之下,计算儒略日的历史系统将公元前 4713 年指定为 -4713。如果要将 Oracle 儒略日与使用历史系统计算的值进行比较,请注意允许 BC 日期的 365 天差异。有关更多信息,请参阅 http://aa.usno.navy.mil/faq/docs/millennium.php

默认日期值按如下方式确定:

  • 年份是当前年份,由 返回。SYSDATE

  • 月份是当前月份,由 返回。SYSDATE

  • 日期为 01 (该月的第一天)。

  • 小时、分钟和秒均为 0。

这些默认值用于请求未指定日期本身的日期值的查询,如以下示例所示,该示例在 5 月份发出:



Copy
SELECT TO_DATE('2009', 'YYYY') FROM DUAL; TO_DATE(' --------- 01-MAY-09

此语句返回 2009 年 1 月 1 日的 Julian 等效项:



Copy
SELECT TO_CHAR(TO_DATE('01-01-2009', 'MM-DD-YYYY'),'J') FROM DUAL; TO_CHAR ------- 2454833

另请参见:

从 DUAL 表中选择以获取表的说明DUAL

TIMESTAMP 数据类型

数据类型是数据类型的扩展。它存储数据类型的年、月和日,以及小时、分钟和秒值。此数据类型可用于存储精确的时间值以及跨地理区域收集和评估日期信息。指定数据类型,如下所示:TIMESTAMPDATEDATETIMESTAMP



Copy
TIMESTAMP [(fractional_seconds_precision)]

其中 fractional_seconds_precision (可选) 指定 Oracle 在 datetime 字段的小数部分存储的位数。当您创建此数据类型的列时,该值可以是 0 到 9 范围内的数字。默认值为 6。SECOND

另请参见:

TO_TIMESTAMP 了解有关将角色数据转换为数据的信息TIMESTAMP

TIMESTAMP WITH TIME ZONE 数据类型

TIMESTAMP WITH TIME ZONE是 的变体,其值中包含时区区域名称时区偏移量。时区偏移量是本地时间与 UTC(协调世界时 - 以前称为格林威治标准时间)之间的差值(以小时和分钟为单位)。此数据类型可用于保留本地时区信息。TIMESTAMP

指定数据类型,如下所示:TIMESTAMPWITHTIMEZONE



Copy
TIMESTAMP [(fractional_seconds_precision)] WITH TIME ZONE

其中 fractional_seconds_precision (可选) 指定 Oracle 在 datetime 字段的小数部分存储的位数。当您创建此数据类型的列时,该值可以是 0 到 9 范围内的数字。默认值为 6。SECOND

Oracle 时区数据源自 http://www.iana.org/time-zones/ 上提供的公共域信息。Oracle 时区数据可能无法反映此站点上可用的最新数据。

另请参见:

具有本地时区的时间戳数据类型

TIMESTAMP WITH LOCAL TIME ZONE是另一个对时区信息敏感的变体。它的不同之处在于,存储在数据库中的数据被规范化为数据库时区,并且时区信息不作为列数据的一部分存储。当用户检索数据时,Oracle 会以用户的本地会话时区返回数据。此数据类型对于始终以两层应用程序中客户端系统的时区显示的日期信息非常有用。TIMESTAMPTIMESTAMPWITHTIMEZONE

指定数据类型,如下所示:TIMESTAMPWITHLOCALTIMEZONE



Copy
TIMESTAMP [(fractional_seconds_precision)] WITH LOCAL TIME ZONE

其中 fractional_seconds_precision (可选) 指定 Oracle 在 datetime 字段的小数部分存储的位数。当您创建此数据类型的列时,该值可以是 0 到 9 范围内的数字。默认值为 6。SECOND

Oracle 时区数据源自 http://www.iana.org/time-zones/ 上提供的公共域信息。Oracle 时区数据可能无法反映此站点上可用的最新数据。

另请参见:

INTERVAL YEAR TO MONTH 数据类型

INTERVAL YEAR TO MONTH使用 和 datetime 字段存储时间段。当只有年和月值有效时,此数据类型可用于表示两个日期时间值之间的差异。YEARMONTH

指定如下:INTERVALYEARTOMONTH



Copy
INTERVAL YEAR [(year_precision)] TO MONTH

其中 year_precision 是 datetime 字段中的位数。year_precision 的默认值为 2。YEAR

在将区间值指定为文本时,您可以非常灵活地使用。请参阅 间隔文本 有关将间隔值指定为文本的详细信息。另请参阅 日期时间和间隔示例 有关使用间隔的示例。

INTERVAL DAY TO SECOND 数据类型

INTERVAL DAY TO SECOND以天、小时、分钟和秒为单位存储时间段。此数据类型可用于表示两个日期时间值之间的精确差异。

按如下所示指定此数据类型:



Copy
INTERVAL DAY [(day_precision)] TO SECOND [(fractional_seconds_precision)]

哪里

  • day_precision 是 datetime 字段中的位数。接受的值为 0 到 9。默认值为 2。DAY

  • fractional_seconds_precision 是 datetime 字段的小数部分的位数。接受的值为 0 到 9。默认值为 6。SECOND

在将区间值指定为文本时,您可以非常灵活地使用。请参阅 间隔文本 以了解有关将间隔值指定为文本的详细信息。另请参阅 日期时间和间隔示例 有关使用间隔的示例。

日期时间/间隔算术

您可以对日期 ()、时间戳 (、 和 ) 和间隔 ( 和 ) 数据执行许多算术运算。Oracle 根据以下规则计算结果:DATETIMESTAMPTIMESTAMPWITHTIMEZONETIMESTAMPWITHLOCALTIMEZONEINTERVALDAYTOSECONDINTERVALYEARTOMONTH

  • 您可以在对日期和时间戳值的算术运算中使用常量,但不能对间隔值使用常量。Oracle 在内部将时间戳值转换为日期值,并将算术 datetime 和 interval 表达式中的常量解释为天数。例如,+ 1 是明天。 - 7 是一周前。 + (10/1440) 是十分钟后。减去 sample 表的列 from 将返回自雇用每个员工以来的天数。不能将日期或时间戳值相乘或相除。NUMBERNUMBERSYSDATESYSDATESYSDATEhire_dateemployeesSYSDATE

  • Oracle 将 和作数隐式转换为 .BINARY_FLOATBINARY_DOUBLENUMBER

  • 每个值都包含一个时间分量,许多日期作的结果包括一个分数。这个分数是指一天的一部分。例如,1.5 天是 36 小时。这些分数也由 Oracle 内置函数返回,用于对数据进行常见作。例如,该函数返回两个日期之间的月数。结果的小数部分表示 31 天月份的该部分。DATEDATEMONTHS_BETWEEN

  • 如果一个作数是值或数值,并且两者都不包含时区或秒的小数部分,则:DATE

    • Oracle 将另一个作数隐式转换为 data。例外情况是数值乘以间隔,这将返回一个间隔。DATE

    • 如果另一个作数具有时区值,则 Oracle 在返回的值中使用会话时区。

    • 如果另一个作数具有秒的小数部分值,则秒的小数部分值将丢失。

  • 当您将时间戳、间隔或数值传递给专为数据类型设计的内置函数时,Oracle 会将非值隐式转换为值。请参阅 日期时间函数 ,以了解有关哪些函数会导致隐式转换为 的信息。DATEDATEDATEDATE

  • 当间隔计算返回日期时间值时,结果必须是实际的日期时间值,否则数据库将返回错误。例如,接下来的两个语句返回错误:

    
    
    
    Copy
    SELECT TO_DATE('31-AUG-2004','DD-MON-YYYY') + TO_YMINTERVAL('0-1') FROM DUAL; SELECT TO_DATE('29-FEB-2004','DD-MON-YYYY') + TO_YMINTERVAL('1-0') FROM DUAL;

    第一个失败,因为在 31 天的月份中增加一个月将导致 9 月 31 日,这不是一个有效的日期。第二个失败,因为向仅每 4 年存在的日期添加 1 年无效。但是,下一个语句会成功,因为将 4 年添加到 2 月 29 日的日期是有效的:

    
    
    
    Copy
    SELECT TO_DATE('29-FEB-2004', 'DD-MON-YYYY') + TO_YMINTERVAL('4-0') FROM DUAL; TO_DATE(' --------- 29-FEB-08
  • Oracle 以 UTC 时间执行所有时间戳算术。对于 ,Oracle 将日期时间值从数据库时区转换为 UTC,并在执行算术后转换回数据库时区。对于 ,datetime 值始终以 UTC 为单位,因此无需转换。TIMESTAMPWITHLOCALTIMEZONETIMESTAMPWITHTIMEZONE

表 2-5 是日期时间算术运算的矩阵。短划线表示不支持的作。

表 2-5 日期时间算术矩阵

作数 & 运算符日期时间戳间隔数值的

日期

+

DATE

DATE

-

NUMBER

INTERVAL

DATE

DATE

*

/

时间戳

+

TIMESTAMP

DATE

-

INTERVAL

INTERVAL

TIMESTAMP

DATE

*

/

间隔

+

DATE

TIMESTAMP

INTERVAL

-

INTERVAL

*

INTERVAL

/

INTERVAL

数值的

+

DATE

DATE

NA

-

NA

*

INTERVAL

NA

/

NA

例子

您可以将间隔值表达式添加到开始时间。考虑带有 column 的 sample 表 .以下语句将 30 天添加到该列的值:oe.ordersorder_dateorder_date



Copy
SELECT order_id, order_date + INTERVAL '30' DAY AS "Due Date" FROM orders ORDER BY order_id, "Due Date";
支持夏令时

对于任何给定的时区区域,Oracle Database 会自动确定夏令时是否有效,并相应地返回本地时间值。datetime 值足以让 Oracle 确定夏令时是否在除边界情况之外的所有情况下对给定区域有效。边界情况发生在夏令时生效或失效的期间。例如,在美国太平洋地区,当夏令时生效时,时间从凌晨 2:00 变为凌晨 3:00。凌晨 2 点到 3 点之间的 1 小时间隔不存在。当夏令时失效时,时间从凌晨 2:00 改回凌晨 1:00,并重复凌晨 1 点到 2 点之间的一小时间隔。

为了解决这些边界情况,Oracle 使用 and format 元素,如表 2-19 中所述。 表示 DateTime 输入字符串中的时区区域名称。示例包括 ''、'' 和 ''。 表示带有夏令时信息的时区区域名称的缩写形式。例如,“' 表示美国/太平洋标准时间,”“表示美国/太平洋夏令时。要查看 和 format 元素的有效值列表,请查询动态性能视图的 and 列。TZRTZDTZRAustralia/NorthUTCSingaporeTZDPSTPDTTZRTZDTZNAMETZABBREVV$TIMEZONE_NAMES

注意:

夏令时功能需要时区区域名称。这些名称存储在两种类型的时区文件中:一个大文件和一个小文件。其中一个文件是默认文件,具体取决于您的环境和您使用的 Oracle Database 版本。有关时区文件和名称的更多信息,请参阅《Oracle Database 全球化支持指南》。

有关这两个文件中时区区域名称的完整列表,请参阅《Oracle Database Globalization Support Guide》。

Oracle 时区数据源自 http://www.iana.org/time-zones/ 上提供的公共域信息。Oracle 时区数据可能无法反映此站点上可用的最新数据。

另请参见:

日期时间和间隔示例

以下示例显示如何指定某些 datetime 和 interval 数据类型。



Copy
CREATE TABLE time_table (start_time TIMESTAMP, duration_1 INTERVAL DAY (6) TO SECOND (5), duration_2 INTERVAL YEAR TO MONTH);

该列的类型为 。隐式秒的小数部分精度为 6。start_timeTIMESTAMPTIMESTAMP

该列的类型为 。字段中的最大位数为 6,小数秒中的最大位数为 5。所有其他日期时间字段中的最大位数为 2。duration_1INTERVALDAYTOSECONDDAY

该列的类型为 。每个字段 ( 和 ) 中值的最大位数为 2。duration_2INTERVALYEARTOMONTHYEARMONTH

区间数据类型没有格式模型。因此,要调整它们的表示方式,必须组合字符功能,例如并连接组件。例如,以下示例分别查询 和 表,并将间隔输出从“yy-mm”格式更改为“yy years mm months”,将 “dd-hh” 更改为“dddd days hh hours”:EXTRACThr.employeesoe.orders



Copy
SELECT last_name, EXTRACT(YEAR FROM (SYSDATE - hire_date) YEAR TO MONTH) || ' years ' || EXTRACT(MONTH FROM (SYSDATE - hire_date) YEAR TO MONTH) || ' months' "Interval" FROM employees; LAST_NAME Interval ------------------------- -------------------- OConnell 2 years 3 months Grant 1 years 9 months Whalen 6 years 1 months Hartstein 5 years 8 months Fay 4 years 2 months Mavris 7 years 4 months Baer 7 years 4 months Higgins 7 years 4 months Gietz 7 years 4 months . . . SELECT order_id, EXTRACT(DAY FROM (SYSDATE - order_date) DAY TO SECOND) || ' days ' || EXTRACT(HOUR FROM (SYSDATE - order_date) DAY TO SECOND) || ' hours' "Interval" FROM orders; ORDER_ID Interval ---------- -------------------- 2458 780 days 23 hours 2397 685 days 22 hours 2454 733 days 21 hours 2354 447 days 20 hours 2358 635 days 20 hours 2381 508 days 18 hours 2440 765 days 17 hours 2357 1365 days 16 hours 2394 602 days 15 hours 2435 763 days 15 hours . . .
RAW 和 LONG RAW 数据类型

数据类型 和 存储 Oracle Database 在不同系统之间移动数据时不会显式转换的数据。这些数据类型适用于二进制数据或字节字符串。例如,可用于存储图形、声音、文档或二进制数据数组,其解释取决于用途。RAWLONGRAWLONGRAW

Oracle 强烈建议您将列转换为二进制 LOB () 列。LOB 列受到的限制比列少得多。有关更多信息,请参阅 TO_LOBLONGRAWBLOBLONG

RAW是一种可变长度的数据类型,与 类似,但 Oracle Net(将客户端软件连接到数据库或将一个数据库连接到另一个数据库)以及 Oracle 导入和导出实用程序在传输数据时不执行字符转换。相比之下,如果数据在数据库之间传输,则 Oracle Net 和 Oracle 导入和导出实用程序会自动在不同数据库字符集之间转换、 、 和数据,如果数据在数据库和客户端之间传输。客户端字符集由客户端接口的类型(例如 OCI 或 JDBC)和客户端配置(例如,环境变量)确定。VARCHAR2RAWLONGRAWCHARVARCHAR2LONGNLS_LANG

当 Oracle 隐式将数据转换为 CHARACTER 数据时,生成的 character 值包含二进制输入的十六进制表示形式,其中每个字符都是表示四个连续数据位的十六进制数字 (-, -)。例如,一个字节的数据(位11001011 变为值 。RAWLONGRAW09AFRAWRAWCB

当 Oracle 将字符数据隐式转换为 or 时,它会将每个连续的输入字符解释为二进制数据的四个连续位的十六进制表示形式,并通过连接这些位来构建结果 or 值。如果任何输入字符不是十六进制数字 (-, -, -),则会报告错误。如果字符数为奇数,则结果为 undefined。RAWLONGRAWRAWLONGRAW09AFaf

SQL 函数 和 执行等效于上述隐式转换的显式转换。使用 Oracle 提供的 PL/SQL 软件包和 中的函数,可以在 和 字符数据之间进行其他类型的转换。RAWTOHEXHEXTORAWRAWUTL_RAWUTL_I18N

大型对象 (LOB) 数据类型

内置的 LOB 数据类型 、 、 和 (内部存储) 和 (外部存储) 可以存储大型非结构化数据,例如文本、图像、视频和空间数据。、 和 data 的大小最大为 (232-1 字节) * (LOB 存储的参数值)。如果数据库中的表空间是标准块大小,并且您在创建 LOB 列时使用了 LOB storage 参数的默认值,则这相当于 (232-1 字节) * (数据库块大小)。 数据最多可以为 264-1 字节,但您的作系统可能会对此最大值施加限制。BLOBCLOBNCLOBBFILEBLOBCLOBNCLOBCHUNKCHUNKBFILE

创建表时,您可以选择为 LOB 列或 LOB 对象属性指定与为表指定的表空间和存储特征不同的表空间和存储特征。

CLOB、 和 最大约 4000 字节的值将在内联存储(如果在创建 LOB 列时启用 row 存储)。大于 4000 字节的 LOB 始终存储在外部。有关更多信息,请参阅 ENABLE STORAGE IN ROWNCLOBBLOB

LOB 列包含可引用内部(在数据库中)或外部(数据库外)LOB 值的 LOB 定位符。从表中选择 LOB 实际上会返回 LOB 定位器,而不是整个 LOB 值。LOB 上的软件包和 Oracle 调用接口 (OCI)作通过这些定位器执行。DBMS_LOB

LOB 与 LOB 类型类似,但在以下方面有所不同:LONGLONGRAW

  • LOB 可以是对象类型 (用户定义的数据类型) 的属性。

  • LOB 定位器存储在表列中,无论是否具有实际的 LOB 值。、 和 值 可以存储在单独的表空间中。 数据存储在服务器上的外部文件中。BLOBNCLOBCLOBBFILE

  • 当您访问 LOB 列时,将返回定位符。

  • LOB 的大小最大为 (232-1 字节)*(数据库块大小)。 数据最多可以为 264-1 字节,但您的作系统可能会对此最大值施加限制。BFILE

  • LOB 允许对数据进行高效、随机、分段的访问和作。

  • 您可以在表中定义多个 LOB 列。

  • 除 外,您可以在对象中定义一个或多个 LOB 属性。NCLOB

  • 您可以声明 LOB 绑定变量。

  • 您可以选择 LOB 列和 LOB 属性。

  • 您可以插入新行或更新包含一个或多个 LOB 列或具有一个或多个 LOB 属性的对象的现有行。在更新作中,您可以将内部 LOB 值设置为 、 empty 或将整个 LOB 替换为 数据。您可以将 设置为 或使其指向其他文件。NULLBFILENULL

  • 您可以使用另一个 LOB 行列交集或 LOB 属性更新 LOB 行列交集或 LOB 属性。

  • 您可以删除包含 LOB 列或 LOB 属性的行,从而也可以删除 LOB 值。对于 BFILE,不会删除实际的作系统文件。

只需发出 or 语句,即可访问和填充内联 LOB 列(存储在数据库中的 LOB 列)或 LOB 属性(存储在数据库中的对象类型列的属性)的行。INSERTUPDATE

LOB 列的限制

LOB 列受许多规则和限制的约束。有关完整列表,请参阅 Oracle Database SecureFiles 和 Large Objects 开发人员指南

另请参见:

BFILE 数据类型

该数据类型允许访问存储在 Oracle Database 外部文件系统中的二进制文件 LOB。列或属性存储定位器,该定位器用作指向服务器文件系统上二进制文件的指针。定位器将维护目录名称和文件名。BFILEBFILEBFILE

您可以使用该函数更改 a 的文件名和路径,而不会影响基表。有关此内置 SQL 函数的更多信息,请参阅 BFILENAMEBFILEBFILENAME

二进制文件 LOB 不参与事务,并且不可恢复。相反,底层作系统提供文件完整性和持久性。 数据最多可以为 264-1 字节,但您的作系统可能会对此最大值施加限制。BFILE

数据库管理员必须确保外部文件存在,并且 Oracle 进程具有该文件的作系统读取权限。

该数据类型支持对大型二进制文件的只读支持。您无法修改或复制此类文件。Oracle 提供了用于访问文件数据的 API。用于访问文件数据的主要接口是软件包和 Oracle 调用接口 (OCI)。BFILEDBMS_LOB

BLOB 数据类型

数据类型存储非结构化二进制大型对象。 对象可以被认为是没有字符集语义的 bitstreams 。 对象最多可以存储 (4 GB -1) * (LOB 存储参数的值)的二进制数据。如果数据库中的表空间是标准块大小,并且您在创建 LOB 列时使用了 LOB storage 参数的默认值,则这相当于 (4 GB - 1) * (数据库块大小)。BLOBBLOBBLOBCHUNKCHUNK

BLOB对象具有完整的事务支持。通过 SQL、软件包或 Oracle 调用接口 (OCI) 所做的更改将完全参与事务处理。 可以提交和回滚值作。但是,您不能将定位器保存在一个事务的 PL/SQL 或 OCI 变量中,然后在另一个事务或会话中使用它。DBMS_LOBBLOBBLOB

CLOB 数据类型

数据类型存储单字节和多字节字符数据。固定宽度和可变宽度字符集均受支持,并且都使用数据库字符集。 对象最多可以存储 (4GB -1) * (LOB storage 的参数值) 的字符数据。如果数据库中的表空间是标准块大小,并且您在创建 LOB 列时使用了 LOB storage 参数的默认值,则这相当于 (4 GB - 1) * (数据库块大小)。CLOBCLOBCHUNKCHUNK

CLOB对象具有完整的事务支持。通过 SQL、软件包或 Oracle 调用接口 (OCI) 所做的更改将完全参与事务处理。 可以提交和回滚值作。但是,您不能将定位器保存在一个事务的 PL/SQL 或 OCI 变量中,然后在另一个事务或会话中使用它。DBMS_LOBCLOBCLOB

NCLOB 数据类型

数据类型存储 Unicode 数据。固定宽度字符集和可变宽度字符集均受支持,并且都使用国家字符集。 对象最多可以存储 (4GB -1) * (LOB 存储的参数值) 的字符文本数据。如果数据库中的表空间是标准块大小,并且您在创建 LOB 列时使用了 LOB storage 参数的默认值,则这相当于 (4 GB - 1) * (数据库块大小)。NCLOBNCLOBCHUNKCHUNK

NCLOB对象具有完整的事务支持。通过 SQL、软件包或 OCI 所做的更改完全参与事务处理。 可以提交和回滚值作。但是,您不能将定位器保存在一个事务的 PL/SQL 或 OCI 变量中,然后在另一个事务或会话中使用它。DBMS_LOBNCLOBNCLOB

另请参见:

有关 Unicode 数据类型支持的信息,请参见 Oracle Database Globalization Support Guide

扩展数据类型

从 Oracle Database 12c 开始,您可以为 、 和 数据类型指定最大大小 32767 字节。您可以通过设置 initialization 参数来控制数据库是否支持这个新的最大大小,如下所示:VARCHAR2NVARCHAR2RAWMAX_STRING_SIZE

  • 如果 ,则 Oracle Database 12c 之前版本的大小限制适用:数据类型为 4000 字节,数据类型为 2000 字节。这是默认设置。MAX_STRING_SIZE=STANDARDVARCHAR2NVARCHAR2RAW

  • 如果 ,则数据类型的大小限制为 32767 字节。MAX_STRING_SIZE=EXTENDEDVARCHAR2NVARCHAR2RAW

另请参见:

设置 = 可能会更新数据库对象并可能使它们失效。有关此参数的含义以及如何设置和启用此新功能的完整信息,请参阅 Oracle Database ReferenceMAX_STRING_SIZEEXTENDED

声明大小大于 4000 字节的 OR 数据类型,或声明大小大于 2000 字节的数据类型,都是扩展数据类型。扩展数据类型列利用 Oracle 的 LOB 技术以离线方式存储。LOB 存储始终与表对齐。在使用自动分段空间管理 (ASSM) 管理的表空间中,扩展数据类型列存储为 SecureFiles LOB。否则,它们将存储为 BasicFiles LOB。使用 LOB 作为存储机制仅在内部进行。因此,您无法使用软件包处理这些 LOB。VARCHAR2NVARCHAR2RAWDBMS_LOB

注意:

请注意,尽管必须进行设置才能将数据类型的大小设置为大于 2000 字节,但只有当数据类型的大小大于 4000 字节时,数据类型才会存储为离线 LOB。例如,您必须设置 才能声明数据类型。但是,该列是内联存储的。MAX_STRING_SIZE=EXTENDEDRAWRAWMAX_STRING_SIZE=EXTENDEDRAW(3000)

您可以像使用标准数据类型一样使用扩展数据类型,但需要注意以下事项:

  • 有关在扩展数据类型列上创建索引时或要求索引强制实施主键或唯一约束时的特殊注意事项,请参阅在扩展数据类型列上创建索引

  • 如果列表分区的分区键列是扩展数据类型列,则要为分区指定的值列表可能会超过分区边界的 4K 字节限制。有关如何解决此问题的信息,请参阅 list_partitions 子句 。CREATETABLE

  • initialization 参数的值会影响以下内容:MAX_STRING_SIZE

rowid 数据类型

数据库中的每一行都有一个地址。以下各节介绍了 Oracle Database 中两种形式的行地址。

ROWID 数据类型

Oracle Database 原生的堆组织表中的行具有称为 rowid 的行地址。您可以通过查询 pseudocolumn 来检查 rowid 行地址。此伪列的值是表示每行地址的字符串。这些字符串的数据类型为 .请参阅 伪列 以了解有关伪列的更多信息。ROWIDROWIDROWID

Rowid 包含以下信息:

  • 包含该行的数据文件的数据。此字符串的长度取决于您的作系统。

  • 数据块中的

  • 包含该行的数据库文件。第一个数据文件的数字为 1。此字符串的长度取决于您的作系统。

  • 数据对象编号,这是分配给每个数据库段的标识号。您可以从数据字典视图 、 和 中检索数据对象编号。共享同一 Segment 的对象 (例如,同一集群中的聚集表) 具有相同的对象编号。USER_OBJECTSDBA_OBJECTSALL_OBJECTS

Rowid 存储为 base 64 值,可以包含字符 A-Z、a-z、0-9 以及加号 (+) 和正斜杠 (/)。Rowid 不能直接使用。您可以使用提供的包来解释 rowid 内容。包函数提取并提供有关上面列出的四个 rowid 元素的信息。DBMS_ROWID

另请参见:

Oracle Database PL/SQL 软件包和类型参考,了解有关软件包提供的函数及其使用方法的信息DBMS_ROWID

UROWID 数据类型

某些表的行具有非物理或永久地址,或者不是由 Oracle Database 生成的地址。例如,索引组织表的行地址存储在索引叶中,索引叶可以移动。外部表(例如通过网关访问的 DB2 表)的 rowid 不是标准的 Oracle rowid。

Oracle 使用通用 rowid (urowids) 来存储索引组织表和外部表的地址。索引组织的表具有逻辑 urowid,而外部表具有外部 urowids。两种类型的 urowid 都存储在伪列中(堆组织表的物理 rowid 也是如此)。ROWID

Oracle 根据表的主键创建逻辑 rowid。只要主键不改变,逻辑 rowid 就不会改变。按索引组织的表的伪列的数据类型为 。您可以像访问堆组织表的伪列一样访问此伪列(使用 ... 声明)。如果要存储按索引组织的表的 rowid,则可以为该表定义一个类型的列,并将伪列的值检索到该列中。ROWIDUROWIDROWIDSELECTROWIDtoUROWIDROWID

ANSI、DB2 和 SQL/DS 数据类型

创建表和集群的 SQL 语句也可以使用 ANSI 数据类型以及 IBM 产品 SQL/DS 和 DB2 中的数据类型。Oracle 识别的 ANSI 或 IBM 数据类型名称与 Oracle Database 数据类型名称不同。它将数据类型转换为等效的 Oracle 数据类型,将 Oracle 数据类型记录为列数据类型的名称,并根据下表中显示的转换将列数据存储在 Oracle 数据类型中。

表 2-6 转换为 Oracle 数据类型的 ANSI 数据类型

ANSI SQL 数据类型Oracle 数据类型

CHARACTER(n)

CHAR(n)

CHAR(n)

CHARACTER VARYING(n)

CHAR VARYING(n)

VARCHAR2(n)

NATIONAL CHARACTER(n)

NATIONAL CHAR(n)

NCHAR(n)

NCHAR(n)

NATIONAL CHARACTER VARYING(n)

NATIONAL CHAR VARYING(n)

NCHAR VARYING(n)

NVARCHAR2(n)

NUMERIC[(p,s)]

DECIMAL[(p,s)] (注 1)

NUMBER(p,s)

INTEGER

INT

SMALLINT

NUMBER(38)

FLOAT (注 2)

DOUBLE PRECISION (注 3)

REAL (注 4)

FLOAT(126)

FLOAT(126)

FLOAT(63)

笔记:

  1. 数据类型 and 只能指定定点数。对于这些数据类型,小数位数 () 默认为 0。NUMERICDECIMALs

  2. 数据类型是具有二进制精度 b 的浮点数。此数据类型的默认精度为 126 二进制或 38 十进制。FLOAT

  3. 数据类型是二进制精度为 126 的浮点数。DOUBLE PRECISION

  4. 数据类型是二进制精度为 63 或十进制 18 的浮点数。REAL

不要使用以下 SQL/DS 和 DB2 数据类型定义列,因为它们没有相应的 Oracle 数据类型:

  • GRAPHIC

  • LONG VARGRAPHIC

  • VARGRAPHIC

  • TIME

请注意,数据类型也可以表示为 Oracle datetime data。TIME

表 2-7 转换为 Oracle 数据类型的 SQL/DS 和 DB2 数据类型

SQL/DS 或 DB2 数据类型Oracle 数据类型

CHARACTER(n)

CHAR(n)

VARCHAR(n)

VARCHAR(n)

LONG VARCHAR

LONG

DECIMAL(p,s) (注 1)

NUMBER(p,s)

INTEGER

SMALLINT

NUMBER(p,0)

FLOAT (注 2)

NUMBER

笔记:

  1. 数据类型只能指定定点数。对于此数据类型, s 默认为 0。DECIMAL

  2. 数据类型是具有二进制精度 b 的浮点数。此数据类型的默认精度为 126 二进制或 38 十进制。FLOAT

用户定义的类型

用户定义的数据类型使用 Oracle 内置数据类型和其他用户定义的数据类型作为对象类型的构建块,这些对象类型对应用程序中数据的结构和行为进行建模。以下各节介绍了各种类别的用户定义类型。

另请参见:

对象类型

对象类型是应用程序处理的实际实体 (如采购订单) 的抽象。对象类型是具有三种组件的架构对象:

  • 名称,用于唯一标识该架构中的对象类型。

  • 属性,它们是内置类型或其他用户定义的类型。属性对实际实体的结构进行建模。

  • 方法,它们是用 PL/SQL 编写并存储在数据库中的函数或过程,或者用 C 或 Java 等语言编写并存储在外部。方法实现应用程序可以对实际实体执行的作。

REF 数据类型

对象标识符(由 关键字 表示)唯一标识对象,并使您能够从其他对象或关系表中引用对象。名为 的数据类型类别表示此类引用。数据类型是对象标识符的容器。 值是指向对象的指针。OIDREFREFREF

当一个值指向一个不存在的对象时,它被称为 “悬空”。悬空不同于 null 。要确定 a 是否悬空,请使用条件 [] 。例如,给定 object view 在示例模式中,该列的类型为 to type ,该类型具有属性 :REFREFREFREFREFISNOTDANGLINGoc_ordersoecustomer_refREFcustomer_typcust_email



Copy
SELECT o.customer_ref.cust_email FROM oc_orders o WHERE o.customer_ref IS NOT DANGLING;
Varray

数组是一组有序的数据元素。给定数组的所有元素都具有相同的数据类型。每个元素都有一个索引,该索引是对应于元素在数组中的位置的数字。

数组中的元素数是数组的大小。Oracle 数组的大小是可变的,这就是它们被称为 varray 的原因。在声明 varray 时,必须指定最大大小。

当您声明 varray 时,它不会分配空间。它定义了一个类型,您可以将其用作:

  • 关系表的列的数据类型

  • 对象类型属性

  • PL/SQL 变量、参数或函数返回类型

Oracle 通常将数组对象存储为内联 (作为行数据的一部分) 或非行 (在 LOB 中),具体取决于其大小。但是,如果为 varray 指定单独的存储特征,则 Oracle 会将其离线存储,而不管其大小如何。有关 varray 存储的更多信息,请参阅 CREATE TABLE 的varray_col_properties

嵌套表

嵌套表类型对一组无序的元素进行建模。这些元素可以是内置类型或用户定义的类型。您可以将嵌套表视为单列表,或者,如果嵌套表是对象类型,则可以将其视为多列表,其中包含对象类型的每个属性的列。

嵌套表定义不分配空间。它定义了一个类型,您可以使用它来声明:

  • 关系表的列的数据类型

  • 对象类型属性

  • PL/SQL 变量、参数或函数返回类型

当嵌套表显示为关系表中的列类型或对象表的基础对象类型的属性时,Oracle 会将所有嵌套表数据存储在单个表中,该表与封闭的关系表或对象表相关联。

Oracle 提供的类型

Oracle 提供了基于 SQL 的接口,用于在内置类型或 ANSI 支持的类型不足时定义新类型。这些类型的行为可以用 C/C++、Java 或 PL/SQL 实现。Oracle 数据库自动提供输入输出、新数据类型的异构客户端访问以及应用程序与数据库之间数据传输优化所需的低级基础设施服务。

这些接口可用于构建用户定义的(或对象)类型,并且 Oracle 还使用这些接口来创建一些通常有用的数据类型。服务器提供了几种这样的数据类型,它们既服务于广泛的水平应用领域(例如,类型),也服务于特定的垂直应用领域(例如,空间类型)。Any

以下各节介绍了 Oracle 提供的类型以及对其实现和使用文档的交叉引用:

任何类型

这些类型提供了对实际类型未知的过程参数和表列的高度灵活的建模。通过这些数据类型,您可以动态封装和访问类型描述、数据实例和任何其他 SQL 类型的数据实例集。这些类型具有用于构建和访问的 OCI 和 PL/SQL 接口。Any

任意类型

此类型可以包含任何命名 SQL 类型或未命名瞬态类型的类型描述。

安睿数据

此类型包含给定类型的实例、数据以及类型的描述。 可用作 Table 列数据类型,并允许在单个列中存储异构值。这些值可以是 SQL 内置类型,也可以是用户定义的类型。ANYDATA

ANYDATASET

此类型包含给定类型的描述以及该类型的一组数据实例。 可用作需要这种灵活性的过程参数数据类型。数据实例的值可以是 SQL 内置类型,也可以是用户定义的类型。ANYDATASET

另请参见:

有关 ANYTYPEANYDATA 和 ANYDATASET 类型的信息,请参阅 Oracle Database PL/SQL 包和类型参考

XML 类型

可扩展标记语言 (XML) 是由万维网联盟 (W3C) 开发的一种标准格式,用于表示万维网上的结构化和非结构化数据。通用资源标识符 (URI) 标识 Web 上任何位置的 Web 页等资源。Oracle 提供了用于处理 XML 和 URI 数据的类型,以及用于访问存储在数据库本身中的数据的一类称为类型的 URI。它还提供了一组类型,用于从数据库内部存储和访问外部和内部 URI。DBURIRef

XMLType

此 Oracle 提供的类型可用于在数据库中存储和查询 XML 数据。 具有成员函数,可用于使用 XPath 表达式访问、提取和查询 XML 数据。XPath 是 W3C 委员会为遍历 XML 文档而制定的另一个标准。Oracle 函数支持许多 W3C XPath 表达式。Oracle 还提供了一组 SQL 函数和 PL/SQL 软件包,用于从现有关系数据或对象关系数据创建值。XMLTypeXMLTypeXMLType

XMLType是系统定义的类型,因此您可以将其用作函数的参数或表或视图列的数据类型。您还可以创建 的表和视图。在表中创建列时,可以选择将 XML 数据存储在列中、作为二进制 XML(在内部存储为 )或对象关系。XMLTypeXMLTypeCLOBCLOB

您还可以注册架构(使用包)并创建符合已注册架构的表或列。在这种情况下,Oracle 默认将 XML 数据存储在基础对象关系列中,但您甚至可以为基于架构的数据指定 XML 或二进制 XML 列中的存储。DBMS_XMLSCHEMACLOB

无论存储机制如何,对列的查询和 DML 的运行方式都是一样的。XMLType

另请参见:

有关使用 XMLType 列的信息,请参见 Oracle XML DB 开发人员指南

URI 数据类型

Oracle 提供了一系列 URI 类型—, , , 和 -,它们通过继承层次结构相关联。 是对象类型,其他是 的子类型。由于 是超类型,因此您可以创建此类型的列,并在此列中存储或键入实例。URITypeDBURITypeXDBURITypeHTTPURITypeURITypeURITypeURITypeDBURITypeHTTPURIType

HTTPURIType

可用于存储指向外部网页或文件的 URL。Oracle 使用 HTTP(超文本传输协议)访问这些文件。HTTPURIType

XDBURIT型

可用于将 XML 数据库层次结构中的文档公开为可嵌入表中任何列的 URI。它由一个 URL 组成,该 URL 包含它所引用的 XML 文档的分层名称,以及一个表示 XPath 语法的可选片段。片段与 URL 部分之间用井号 (#) 分隔。以下行是 :XDBURITypeURITypeXDBURITypeXDBURIType



Copy
/home/oe/doc1.xml /home/oe/doc1.xml#/orders/order_item

DBURIType

DBURIType可用于存储值,这些值引用数据库中的数据。存储值允许您引用存储在数据库内部或外部的数据,并一致地访问数据。DBURIRefDBURIRef

DBURIRef值使用类似 XPath 的表示形式来引用数据库中的数据。如果您将数据库想象成一个 XML 树,那么您会将表、行和列视为 XML 文档中的元素。例如,示例 Human Resources 用户将看到以下 XML 树:hr



Copy
<HR> <EMPLOYEES> <ROW> <EMPLOYEE_ID>205</EMPLOYEE_ID> <LAST_NAME>Higgins</LAST_NAME> <SALARY>12008</SALARY> .. <!-- other columns --> </ROW> ... <!-- other rows --> </EMPLOYEES> <!-- other tables..--> </HR> <!-- other user schemas on which you have some privilege on..-->

是此虚拟 XML 文档的 XPath 表达式。因此,要引用表中员工编号为 205 的员工的值,您可以编写 as,DBURIRefSALARYEMPLOYEESDBURIRef



Copy
/HR/EMPLOYEES/ROW[EMPLOYEE_ID=205]/SALARY

使用此模型,您可以引用存储在列或其他列中的数据,并将它们作为 URL 公开给外部世界。CLOB

URIFactory 软件包

Oracle 还提供了该软件包,该软件包可以创建和返回 .该包分析 URL 字符串,标识 URL 的类型(HTTP、 等),并创建子类型的实例。要创建实例,URL 必须以前缀开头 。例如,将创建一个实例,并将创建一个实例。URIFactoryURITypesDBURIDBURI/oradbURIFactory.getURI('/oradb/HR/EMPLOYEES')DBURITypeURIFactory.getUri('/sys/schema')XDBURIType

另请参见:

空间类型

Oracle Spatial and Graph 旨在使支持位置的应用程序、地理信息系统 (GIS) 应用程序和地理成像应用程序的用户更轻松、更自然地管理空间数据。将空间数据存储在 Oracle Database 中后,您可以轻松地处理、检索空间数据并将其与数据库中存储的所有其他数据相关联。以下数据类型仅在安装了 Oracle Spatial and Graph 时可用。

SDO_GEOMETRY

空间对象的几何描述存储在用户定义表中对象类型的单行中。任何具有 column 类型的表都必须具有另一列或一组列,用于定义该表的唯一主键。此类表有时称为 geometry 表。SDO_GEOMETRYSDO_GEOMETRY

对象类型具有以下定义:SDO_GEOMETRY



Copy
CREATE TYPE SDO_GEOMETRY AS OBJECT (sgo_gtype NUMBER, sdo_srid NUMBER, sdo_point SDO_POINT_TYPE, sdo_elem_info SDO_ELEM_INFO_ARRAY, sdo_ordinates SDO_ORDINATE_ARRAY); /
SDO_TOPO_GEOMETRY

此类型描述拓扑几何图形,该几何图形存储在用户定义表中对象类型的单列中的单行中。SDO_TOPO_GEOMETRY

对象类型具有以下定义:SDO_TOPO_GEOMETRY



Copy
CREATE TYPE SDO_TOPO_GEOMETRY AS OBJECT (tg_type NUMBER, tg_id NUMBER, tg_layer_id NUMBER, topology_id NUMBER); /
SDO_GEORASTER

在 GeoRaster 对象关系模型中,栅格格网或图像对象存储在用户定义表中对象类型的单行中。此类表称为 GeoRaster 表。SDO_GEORASTER

对象类型具有以下定义:SDO_GEORASTER



Copy
CREATE TYPE SDO_GEORASTER AS OBJECT (rasterType NUMBER, spatialExtent SDO_GEOMETRY, rasterDataTable VARCHAR2(32), rasterID NUMBER, metadata XMLType); /
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值