- PL/SQL 教程
- PL/SQL - 主页
- PL/SQL - 概述
- PL/SQL - 环境
- PL/SQL - 基本语法
- PL/SQL - 数据类型
- PL/SQL - 变量
- PL/SQL - 常量和文字
- PL/SQL - 运算符
- PL/SQL - 条件
- PL/SQL - 循环
- PL/SQL - 字符串
- PL/SQL - 数组
- PL/SQL - 过程
- PL/SQL - 函数
- PL/SQL - 游标
- PL/SQL - 记录
- PL/SQL - 异常
- PL/SQL - 触发器
- PL/SQL - 包
- PL/SQL - 集合
- PL/SQL - 事务
- PL/SQL - 日期和时间
- PL/SQL - DBMS 输出
- PL/SQL - 面向对象
- PL/SQL 有用资源
- PL/SQL - 问题与解答
- PL/SQL - 快速指南
- PL/SQL - 有用的资源
- PL/SQL - 讨论
PL/SQL - 数据类型
在本章中,我们将讨论 PL/SQL 中的数据类型。PL/SQL 变量、常量和参数必须具有有效的数据类型,该数据类型指定存储格式、约束和有效值范围。本章我们将重点关注SCALAR和LOB数据类型。其他两种数据类型将在其他章节中介绍。
序列号 | 类别及描述 |
---|---|
1 | 标量 没有内部组件的单个值,例如NUMBER、DATE或BOOLEAN。 |
2 | 大对象 (LOB) 指向与其他数据项分开存储的大对象的指针,例如文本、图形图像、视频剪辑和声音波形。 |
3 | 合成的 具有可单独访问的内部组件的数据项。例如,收藏和记录。 |
4 | 参考 指向其他数据项的指针。 |
PL/SQL 标量数据类型和子类型
PL/SQL 标量数据类型和子类型属于以下类别 -
序列号 | 日期类型和描述 |
---|---|
1 | 数字 对其执行算术运算的数值。 |
2 | 特点 表示单个字符或字符串的字母数字值。 |
3 | 布尔值 对其执行逻辑运算的逻辑值。 |
4 | 约会时间 日期和时间。 |
PL/SQL 提供数据类型的子类型。例如,数据类型 NUMBER 有一个名为 INTEGER 的子类型。您可以使用 PL/SQL 程序中的子类型使数据类型与其他程序中的数据类型兼容,同时将 PL/SQL 代码嵌入到另一个程序(例如 Java 程序)中。
PL/SQL 数字数据类型和子类型
下表列出了 PL/SQL 预定义的数值数据类型及其子类型 -
序列号 | 数据类型和描述 |
---|---|
1 | PLS_INTEGER 范围为 -2,147,483,648 到 2,147,483,647 的有符号整数,以 32 位表示 |
2 | BINARY_INTEGER 范围为 -2,147,483,648 到 2,147,483,647 的有符号整数,以 32 位表示 |
3 | BINARY_FLOAT 单精度 IEEE 754 格式浮点数 |
4 | BINARY_DOUBLE 双精度 IEEE 754 格式浮点数 |
5 | 数字(精度,比例) 绝对值在 1E-130 到(但不包括)1.0E126 范围内的定点或浮点数。NUMBER 变量也可以表示 0 |
6 | DEC(精度,比例) ANSI 特定定点类型,最大精度为 38 位十进制数字 |
7 | DECIMAL(精度,小数位数) IBM 特定定点类型,最大精度为 38 位十进制数字 |
8 | 数字(前、后) 浮点型,最大精度为 38 位小数 |
9 | 双精度 ANSI 特定浮点类型,最大精度为 126 位二进制数字(大约 38 位十进制数字) |
10 | 漂浮 ANSI 和 IBM 特定浮点类型,最大精度为 126 位二进制数字(大约 38 位十进制数字) |
11 | INT ANSI 特定整数类型,最大精度为 38 位十进制数字 |
12 | 整数 ANSI 和 IBM 特定整数类型,最大精度为 38 位十进制数字 |
13 | 小智 ANSI 和 IBM 特定整数类型,最大精度为 38 位十进制数字 |
14 | 真实的 浮点型,最大精度为 63 位二进制数(约 18 位十进制数) |
以下是有效的声明 -
DECLARE num1 INTEGER; num2 REAL; num3 DOUBLE PRECISION; BEGIN null; END; /
当上面的代码被编译并执行时,它会产生以下结果 -
PL/SQL procedure successfully completed
PL/SQL 字符数据类型和子类型
以下是 PL/SQL 预定义字符数据类型及其子类型的详细信息 -
序列号 | 数据类型和描述 |
---|---|
1 | 字符 定长字符串,最大长度为32,767字节 |
2 | VARCHAR2 可变长度字符串,最大长度为 32,767 字节 |
3 | 生的 可变长度二进制或字节字符串,最大大小为 32,767 字节,不由 PL/SQL 解释 |
4 | NCHAR 固定长度的国家字符串,最大长度为 32,767 字节 |
5 | NVARCHAR2 变长国家字符串,最大长度为 32,767 字节 |
6 | 长的 可变长度字符串,最大长度为 32,760 字节 |
7 | 长生 可变长度二进制或字节字符串,最大大小为 32,760 字节,不由 PL/SQL 解释 |
8 | 行ID 物理行标识符,普通表中的行的地址 |
9 | 乌鲁维德 通用行标识符(物理、逻辑或外部行标识符) |
PL/SQL 布尔数据类型
BOOLEAN数据类型存储逻辑运算中使用的逻辑值。逻辑值是布尔值TRUE和FALSE以及值NULL。
但是,SQL 没有与 BOOLEAN 等效的数据类型。因此,布尔值不能用于 -
- SQL语句
- 内置 SQL 函数(例如TO_CHAR)
- 从 SQL 语句调用 PL/SQL 函数
PL/SQL 日期时间和间隔类型
DATE数据类型用于存储固定长度的日期时间,其中包括自午夜以来以秒为单位的时间。有效日期范围为公元前4712年1月1日至公元9999年12月31日。
默认日期格式由Oracle初始化参数NLS_DATE_FORMAT设置。例如,默认值可能是“DD-MON-YY”,其中包括表示月份中日期的两位数字、月份名称的缩写以及年份的最后两位数字。例如,2012 年 10 月 1 日。
每个 DATE 包括世纪、年、月、日、小时、分钟和秒。下表显示了每个字段的有效值 -
字段名称 | 有效日期时间值 | 有效间隔值 |
---|---|---|
年 | -4712 至 9999(不包括 0 年) | 任何非零整数 |
月 | 01 至 12 | 0 至 11 |
天 | 01 到 31(受 MONTH 和 YEAR 值的限制,根据区域设置的日历规则) | 任何非零整数 |
小时 | 00 至 23 | 0 至 23 |
分钟 | 00 至 59 | 0 至 59 |
第二 | 00 到 59.9(n),其中 9(n) 是时间小数秒的精度 | 0 到 59.9(n),其中 9(n) 是间隔小数秒的精度 |
TIMEZONE_HOUR | -12 至 14(范围适应夏令时变化) | 不适用 |
TIMEZONE_MINUTE | 00 至 59 | 不适用 |
TIMEZONE_REGION | 在动态性能视图V$TIMEZONE_NAMES中找到 | 不适用 |
TIMEZONE_ABBR | 在动态性能视图V$TIMEZONE_NAMES中找到 | 不适用 |
PL/SQL 大对象 (LOB) 数据类型
大对象 (LOB) 数据类型是指文本、图形图像、视频剪辑和声音波形等大数据项。LOB 数据类型允许高效、随机、分段地访问该数据。以下是预定义的 PL/SQL LOB 数据类型 -
数据类型 | 描述 | 尺寸 |
---|---|---|
B文件 | 用于在数据库外部存储操作系统文件中的大型二进制对象。 | 取决于系统。不能超过 4 GB。 |
BLOB | 用于在数据库中存储大型二进制对象。 | 8 至 128 太字节 (TB) |
CLOB | 用于在数据库中存储大块字符数据。 | 8 至 128 TB |
NCLOB | 用于在数据库中存储大块的NCHAR数据。 | 8 至 128 TB |
PL/SQL 用户定义的子类型
子类型是另一种数据类型的子集,称为其基本类型。子类型与其基类型具有相同的有效操作,但只有其有效值的子集。
PL/SQL 在STANDARD包中预定义了几个子类型。例如,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 可以被赋值,但不能等同于任何东西,包括它本身。