PL / SQL - 数据类型

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

S.No类别&描述
1

标量

没有内部组件的单个值,例如 NUMBER,DATE, BOOLEAN .

2

大对象(LOB)

指向单独存储的大对象的指针来自其他数据项,例如文本,图形图像,视频剪辑和声音波形.

3

复合

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

4

参考

指向其他数据项的指针.

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

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

S.No日期类型&描述
1

数字

执行算术运算的数值.

2

字符

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

3

布尔

执行逻辑运算的逻辑值.

4

日期时间

日期和时间.

PL/SQL提供数据类型的子类型.例如,数据类型NUMBER具有名为INTEGER的子类型.您可以使用PL/SQL程序中的子类型使数据类型与其他程序中的数据类型兼容,同时将PL/SQL代码嵌入到另一个程序中,例如Java程序.

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

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

S.No数据类型&描述
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

NUMBER(prec,scale)

固定ed-point或浮点数,绝对值范围为1E-130到(但不包括)1.0E126. NUMBER变量也可以表示0

6

DEC(预定,比例)

ANSI特定定点类型,最大值精度为38位十进制数

7

DECIMAL(prec,scale)

IBM特定定点类型,最大精度为38位小数

8

NUMERIC(pre,secale)

最大精度为38位十进制数的浮动类型

9

双精度

ANSI特定浮点类型,最大精度为126位二进制数字(约38位小数)

10

FLOAT

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

11

INT

ANSI特定整数类型,最大精度为38位小数

12

INTEGER

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

13

SMALLINT

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

14

REAL

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

以下是有效声明 :

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

编译并执行上述代码时,会产生以下结果 :

PL/SQL procedure successfully completed

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

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

S.No数据类型和描述
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

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

9

UROWID

通用行标识符(物理,逻辑,或外国行标识符)

PL/SQL布尔数据类型

BOOLEAN 数据类型存储逻辑运算中使用的逻辑值.逻辑值是布尔值 TRUE FALSE 和value 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",其中包括月份日期的两位数字,月份名称的缩写以及年份的最后两位数字.例如,01-OCT-12.

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

字段名称有效日期时间值有效间隔值
-4712到9999(不包括第0年)任何非零整数
MONTH01到120到11
DAY01到31(根据区域设置的日历规则,受MONTH和YEAR的值限制)任何非零整数
HOUR00到230到23
          MINUTE00到59
SECOND00到59.9(n),其中9(n)是时间小数秒的精度0到59.9(n),其中9(n)是区间小数秒的精度
TIMEZONE_HOUR-12到14(范围适应夏令时变化)不适用
TIMEZONE_MINUTE00到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用户定义的子类型

子类型是另一个数据的子集type,它被称为基类型.子类型与其基类型具有相同的有效操作,但只有其有效值的子集.

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,但不能将其等同于任何东西,包括它自己.