Oracle PL/SQL 数据类型:布尔型、数字型、日期型 [示例]

什么是 PL/SQL 数据类型?

PL/SQL 中的数据类型用于定义数据在 Oracle 存储和处理期间的存储、处理和处理方式。数据类型与特定的存储格式和范围限制相关联。在 Oracle 中,每个值或常量都分配有一个数据类型。

PL/SQL 和 SQL 数据类型的主要区别在于,SQL 数据类型仅限于表列,而 PL/SQL 数据类型用于 PL/SQL 块。本教程稍后将对此进行详细介绍。

以下是不同 Oracle PL/SQL 数据类型的图示

PL/SQL Datatypes
PL/SQL 中的不同数据类型

PL/SQL 字符数据类型

此数据类型主要以字符串格式存储字母数字字符。

在为 CHARACTER 数据类型赋值时,字面值应始终用单引号括起来。

此字符数据类型进一步细分为以下几类

  • CHAR 数据类型(固定字符串长度)
  • VARCHAR2 数据类型(可变字符串长度)
  • VARCHAR 数据类型
  • NCHAR(本地固定字符串长度)
  • NVARCHAR2(本地可变字符串长度)
  • LONG 和 LONG RAW
数据类型 描述 语法
CHAR 此数据类型存储字符串值,字符串的长度在声明变量时固定。

  • 如果变量没有占用为其声明的全部长度,Oracle 将用空格填充变量。因此,即使变量没有完全占用,Oracle 也会为声明的长度分配内存。
  • 此数据类型的长度限制为 1-2000 字节。
  • 对于处理固定数据长度的情况,CHAR 数据类型更适合使用。
grade CHAR;
manager CHAR (10):= 'guru99';

语法说明

  • 第一个声明语句声明了变量“grade”,其 CHAR 数据类型,最大长度为 1 字节(默认值)。
  • 第二个声明语句声明了变量“manager”,其 CHAR 数据类型,最大长度为 10,并赋值为“guru99”,长度为 6 字节。在这种情况下,Oracle 将分配 10 字节的内存,而不是 6 字节。
VARCHAR2 此数据类型存储字符串,但字符串的长度不固定。

  • 此数据类型的长度限制为表列长度 1-4000 字节,变量长度为 1-32767 字节。
  • 在变量声明时为每个变量定义了长度。
  • 但 Oracle 只在变量定义后分配内存,即 Oracle 只考虑存储在变量中的字符串的实际长度来分配内存,而不是声明部分为变量指定的长度。
  • 为了优化内存使用,最好使用 VARCHAR2 而不是 CHAR 数据类型。
manager VARCHAR2(10) := ‘guru99';

语法说明

  • 上面的声明语句声明了变量“manager”,其 VARCHAR2 数据类型,最大长度为 10,并赋值为“guru99”,长度为 6 字节。在这种情况下,Oracle 将仅分配 6 字节的内存。
VARCHAR 这与 VARCHAR2 数据类型同义。

  • 为了避免行为变化,最好使用 VARCHAR2 而不是 VARCHAR。
manager VARCHAR(10) := ‘guru99';

语法说明

  • 上面的声明语句声明了变量“manager”,其 VARCHAR 数据类型,最大长度为 10,并赋值为“guru99”,长度为 6 字节。在这种情况下,Oracle 将仅分配 6 字节的内存。(与 VARCHAR2 类似)
NCHAR 此数据类型与 CHAR 数据类型相同,但字符集是国家字符集。

  • 此字符集可以通过 NLS_PARAMETERS 为会话定义。
  • 字符集可以是 UTF16 或 UTF8。
  • 长度限制为 1-2000 字节。
native NCHAR(10);

语法说明

  • 上面的声明语句声明了变量“native”,其 NCHAR 数据类型,最大长度为 10。
  • 此变量的长度取决于字符集中定义的(长度数)/字节。
NVARCHAR2 此数据类型与 VARCHAR2 数据类型相同,但字符集是国家字符集。

  • 此字符集可以通过 NLS_PARAMETERS 为会话定义。
  • 字符集可以是 UTF16 或 UTF8。
  • 长度限制为 1-4000 字节。
Native var NVARCHAR2(10):='guru99';

语法说明

  • 上面的声明语句声明了变量“Native_var”,其 NVARCHAR2 数据类型,最大长度为 10。
LONG 和 LONGRAW 此数据类型用于存储高达 2GB 的大型文本或原始数据。

  • 这些主要用于数据字典。
  • LONG 数据类型用于存储字符集数据,而 LONG RAW 用于以二进制格式存储数据。
  • LONG RAW 数据类型接受媒体对象、图像等,而 LONG 只处理可以使用字符集存储的数据。
