返回介绍

PL/SQL 数据类型 - PL/SQL 教程

发布于 2025-02-22 13:46:46 字数 5839 浏览 0 评论 0 收藏 0

PL/SQL 变量,常量和参数都必须有一个有效的数据类型,指定存储格式,约束和值的有效范围。本教程介绍标量和 LOB 在 PL/SQL,其他两种数据类型可用的数据类型将涵盖在后面的章节。

分类描述
标量单值没有内部组件,如 NUMBER, DATE 或 BOOLEAN
大对象(LOB)指向其他数据项,如文本,图形图像,视频剪辑和声音等存储大对象
复合具有可单独访问的内部组件的数据项。例如,集合和记录
引用指向其他数据项

PL/SQL 标量数据类型和子类型

PL/SQL 标量数据类型和子类型受到以下几大类:

数据类型描述
数字在其上执行的算术运算的数值
字符代表单个字符或字符的字母数字字符串值
布尔在其上执行的逻辑运算的逻辑值
日期时间日期和时间

PL/SQL 提供的数据类型的子类型。例如,数据类型数有一个叫作 INTEGER 的子类型。可以使用子类型在 PL/SQL 程序中,使数据类型与其他程序中的数据类型兼容,而嵌入 PL/SQL 代码在另一个程序,如 Java 程序。

PL/SQL 数值数据类型和子类型

以下是 PL/ SQL 预定义的数字数据类型及其子类型的详细信息:

数据类型描述
PLS_INTEGER通过 2,147,483,647 到-2147483648 范围内有符号整数,以 32 位表示
BINARY_INTEGER通过 2,147,483,647 到-2147483648 范围内的有符号整数,以 32 位表示
BINARY_FLOAT单精度 IEEE 754 格式的浮点数
BINARY_DOUBLE双精度 IEEE 754 格式的浮点数
NUMBER(prec, scale)定点或浮点数在范围 1E-130 至(但不包括)绝对值 1.0E126。 NUMBER 变量也可以表示 0
DEC(prec, scale)ANSI 具体的定点类型使用 38 位小数最大精度
DECIMAL(prec, scale)IBM 特定的固定点型具有 38 位小数最大精度
NUMERIC(pre, secale)浮点类型具有 38 位小数最大精度。
DOUBLE PRECISION具有 126 个二进制数字最大精度 ANSI 特定浮点型(约 38 位十进制数)
FLOAT具有 126 个二进制数字(约 38 位十进制数)最大精度 ANSI 和 IBM 特定的浮点型
INT具有 38 位小数最大精度 ANSI 具体的整数类型
INTEGERANSI 和 IBM 的 38 位小数最大精度具体的整数类型
SMALLINTANSI 和 IBM 的 38 位小数最大精度具体的整数类型
REAL具有 63 位二进制数字最大精度浮点型(大约 18 位小数)

下面是一个有效的声明:

DECLARE
   num1 INTEGER;
   num2 REAL;
   num3 DOUBLE PRECISION;
BEGIN
   null;
END;
/

让我们编译和运行上面的程序,这将产生以下结果:

PL/SQL procedure successfully completed

PL/SQL 字符数据类型和子类型

以下是 PL/SQL 预定义的字符数据类型及其子类型的详细信息:

数据类型描述
CHAR具有 32,767 个字节的最大尺寸固定长度字符串
VARCHAR2具有 32,767 个字节的最大尺寸变长字符串
RAW可变长度的二进制或字节字符串的 32,767 个字节的最大尺寸,而不是由 PL/ SQL 解释
NCHAR具有 32,767 个字节的最大尺寸的固定长度国家字符串
NVARCHAR2具有 32,767 个字节的最大尺寸可变长度国家字符串
LONG具有 32,760 字节最大尺寸变长字符串
LONG RAW可变长度的二进制或字节字符串的 32,760 字节的最大尺寸,而不是由 PL/SQL 解释
ROWID物理行标识符,一行在一个普通的表中的地址
UROWID物理通用行标识符(物理,逻辑,或外国的行标识符)

