Plsql 简明教程

PL/SQL - Data Types

本章中,我们将讨论 PL/SQL 中的数据类型。PL/SQL 变量、常量和参数必须具有有效的数据类型,该数据类型指定了存储格式、约束和有效范围。本章中,我们将重点介绍 SCALARLOB 数据类型。其他两个数据类型将在其他章节中介绍。

S.No

Category & Description

1

Scalar 没有内部组件的单一值,如 NUMBER, DATE,BOOLEAN

2

Large Object (LOB) 指向与其他数据项分开存储的大对象的指针,例如文本、图形图像、视频剪辑和声波形式。

3

Composite 具有可单独访问的内部组件的数据项。例如,集合和记录。

4

Reference 指向其他数据项的指针。

PL/SQL Scalar Data Types and Subtypes

PL/SQL 标量数据类型和子类型属于以下类别 −

S.No

Date Type & Description

1

执行算术运算的 Numeric 数值。

2

表示单个字符或字符字符串的 Character 字母数字值。

3

执行逻辑运算的 Boolean 逻辑值。

4

Datetime Dates and times.

PL/SQL 提供数据类型的子类型。例如,数据类型 NUMBER 具有名为 INTEGER 的子类型。在将 PL/SQL 代码嵌入到其他程序(例如 Java 程序)时,可以在 PL/SQL 程序中使用子类型来使数据类型与其他程序中的数据类型兼容。

PL/SQL Numeric Data Types and Subtypes

下表列出了 PL/SQL 预定义的数值数据类型及其子类型 −

S.No

Data Type & Description

1

用 32 位表示的,范围在 -2,147,483,648 到 2,147,483,647 之间的带符号整数

2

用 32 位表示的,范围在 -2,147,483,648 到 2,147,483,647 之间的带符号整数

3

IEEE 754 格式的单精度浮点数

4

IEEE 754 格式的双精度浮点数

5

NUMBER(prec, scale) 绝对值为 1E-130 至 (但不包括) 1.0E126 的定点数或浮点数。NUMBER 变量还可以表示 0

6

DEC(prec, scale) 最大精度为 38 位十进制数字的 ANSI 特定定点类型

7

DECIMAL(prec, scale) 最大精度为 38 位十进制数字的 IBM 特定定点类型

8

NUMERIC(pre, secale) 最大精度为 38 位十进制数字的浮点类型

9

DOUBLE PRECISION 最大精度为 126 位二进制数字(约 38 位十进制数字)的 ANSI 特定浮点类型

10

FLOAT 最大精度为 126 位二进制数字(约 38 位十进制数字)的 ANSI 和 IBM 特定浮点类型

11

INT 最大精度为 38 位十进制数字的 ANSI 特定整数类型

12

INTEGER 最大精度为 38 位十进制数字的 ANSI 和 IBM 特定整数类型

13

SMALLINT 最大精度为 38 位十进制数字的 ANSI 和 IBM 特定整数类型

14

REAL 最大精度为 63 位二进制数字(约 18 位十进制数字)的浮点类型

以下是一个有效的声明 −

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

编译并执行上述代码后,将产生以下结果 −

PL/SQL procedure successfully completed

PL/SQL Character Data Types and Subtypes

以下是 PL/SQL 预定义字符数据类型及其子类型 −

S.No

Data Type & Description

1

CHAR 最大长度为 32,767 字节的定长字符字符串

2

VARCHAR2 最大长度为 32,767 字节的可变长度字符字符串

3

RAW 最大长度为 32,767 字节的可变长度二进制字符串或字节字符串,不受 PL/SQL 解释

4

NCHAR 最大长度为 32,767 字节的定长国家/地区代码字符字符串

5

NVARCHAR2 最大长度为 32,767 字节的可变长度国家/地区代码字符字符串

6

LONG 最大长度为 32,760 字节的可变长度字符字符串

7

LONG RAW 最大大小为 32,760 字节的可变长度二进制或字节字符串,不经 PL/SQL 解析

8

ROWID 物理行标识符,普通表中行的地址

9

UROWID 通用行标识符(物理、逻辑或外部行标识符)

PL/SQL Boolean Data Types

BOOLEAN 数据类型存储在逻辑运算中使用的逻辑值。逻辑值为布尔值 TRUEFALSE 以及值 NULL

然而,SQL 没有等同于 BOOLEAN 的数据类型。因此,布尔值不能在 − 中使用

  1. SQL statements

  2. 内置 SQL 函数(如 TO_CHAR

  3. 从 SQL 语句调用的 PL/SQL 函数

PL/SQL Datetime and Interval Types

DATE 数据类型用于存储固定长度日期时间,其中包括自午夜以来的时间(以秒为单位)。有效的日期范围是从公元前 4712 年 1 月 1 日到公元 9999 年 12 月 31 日。

默认日期格式由 Oracle 初始化参数 NLS_DATE_FORMAT 设置。例如,默认可能为“DD-MON-YY”,其中包括一个用于表示当月日期的两位数字、月份名称的缩写以及该年的最后两位数字。例如,01-OCT-12。

每个 DATE 包含世纪、年、月、日、小时、分钟和秒。下表显示了每个字段的有效值 −

Field Name

Valid Datetime Values

Valid Interval Values

YEAR

-4712 到 9999(不包括公元 0 年)

Any nonzero integer

MONTH

01 to 12

0 to 11

DAY

01 到 31(受 MONTH 和 YEAR 的值限制,根据该国家/地区的日历规则)

Any nonzero integer

HOUR

00 to 23

0 to 23

MINUTE

00 to 59

0 to 59

SECOND

00 到 59.9(n),其中 9(n) 是时间分数秒的精度

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

TIMEZONE_HOUR

-12 到 14(此范围适应夏令时变更)

Not applicable

TIMEZONE_MINUTE

00 to 59

Not applicable

TIMEZONE_REGION

在动态性能视图 V$TIMEZONE_NAMES 中找到

Not applicable

TIMEZONE_ABBR

在动态性能视图 V$TIMEZONE_NAMES 中找到

Not applicable

PL/SQL Large Object (LOB) Data Types

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

Data Type

Description

Size

BFILE

用于将大型二进制对象存储在数据库外部的操作系统文件中。

系统相关。不能超过 4 千兆字节 (GB)。

BLOB

用于在数据库中存储较大的二进制对象。

8 到 128 太字节 (TB)

CLOB

用于在数据库中存储较大的字符数据块。

8 to 128 TB

NCLOB

用于在数据库中存储较大的 NCHAR 数据块。

8 to 128 TB

PL/SQL User-Defined Subtypes

子类型是其他数据类型的子集,后者称为其基础类型。子类型具有与其基础类型相同有效的操作,但其有效值仅为其子集。

PL/SQL 在包 STANDARD 中预定义了几个子类型。例如,PL/SQL 预定义了子类型 CHARACTERINTEGER ,如下所示:

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.

NULLs in PL/SQL

PL/SQL NULL 值表示 missingunknown data ,它们不是整数、字符或任何其他特定数据类型。请注意, NULL 与空数据字符串或空字符值 '\0' 不同。可以赋值 NULL,但它不能与任何内容相等,包括它自身。