Large_text LONG;
Large_raw LONG RAW;

语法说明

  • 上面的声明语句分别声明了变量“Large_text”为 LONG 数据类型,“Large_raw”为 LONG RAW 数据类型。

注意:Oracle 不建议使用 LONG 数据类型。应首选 LOB 数据类型。

PL/SQL 数字数据类型

此数据类型最多可存储 38 位精度的定点或浮点数。此数据类型用于处理只包含数字数据的字段。变量可以声明为包含精度和小数位数信息,也可以不包含这些信息。为该数据类型赋值时,值不必用引号括起来。

A NUMBER(8,2);
B NUMBER(8);
C NUMBER;

语法说明

  • 在上例中,第一个声明将变量“A”声明为数字数据类型,总精度为 8,小数位数为 2。
  • 第二个声明将变量“B”声明为数字数据类型,总精度为 8,没有小数位数。
  • 第三个声明是最通用的,声明变量“C”为数字数据类型,对精度或小数位数没有限制。最多可接受 38 位数字。

PL/SQL 布尔数据类型

此数据类型存储逻辑值。Oracle 布尔数据类型表示 TRUE 或 FALSE,主要用于条件语句。为该数据类型赋值时,值不必用引号括起来。

Var1 BOOLEAN;

语法说明

  • 在上例中,变量“Var1”被声明为 BOOLEAN 数据类型。根据设定的条件,代码的输出将是 true 或 false。

PL/SQL 日期数据类型

此数据类型以日期格式存储值,包括日期、月份和年份。当变量用 DATE 数据类型定义时,除了日期,它还可以保存时间信息,如果未指定,则默认时间信息设置为 12:00:00。为该数据类型赋值时,值需要用引号括起来。

标准的 Oracle 输入和输出时间格式为“DD-MON-YY”,它是在会话级别设置在 NLS_PARAMETERS (NLS_DATE_FORMAT) 中的。

newyear DATE:='01-JAN-2015';
current_date DATE:=SYSDATE;

语法说明

  • 在上例中,变量“newyear”被声明为 DATE 数据类型,并赋值为 2015 年 1 月 1 日的日期。
  • 第二个声明将变量 current_date 声明为 DATE 数据类型,并赋值为当前系统日期。
  • 这两个变量都包含时间信息。

PL/SQL LOB 数据类型

此数据类型主要用于存储和操作大量非结构化数据,如图像、多媒体文件等。Oracle 倾向于使用 LOB 而不是 LONG 数据类型,因为它比 LONG 数据类型更灵活。以下是 LOB 相对于 LONG 数据类型的几个主要优点。

  • 表中具有 LONG 数据类型的列数限制为 1,而表中具有 LOB 数据类型的列数没有限制。
  • 数据接口工具在数据复制期间接受表中的 LOB 数据类型,但会忽略表中的 LONG 列。这些 LONG 列需要手动复制。
  • LONG 列的大小为 2GB,而 LOB 可以存储高达 128TB。
  • Oracle 在每个发行版中都在不断改进 LOB 数据类型以满足现代需求,而 LONG 数据类型则保持不变,更新不多。

因此,最好使用 LOB 数据类型而不是 LONG 数据类型。以下是不同的 LOB 数据类型。它们可以存储高达 128TB 的数据。

  1. BLOB
  2. CLOB 和 NCLOB
  3. BFILE
数据类型 描述 语法
BLOB 此数据类型以二进制文件格式存储 LOB 数据,最大尺寸为 128TB。它不基于字符集详细信息存储数据,因此可以存储非结构化数据,如多媒体对象、图像等。
Binary_data BLOB;

语法说明

  • 在上例中,变量“Binary_data”被声明为 BLOB。
CLOB 和 NCLOB CLOB 数据类型将 LOB 数据存储到字符集中,而 NCLOB 将数据存储到本地字符集中。由于这些数据类型使用基于字符集的存储,因此它们无法存储多媒体、图像等无法放入字符字符串的数据。这些数据类型的最大尺寸为 128TB。
Charac_data CLOB;

语法说明

  • 在上例中,变量“Charac_data”被声明为 CLOB 数据类型。
BFILE
  • BFILE 是将非结构化二进制格式数据存储在数据库外部作为操作系统文件的那些数据类型。
  • BFILE 的大小受限于操作系统,它们是只读文件,不能修改。

摘要

我们已经介绍了 PL/SQL 中可用的各种简单数据类型及其语法。我们将在后续主题中学习复杂数据类型。