PL/SQL 布尔数据类型

在逻辑操作中使用布尔数据类型存储的逻辑值。逻辑值为:true 和 false 的布尔值以及 NULL 值。

但是,SQL 没有数据类型等同于布尔。因此,布尔值不能用于:

  • SQL 语句
  • 内置 SQL 函数(如 TO_CHAR)
  • 从 SQL 语句调用 PL/ SQL 函数

PL/SQL 日期时间和间隔类型

DATE 数据类型存储固定长度的日期时间,其中包括每天在几秒钟内从午夜开始的时间。有效的日期范围从公元前 4712 年 1 月 1 日至 999912 月 31 日。

默认的日期格式由 Oracle 初始化参数 NLS_DATE_FORMAT 设置。例如,默认的可以是“DD-MON-YY',它包括一个两位数字的月份中的日期,月份名称的缩写,以及年的最后两位数字,例如,01- OCT-12。

每个日期,包括世纪,年,月,日,时,分,秒。下表显示了每个字段的有效值:

字段名称有效日期时间值有效的间隔值
YEAR-4712 to 9999 (年除外 0)任何非零整数
MONTH01 to 120 to 11
DAY01 to 31 (受制于年份和月份的数值,按日历的区域设置的规则)任何非零整数
HOUR00 to 230 to 23
MINUTE00 to 590 to 59
SECOND00 to 59.9(n), 其中,9(n)是时间小数秒精度0 to 59.9(n), 其中,9(n)是区间小数秒精度
TIMEZONE_HOUR-12 to 14 (范围可容纳夏令时更改)不适用
TIMEZONE_MINUTE00 to 59不适用
TIMEZONE_REGION在动态性能视图找到 V$TIMEZONE_NAMES不适用
TIMEZONE_ABBR在动态性能视图找到 V$TIMEZONE_NAMES不适用

PL/SQL 大对象(LOB)数据类型

大对象(LOB)数据类型是指大到数据项,例如文本,图形图像,视频剪辑和声音波形。 LOB 数据类型允许高效的,随机的,分段访问这些数据。以下是预定义的 PL/SQL LOB 数据类型:

数据类型描述大小
BFILE用于存储大型二进制对象在操作数据库之外的系统文件依赖于系统,不能超过 4 千兆字节(GB)
BLOB用于存储大型二进制对象在数据库中8 到 128 兆兆字节(TB)的
CLOB用于存储字符大块数据在数据库中8 - 128 TB
NCLOB用于在数据库中存储大块 NCHAR 数据8 - 128 TB

PL/SQL 用户定义的子类型

子类型是另一种数据类型,这是所谓的基本类型的子集。 子类型具有其基本类型相同的操作,但其只是有效值的一个子集。

PL/SQL 预定义了一些子类型的封装标准。例如,PL/SQL 预定义的子类型 CHARACTER 和 INTEGER 如下:

SUBTYPE CHARACTER IS CHAR;
SUBTYPE INTEGER IS NUMBER(38,0);

可以定义和使用自己的子类型。下面的程序说明定义和使用一个用户定义的子类型:

DECLARE
   SUBTYPE name IS char(20);
   SUBTYPE message IS varchar2(100);
   salutation name;
   greetings message;
BEGIN
   salutation := 'Reader ';
   greetings := 'Welcome to the World of PL/SQL';
   dbms_output.put_line('Hello ' || salutation || greetings);
END;
/

当上述代码在 SQL 提示符执行时,它产生了以下结果:

Hello Reader Welcome to the World of PL/SQL

PL/SQL procedure successfully completed.

PL/SQL NULL

PL/SQL NULL 值表示缺少或未知的数据,蛤它不是一个整数,字符,或任何其他特定的数据类型。需要注意的是 NULL 不是一样的空数据串或空字符值'\0'。NULL 可以被分配,但它不能与任何东西等同,包括其本身。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文